DOCUMENTATION:
  name: strftime
  version_added: "2.4"
  short_description: date formating
  description:
    - Using Python's C(strftime) function, take a data formating string and a date/time to create a formated date.
  notes:
    - This is a passthrough to Python's C(stftime), for a complete set of formatting options go to https://strftime.org/.
  positional: _input, second, utc
  options:
    _input:
      description:
        - A formating string following C(stftime) conventions.
        - See L(the Python documentation, https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior) for a reference.
      type: str
      required: true
    second:
      description: Datetime in seconds from C(epoch) to format, if not supplied C(gmttime/localtime) will be used.
      type: int
    utc:
      description: Whether time supplied is in UTC.
      type: bool
      default: false

EXAMPLES: |
  # for a complete set of features go to  https://strftime.org/

  # Display year-month-day
  {{ '%Y-%m-%d' | strftime }}
  # => "2021-03-19"

  # Display hour:min:sec
  {{ '%H:%M:%S' | strftime }}
  # => "21:51:04"

  # Use ansible_date_time.epoch fact
  {{ '%Y-%m-%d %H:%M:%S' | strftime(ansible_date_time.epoch) }}
  # => "2021-03-19 21:54:09"

  # Use arbitrary epoch value
  {{ '%Y-%m-%d' | strftime(0) }}          # => 1970-01-01
  {{ '%Y-%m-%d' | strftime(1441357287) }} # => 2015-09-04

  # complex examples
  vars:
    date1: '2022-11-15T03:23:13.686956868Z'
    date2: '2021-12-15T16:06:24.400087Z'
    date_short: '{{ date1|regex_replace("([^.]+)(\.\d{6})(\d*)(.+)", "\1\2\4") }}' #shorten microseconds
    iso8601format: '%Y-%m-%dT%H:%M:%S.%fZ'
    date_diff_isoed: '{{ (date1|to_datetime(isoformat) - date2|to_datetime(isoformat)).total_seconds() }}'

RETURN:
  _value:
    description: A formatted date/time string.
    type: str
