Home | History | Annotate | Download | only in library
      1 :mod:`datetime` --- Basic date and time types
      2 =============================================
      3 
      4 .. module:: datetime
      5    :synopsis: Basic date and time types.
      6 
      7 .. moduleauthor:: Tim Peters <tim (a] zope.com>
      8 .. sectionauthor:: Tim Peters <tim (a] zope.com>
      9 .. sectionauthor:: A.M. Kuchling <amk (a] amk.ca>
     10 
     11 **Source code:** :source:`Lib/datetime.py`
     12 
     13 --------------
     14 
     15 .. XXX what order should the types be discussed in?
     16 
     17 The :mod:`datetime` module supplies classes for manipulating dates and times in
     18 both simple and complex ways.  While date and time arithmetic is supported, the
     19 focus of the implementation is on efficient attribute extraction for output
     20 formatting and manipulation. For related functionality, see also the
     21 :mod:`time` and :mod:`calendar` modules.
     22 
     23 There are two kinds of date and time objects: "naive" and "aware".
     24 
     25 An aware object has sufficient knowledge of applicable algorithmic and
     26 political time adjustments, such as time zone and daylight saving time
     27 information, to locate itself relative to other aware objects.  An aware object
     28 is used to represent a specific moment in time that is not open to
     29 interpretation [#]_.
     30 
     31 A naive object does not contain enough information to unambiguously locate
     32 itself relative to other date/time objects.  Whether a naive object represents
     33 Coordinated Universal Time (UTC), local time, or time in some other timezone is
     34 purely up to the program, just like it is up to the program whether a
     35 particular number represents metres, miles, or mass.  Naive objects are easy to
     36 understand and to work with, at the cost of ignoring some aspects of reality.
     37 
     38 For applications requiring aware objects, :class:`.datetime` and :class:`.time`
     39 objects have an optional time zone information attribute, :attr:`!tzinfo`, that
     40 can be set to an instance of a subclass of the abstract :class:`tzinfo` class.
     41 These :class:`tzinfo` objects capture information about the offset from UTC
     42 time, the time zone name, and whether Daylight Saving Time is in effect.  Note
     43 that only one concrete :class:`tzinfo` class, the :class:`timezone` class, is
     44 supplied by the :mod:`datetime` module.  The :class:`timezone` class can
     45 represent simple timezones with fixed offset from UTC, such as UTC itself or
     46 North American EST and EDT timezones.  Supporting timezones at deeper levels of
     47 detail is up to the application.  The rules for time adjustment across the
     48 world are more political than rational, change frequently, and there is no
     49 standard suitable for every application aside from UTC.
     50 
     51 The :mod:`datetime` module exports the following constants:
     52 
     53 .. data:: MINYEAR
     54 
     55    The smallest year number allowed in a :class:`date` or :class:`.datetime` object.
     56    :const:`MINYEAR` is ``1``.
     57 
     58 
     59 .. data:: MAXYEAR
     60 
     61    The largest year number allowed in a :class:`date` or :class:`.datetime` object.
     62    :const:`MAXYEAR` is ``9999``.
     63 
     64 
     65 .. seealso::
     66 
     67    Module :mod:`calendar`
     68       General calendar related functions.
     69 
     70    Module :mod:`time`
     71       Time access and conversions.
     72 
     73 
     74 Available Types
     75 ---------------
     76 
     77 .. class:: date
     78    :noindex:
     79 
     80    An idealized naive date, assuming the current Gregorian calendar always was, and
     81    always will be, in effect. Attributes: :attr:`year`, :attr:`month`, and
     82    :attr:`day`.
     83 
     84 
     85 .. class:: time
     86    :noindex:
     87 
     88    An idealized time, independent of any particular day, assuming that every day
     89    has exactly 24\*60\*60 seconds (there is no notion of "leap seconds" here).
     90    Attributes: :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
     91    and :attr:`.tzinfo`.
     92 
     93 
     94 .. class:: datetime
     95    :noindex:
     96 
     97    A combination of a date and a time. Attributes: :attr:`year`, :attr:`month`,
     98    :attr:`day`, :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
     99    and :attr:`.tzinfo`.
    100 
    101 
    102 .. class:: timedelta
    103    :noindex:
    104 
    105    A duration expressing the difference between two :class:`date`, :class:`.time`,
    106    or :class:`.datetime` instances to microsecond resolution.
    107 
    108 
    109 .. class:: tzinfo
    110    :noindex:
    111 
    112    An abstract base class for time zone information objects.  These are used by the
    113    :class:`.datetime` and :class:`.time` classes to provide a customizable notion of
    114    time adjustment (for example, to account for time zone and/or daylight saving
    115    time).
    116 
    117 .. class:: timezone
    118    :noindex:
    119 
    120    A class that implements the :class:`tzinfo` abstract base class as a
    121    fixed offset from the UTC.
    122 
    123    .. versionadded:: 3.2
    124 
    125 
    126 Objects of these types are immutable.
    127 
    128 Objects of the :class:`date` type are always naive.
    129 
    130 An object of type :class:`.time` or :class:`.datetime` may be naive or aware.
    131 A :class:`.datetime` object *d* is aware if ``d.tzinfo`` is not ``None`` and
    132 ``d.tzinfo.utcoffset(d)`` does not return ``None``.  If ``d.tzinfo`` is
    133 ``None``, or if ``d.tzinfo`` is not ``None`` but ``d.tzinfo.utcoffset(d)``
    134 returns ``None``, *d* is naive.  A :class:`.time` object *t* is aware
    135 if ``t.tzinfo`` is not ``None`` and ``t.tzinfo.utcoffset(None)`` does not return
    136 ``None``.  Otherwise, *t* is naive.
    137 
    138 The distinction between naive and aware doesn't apply to :class:`timedelta`
    139 objects.
    140 
    141 Subclass relationships::
    142 
    143    object
    144        timedelta
    145        tzinfo
    146            timezone
    147        time
    148        date
    149            datetime
    150 
    151 
    152 .. _datetime-timedelta:
    153 
    154 :class:`timedelta` Objects
    155 --------------------------
    156 
    157 A :class:`timedelta` object represents a duration, the difference between two
    158 dates or times.
    159 
    160 .. class:: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
    161 
    162    All arguments are optional and default to ``0``.  Arguments may be integers
    163    or floats, and may be positive or negative.
    164 
    165    Only *days*, *seconds* and *microseconds* are stored internally.  Arguments are
    166    converted to those units:
    167 
    168    * A millisecond is converted to 1000 microseconds.
    169    * A minute is converted to 60 seconds.
    170    * An hour is converted to 3600 seconds.
    171    * A week is converted to 7 days.
    172 
    173    and days, seconds and microseconds are then normalized so that the
    174    representation is unique, with
    175 
    176    * ``0 <= microseconds < 1000000``
    177    * ``0 <= seconds < 3600*24`` (the number of seconds in one day)
    178    * ``-999999999 <= days <= 999999999``
    179 
    180    If any argument is a float and there are fractional microseconds,
    181    the fractional microseconds left over from all arguments are
    182    combined and their sum is rounded to the nearest microsecond using
    183    round-half-to-even tiebreaker.  If no argument is a float, the
    184    conversion and normalization processes are exact (no information is
    185    lost).
    186 
    187    If the normalized value of days lies outside the indicated range,
    188    :exc:`OverflowError` is raised.
    189 
    190    Note that normalization of negative values may be surprising at first. For
    191    example,
    192 
    193       >>> from datetime import timedelta
    194       >>> d = timedelta(microseconds=-1)
    195       >>> (d.days, d.seconds, d.microseconds)
    196       (-1, 86399, 999999)
    197 
    198 
    199 Class attributes are:
    200 
    201 .. attribute:: timedelta.min
    202 
    203    The most negative :class:`timedelta` object, ``timedelta(-999999999)``.
    204 
    205 
    206 .. attribute:: timedelta.max
    207 
    208    The most positive :class:`timedelta` object, ``timedelta(days=999999999,
    209    hours=23, minutes=59, seconds=59, microseconds=999999)``.
    210 
    211 
    212 .. attribute:: timedelta.resolution
    213 
    214    The smallest possible difference between non-equal :class:`timedelta` objects,
    215    ``timedelta(microseconds=1)``.
    216 
    217 Note that, because of normalization, ``timedelta.max`` > ``-timedelta.min``.
    218 ``-timedelta.max`` is not representable as a :class:`timedelta` object.
    219 
    220 Instance attributes (read-only):
    221 
    222 +------------------+--------------------------------------------+
    223 | Attribute        | Value                                      |
    224 +==================+============================================+
    225 | ``days``         | Between -999999999 and 999999999 inclusive |
    226 +------------------+--------------------------------------------+
    227 | ``seconds``      | Between 0 and 86399 inclusive              |
    228 +------------------+--------------------------------------------+
    229 | ``microseconds`` | Between 0 and 999999 inclusive             |
    230 +------------------+--------------------------------------------+
    231 
    232 Supported operations:
    233 
    234 .. XXX this table is too wide!
    235 
    236 +--------------------------------+-----------------------------------------------+
    237 | Operation                      | Result                                        |
    238 +================================+===============================================+
    239 | ``t1 = t2 + t3``               | Sum of *t2* and *t3*. Afterwards *t1*-*t2* == |
    240 |                                | *t3* and *t1*-*t3* == *t2* are true. (1)      |
    241 +--------------------------------+-----------------------------------------------+
    242 | ``t1 = t2 - t3``               | Difference of *t2* and *t3*. Afterwards *t1*  |
    243 |                                | == *t2* - *t3* and *t2* == *t1* + *t3* are    |
    244 |                                | true. (1)                                     |
    245 +--------------------------------+-----------------------------------------------+
    246 | ``t1 = t2 * i or t1 = i * t2`` | Delta multiplied by an integer.               |
    247 |                                | Afterwards *t1* // i == *t2* is true,         |
    248 |                                | provided ``i != 0``.                          |
    249 +--------------------------------+-----------------------------------------------+
    250 |                                | In general, *t1* \* i == *t1* \* (i-1) + *t1* |
    251 |                                | is true. (1)                                  |
    252 +--------------------------------+-----------------------------------------------+
    253 | ``t1 = t2 * f or t1 = f * t2`` | Delta multiplied by a float. The result is    |
    254 |                                | rounded to the nearest multiple of            |
    255 |                                | timedelta.resolution using round-half-to-even.|
    256 +--------------------------------+-----------------------------------------------+
    257 | ``f = t2 / t3``                | Division (3) of *t2* by *t3*.  Returns a      |
    258 |                                | :class:`float` object.                        |
    259 +--------------------------------+-----------------------------------------------+
    260 | ``t1 = t2 / f or t1 = t2 / i`` | Delta divided by a float or an int. The result|
    261 |                                | is rounded to the nearest multiple of         |
    262 |                                | timedelta.resolution using round-half-to-even.|
    263 +--------------------------------+-----------------------------------------------+
    264 | ``t1 = t2 // i`` or            | The floor is computed and the remainder (if   |
    265 | ``t1 = t2 // t3``              | any) is thrown away.  In the second case, an  |
    266 |                                | integer is returned. (3)                      |
    267 +--------------------------------+-----------------------------------------------+
    268 | ``t1 = t2 % t3``               | The remainder is computed as a                |
    269 |                                | :class:`timedelta` object. (3)                |
    270 +--------------------------------+-----------------------------------------------+
    271 | ``q, r = divmod(t1, t2)``      | Computes the quotient and the remainder:      |
    272 |                                | ``q = t1 // t2`` (3) and ``r = t1 % t2``.     |
    273 |                                | q is an integer and r is a :class:`timedelta` |
    274 |                                | object.                                       |
    275 +--------------------------------+-----------------------------------------------+
    276 | ``+t1``                        | Returns a :class:`timedelta` object with the  |
    277 |                                | same value. (2)                               |
    278 +--------------------------------+-----------------------------------------------+
    279 | ``-t1``                        | equivalent to :class:`timedelta`\             |
    280 |                                | (-*t1.days*, -*t1.seconds*,                   |
    281 |                                | -*t1.microseconds*), and to *t1*\* -1. (1)(4) |
    282 +--------------------------------+-----------------------------------------------+
    283 | ``abs(t)``                     | equivalent to +\ *t* when ``t.days >= 0``, and|
    284 |                                | to -*t* when ``t.days < 0``. (2)              |
    285 +--------------------------------+-----------------------------------------------+
    286 | ``str(t)``                     | Returns a string in the form                  |
    287 |                                | ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D  |
    288 |                                | is negative for negative ``t``. (5)           |
    289 +--------------------------------+-----------------------------------------------+
    290 | ``repr(t)``                    | Returns a string in the form                  |
    291 |                                | ``datetime.timedelta(D[, S[, U]])``, where D  |
    292 |                                | is negative for negative ``t``. (5)           |
    293 +--------------------------------+-----------------------------------------------+
    294 
    295 Notes:
    296 
    297 (1)
    298    This is exact, but may overflow.
    299 
    300 (2)
    301    This is exact, and cannot overflow.
    302 
    303 (3)
    304    Division by 0 raises :exc:`ZeroDivisionError`.
    305 
    306 (4)
    307    -*timedelta.max* is not representable as a :class:`timedelta` object.
    308 
    309 (5)
    310   String representations of :class:`timedelta` objects are normalized
    311   similarly to their internal representation.  This leads to somewhat
    312   unusual results for negative timedeltas.  For example:
    313 
    314   >>> timedelta(hours=-5)
    315   datetime.timedelta(-1, 68400)
    316   >>> print(_)
    317   -1 day, 19:00:00
    318 
    319 In addition to the operations listed above :class:`timedelta` objects support
    320 certain additions and subtractions with :class:`date` and :class:`.datetime`
    321 objects (see below).
    322 
    323 .. versionchanged:: 3.2
    324    Floor division and true division of a :class:`timedelta` object by another
    325    :class:`timedelta` object are now supported, as are remainder operations and
    326    the :func:`divmod` function.  True division and multiplication of a
    327    :class:`timedelta` object by a :class:`float` object are now supported.
    328 
    329 
    330 Comparisons of :class:`timedelta` objects are supported with the
    331 :class:`timedelta` object representing the smaller duration considered to be the
    332 smaller timedelta. In order to stop mixed-type comparisons from falling back to
    333 the default comparison by object address, when a :class:`timedelta` object is
    334 compared to an object of a different type, :exc:`TypeError` is raised unless the
    335 comparison is ``==`` or ``!=``.  The latter cases return :const:`False` or
    336 :const:`True`, respectively.
    337 
    338 :class:`timedelta` objects are :term:`hashable` (usable as dictionary keys), support
    339 efficient pickling, and in Boolean contexts, a :class:`timedelta` object is
    340 considered to be true if and only if it isn't equal to ``timedelta(0)``.
    341 
    342 Instance methods:
    343 
    344 .. method:: timedelta.total_seconds()
    345 
    346    Return the total number of seconds contained in the duration. Equivalent to
    347    ``td / timedelta(seconds=1)``.
    348 
    349    Note that for very large time intervals (greater than 270 years on
    350    most platforms) this method will lose microsecond accuracy.
    351 
    352    .. versionadded:: 3.2
    353 
    354 
    355 Example usage:
    356 
    357     >>> from datetime import timedelta
    358     >>> year = timedelta(days=365)
    359     >>> another_year = timedelta(weeks=40, days=84, hours=23,
    360     ...                          minutes=50, seconds=600)  # adds up to 365 days
    361     >>> year.total_seconds()
    362     31536000.0
    363     >>> year == another_year
    364     True
    365     >>> ten_years = 10 * year
    366     >>> ten_years, ten_years.days // 365
    367     (datetime.timedelta(3650), 10)
    368     >>> nine_years = ten_years - year
    369     >>> nine_years, nine_years.days // 365
    370     (datetime.timedelta(3285), 9)
    371     >>> three_years = nine_years // 3;
    372     >>> three_years, three_years.days // 365
    373     (datetime.timedelta(1095), 3)
    374     >>> abs(three_years - ten_years) == 2 * three_years + year
    375     True
    376 
    377 
    378 .. _datetime-date:
    379 
    380 :class:`date` Objects
    381 ---------------------
    382 
    383 A :class:`date` object represents a date (year, month and day) in an idealized
    384 calendar, the current Gregorian calendar indefinitely extended in both
    385 directions.  January 1 of year 1 is called day number 1, January 2 of year 1 is
    386 called day number 2, and so on.  This matches the definition of the "proleptic
    387 Gregorian" calendar in Dershowitz and Reingold's book Calendrical Calculations,
    388 where it's the base calendar for all computations.  See the book for algorithms
    389 for converting between proleptic Gregorian ordinals and many other calendar
    390 systems.
    391 
    392 
    393 .. class:: date(year, month, day)
    394 
    395    All arguments are required.  Arguments may be integers, in the following
    396    ranges:
    397 
    398    * ``MINYEAR <= year <= MAXYEAR``
    399    * ``1 <= month <= 12``
    400    * ``1 <= day <= number of days in the given month and year``
    401 
    402    If an argument outside those ranges is given, :exc:`ValueError` is raised.
    403 
    404 
    405 Other constructors, all class methods:
    406 
    407 .. classmethod:: date.today()
    408 
    409    Return the current local date.  This is equivalent to
    410    ``date.fromtimestamp(time.time())``.
    411 
    412 
    413 .. classmethod:: date.fromtimestamp(timestamp)
    414 
    415    Return the local date corresponding to the POSIX timestamp, such as is returned
    416    by :func:`time.time`.  This may raise :exc:`OverflowError`, if the timestamp is out
    417    of the range of values supported by the platform C :c:func:`localtime` function,
    418    and :exc:`OSError` on :c:func:`localtime` failure.
    419    It's common for this to be restricted to years from 1970 through 2038.  Note
    420    that on non-POSIX systems that include leap seconds in their notion of a
    421    timestamp, leap seconds are ignored by :meth:`fromtimestamp`.
    422 
    423    .. versionchanged:: 3.3
    424       Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
    425       is out of the range of values supported by the platform C
    426       :c:func:`localtime` function. Raise :exc:`OSError` instead of
    427       :exc:`ValueError` on :c:func:`localtime` failure.
    428 
    429 
    430 .. classmethod:: date.fromordinal(ordinal)
    431 
    432    Return the date corresponding to the proleptic Gregorian ordinal, where January
    433    1 of year 1 has ordinal 1.  :exc:`ValueError` is raised unless ``1 <= ordinal <=
    434    date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) ==
    435    d``.
    436 
    437 
    438 Class attributes:
    439 
    440 .. attribute:: date.min
    441 
    442    The earliest representable date, ``date(MINYEAR, 1, 1)``.
    443 
    444 
    445 .. attribute:: date.max
    446 
    447    The latest representable date, ``date(MAXYEAR, 12, 31)``.
    448 
    449 
    450 .. attribute:: date.resolution
    451 
    452    The smallest possible difference between non-equal date objects,
    453    ``timedelta(days=1)``.
    454 
    455 
    456 Instance attributes (read-only):
    457 
    458 .. attribute:: date.year
    459 
    460    Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
    461 
    462 
    463 .. attribute:: date.month
    464 
    465    Between 1 and 12 inclusive.
    466 
    467 
    468 .. attribute:: date.day
    469 
    470    Between 1 and the number of days in the given month of the given year.
    471 
    472 
    473 Supported operations:
    474 
    475 +-------------------------------+----------------------------------------------+
    476 | Operation                     | Result                                       |
    477 +===============================+==============================================+
    478 | ``date2 = date1 + timedelta`` | *date2* is ``timedelta.days`` days removed   |
    479 |                               | from *date1*.  (1)                           |
    480 +-------------------------------+----------------------------------------------+
    481 | ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 +         |
    482 |                               | timedelta == date1``. (2)                    |
    483 +-------------------------------+----------------------------------------------+
    484 | ``timedelta = date1 - date2`` | \(3)                                         |
    485 +-------------------------------+----------------------------------------------+
    486 | ``date1 < date2``             | *date1* is considered less than *date2* when |
    487 |                               | *date1* precedes *date2* in time. (4)        |
    488 +-------------------------------+----------------------------------------------+
    489 
    490 Notes:
    491 
    492 (1)
    493    *date2* is moved forward in time if ``timedelta.days > 0``, or backward if
    494    ``timedelta.days < 0``.  Afterward ``date2 - date1 == timedelta.days``.
    495    ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
    496    :exc:`OverflowError` is raised if ``date2.year`` would be smaller than
    497    :const:`MINYEAR` or larger than :const:`MAXYEAR`.
    498 
    499 (2)
    500    This isn't quite equivalent to date1 + (-timedelta), because -timedelta in
    501    isolation can overflow in cases where date1 - timedelta does not.
    502    ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
    503 
    504 (3)
    505    This is exact, and cannot overflow.  timedelta.seconds and
    506    timedelta.microseconds are 0, and date2 + timedelta == date1 after.
    507 
    508 (4)
    509    In other words, ``date1 < date2`` if and only if ``date1.toordinal() <
    510    date2.toordinal()``. In order to stop comparison from falling back to the
    511    default scheme of comparing object addresses, date comparison normally raises
    512    :exc:`TypeError` if the other comparand isn't also a :class:`date` object.
    513    However, ``NotImplemented`` is returned instead if the other comparand has a
    514    :meth:`timetuple` attribute.  This hook gives other kinds of date objects a
    515    chance at implementing mixed-type comparison. If not, when a :class:`date`
    516    object is compared to an object of a different type, :exc:`TypeError` is raised
    517    unless the comparison is ``==`` or ``!=``.  The latter cases return
    518    :const:`False` or :const:`True`, respectively.
    519 
    520 Dates can be used as dictionary keys. In Boolean contexts, all :class:`date`
    521 objects are considered to be true.
    522 
    523 Instance methods:
    524 
    525 .. method:: date.replace(year=self.year, month=self.month, day=self.day)
    526 
    527    Return a date with the same value, except for those parameters given new
    528    values by whichever keyword arguments are specified.  For example, if ``d ==
    529    date(2002, 12, 31)``, then ``d.replace(day=26) == date(2002, 12, 26)``.
    530 
    531 
    532 .. method:: date.timetuple()
    533 
    534    Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
    535    The hours, minutes and seconds are 0, and the DST flag is -1. ``d.timetuple()``
    536    is equivalent to ``time.struct_time((d.year, d.month, d.day, 0, 0, 0,
    537    d.weekday(), yday, -1))``, where ``yday = d.toordinal() - date(d.year, 1,
    538    1).toordinal() + 1`` is the day number within the current year starting with
    539    ``1`` for January 1st.
    540 
    541 
    542 .. method:: date.toordinal()
    543 
    544    Return the proleptic Gregorian ordinal of the date, where January 1 of year 1
    545    has ordinal 1.  For any :class:`date` object *d*,
    546    ``date.fromordinal(d.toordinal()) == d``.
    547 
    548 
    549 .. method:: date.weekday()
    550 
    551    Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
    552    For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also
    553    :meth:`isoweekday`.
    554 
    555 
    556 .. method:: date.isoweekday()
    557 
    558    Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
    559    For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also
    560    :meth:`weekday`, :meth:`isocalendar`.
    561 
    562 
    563 .. method:: date.isocalendar()
    564 
    565    Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
    566 
    567    The ISO calendar is a widely used variant of the Gregorian calendar. See
    568    https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm for a good
    569    explanation.
    570 
    571    The ISO year consists of 52 or 53 full weeks, and where a week starts on a
    572    Monday and ends on a Sunday.  The first week of an ISO year is the first
    573    (Gregorian) calendar week of a year containing a Thursday. This is called week
    574    number 1, and the ISO year of that Thursday is the same as its Gregorian year.
    575 
    576    For example, 2004 begins on a Thursday, so the first week of ISO year 2004
    577    begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004, so that
    578    ``date(2003, 12, 29).isocalendar() == (2004, 1, 1)`` and ``date(2004, 1,
    579    4).isocalendar() == (2004, 1, 7)``.
    580 
    581 
    582 .. method:: date.isoformat()
    583 
    584    Return a string representing the date in ISO 8601 format, 'YYYY-MM-DD'.  For
    585    example, ``date(2002, 12, 4).isoformat() == '2002-12-04'``.
    586 
    587 
    588 .. method:: date.__str__()
    589 
    590    For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``.
    591 
    592 
    593 .. method:: date.ctime()
    594 
    595    Return a string representing the date, for example ``date(2002, 12,
    596    4).ctime() == 'Wed Dec 4 00:00:00 2002'``. ``d.ctime()`` is equivalent to
    597    ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the native C
    598    :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
    599    :meth:`date.ctime` does not invoke) conforms to the C standard.
    600 
    601 
    602 .. method:: date.strftime(format)
    603 
    604    Return a string representing the date, controlled by an explicit format string.
    605    Format codes referring to hours, minutes or seconds will see 0 values. For a
    606    complete list of formatting directives, see
    607    :ref:`strftime-strptime-behavior`.
    608 
    609 
    610 .. method:: date.__format__(format)
    611 
    612    Same as :meth:`.date.strftime`. This makes it possible to specify a format
    613    string for a :class:`.date` object in :ref:`formatted string
    614    literals <f-strings>` and when using :meth:`str.format`. For a
    615    complete list of formatting directives, see
    616    :ref:`strftime-strptime-behavior`.
    617 
    618 
    619 Example of counting days to an event::
    620 
    621     >>> import time
    622     >>> from datetime import date
    623     >>> today = date.today()
    624     >>> today
    625     datetime.date(2007, 12, 5)
    626     >>> today == date.fromtimestamp(time.time())
    627     True
    628     >>> my_birthday = date(today.year, 6, 24)
    629     >>> if my_birthday < today:
    630     ...     my_birthday = my_birthday.replace(year=today.year + 1)
    631     >>> my_birthday
    632     datetime.date(2008, 6, 24)
    633     >>> time_to_birthday = abs(my_birthday - today)
    634     >>> time_to_birthday.days
    635     202
    636 
    637 Example of working with :class:`date`:
    638 
    639 .. doctest::
    640 
    641     >>> from datetime import date
    642     >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
    643     >>> d
    644     datetime.date(2002, 3, 11)
    645     >>> t = d.timetuple()
    646     >>> for i in t:     # doctest: +SKIP
    647     ...     print(i)
    648     2002                # year
    649     3                   # month
    650     11                  # day
    651     0
    652     0
    653     0
    654     0                   # weekday (0 = Monday)
    655     70                  # 70th day in the year
    656     -1
    657     >>> ic = d.isocalendar()
    658     >>> for i in ic:    # doctest: +SKIP
    659     ...     print(i)
    660     2002                # ISO year
    661     11                  # ISO week number
    662     1                   # ISO day number ( 1 = Monday )
    663     >>> d.isoformat()
    664     '2002-03-11'
    665     >>> d.strftime("%d/%m/%y")
    666     '11/03/02'
    667     >>> d.strftime("%A %d. %B %Y")
    668     'Monday 11. March 2002'
    669     >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
    670     'The day is 11, the month is March.'
    671 
    672 
    673 .. _datetime-datetime:
    674 
    675 :class:`.datetime` Objects
    676 --------------------------
    677 
    678 A :class:`.datetime` object is a single object containing all the information
    679 from a :class:`date` object and a :class:`.time` object.  Like a :class:`date`
    680 object, :class:`.datetime` assumes the current Gregorian calendar extended in
    681 both directions; like a time object, :class:`.datetime` assumes there are exactly
    682 3600\*24 seconds in every day.
    683 
    684 Constructor:
    685 
    686 .. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
    687 
    688    The year, month and day arguments are required.  *tzinfo* may be ``None``, or an
    689    instance of a :class:`tzinfo` subclass.  The remaining arguments may be integers,
    690    in the following ranges:
    691 
    692    * ``MINYEAR <= year <= MAXYEAR``,
    693    * ``1 <= month <= 12``,
    694    * ``1 <= day <= number of days in the given month and year``,
    695    * ``0 <= hour < 24``,
    696    * ``0 <= minute < 60``,
    697    * ``0 <= second < 60``,
    698    * ``0 <= microsecond < 1000000``,
    699    * ``fold in [0, 1]``.
    700 
    701    If an argument outside those ranges is given, :exc:`ValueError` is raised.
    702 
    703    .. versionadded:: 3.6
    704       Added the ``fold`` argument.
    705 
    706 Other constructors, all class methods:
    707 
    708 .. classmethod:: datetime.today()
    709 
    710    Return the current local datetime, with :attr:`.tzinfo` ``None``. This is
    711    equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`,
    712    :meth:`fromtimestamp`.
    713 
    714 
    715 .. classmethod:: datetime.now(tz=None)
    716 
    717    Return the current local date and time.  If optional argument *tz* is ``None``
    718    or not specified, this is like :meth:`today`, but, if possible, supplies more
    719    precision than can be gotten from going through a :func:`time.time` timestamp
    720    (for example, this may be possible on platforms supplying the C
    721    :c:func:`gettimeofday` function).
    722 
    723    If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
    724    current date and time are converted to *tz*s time zone.  In this case the
    725    result is equivalent to ``tz.fromutc(datetime.utcnow().replace(tzinfo=tz))``.
    726    See also :meth:`today`, :meth:`utcnow`.
    727 
    728 
    729 .. classmethod:: datetime.utcnow()
    730 
    731    Return the current UTC date and time, with :attr:`.tzinfo` ``None``. This is like
    732    :meth:`now`, but returns the current UTC date and time, as a naive
    733    :class:`.datetime` object.  An aware current UTC datetime can be obtained by
    734    calling ``datetime.now(timezone.utc)``.  See also :meth:`now`.
    735 
    736 .. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
    737 
    738    Return the local date and time corresponding to the POSIX timestamp, such as is
    739    returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
    740    specified, the timestamp is converted to the platform's local date and time, and
    741    the returned :class:`.datetime` object is naive.
    742 
    743    If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
    744    timestamp is converted to *tz*s time zone.  In this case the result is
    745    equivalent to
    746    ``tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))``.
    747 
    748    :meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is out of
    749    the range of values supported by the platform C :c:func:`localtime` or
    750    :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or
    751    :c:func:`gmtime` failure.
    752    It's common for this to be restricted to years in
    753    1970 through 2038. Note that on non-POSIX systems that include leap seconds in
    754    their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`,
    755    and then it's possible to have two timestamps differing by a second that yield
    756    identical :class:`.datetime` objects. See also :meth:`utcfromtimestamp`.
    757 
    758    .. versionchanged:: 3.3
    759       Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
    760       is out of the range of values supported by the platform C
    761       :c:func:`localtime` or :c:func:`gmtime` functions. Raise :exc:`OSError`
    762       instead of :exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime`
    763       failure.
    764 
    765    .. versionchanged:: 3.6
    766       :meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1.
    767 
    768 .. classmethod:: datetime.utcfromtimestamp(timestamp)
    769 
    770    Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with
    771    :attr:`.tzinfo` ``None``. This may raise :exc:`OverflowError`, if the timestamp is
    772    out of the range of values supported by the platform C :c:func:`gmtime` function,
    773    and :exc:`OSError` on :c:func:`gmtime` failure.
    774    It's common for this to be restricted to years in 1970 through 2038.
    775 
    776    To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`::
    777 
    778      datetime.fromtimestamp(timestamp, timezone.utc)
    779 
    780    On the POSIX compliant platforms, it is equivalent to the following
    781    expression::
    782 
    783      datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
    784 
    785    except the latter formula always supports the full years range: between
    786    :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
    787 
    788    .. versionchanged:: 3.3
    789       Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
    790       is out of the range of values supported by the platform C
    791       :c:func:`gmtime` function. Raise :exc:`OSError` instead of
    792       :exc:`ValueError` on :c:func:`gmtime` failure.
    793 
    794 
    795 .. classmethod:: datetime.fromordinal(ordinal)
    796 
    797    Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal,
    798    where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
    799    <= ordinal <= datetime.max.toordinal()``.  The hour, minute, second and
    800    microsecond of the result are all 0, and :attr:`.tzinfo` is ``None``.
    801 
    802 
    803 .. classmethod:: datetime.combine(date, time, tzinfo=self.tzinfo)
    804 
    805    Return a new :class:`.datetime` object whose date components are equal to the
    806    given :class:`date` object's, and whose time components
    807    are equal to the given :class:`.time` object's.  If the *tzinfo*
    808    argument is provided, its value is used to set the :attr:`.tzinfo` attribute
    809    of the result, otherwise the :attr:`~.time.tzinfo` attribute of the *time* argument
    810    is used.
    811 
    812    For any :class:`.datetime` object *d*,
    813    ``d == datetime.combine(d.date(), d.time(), d.tzinfo)``.  If date is a
    814    :class:`.datetime` object, its time components and :attr:`.tzinfo` attributes
    815    are ignored.
    816 
    817    .. versionchanged:: 3.6
    818       Added the *tzinfo* argument.
    819 
    820 
    821 .. classmethod:: datetime.strptime(date_string, format)
    822 
    823    Return a :class:`.datetime` corresponding to *date_string*, parsed according to
    824    *format*.  This is equivalent to ``datetime(*(time.strptime(date_string,
    825    format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
    826    can't be parsed by :func:`time.strptime` or if it returns a value which isn't a
    827    time tuple. For a complete list of formatting directives, see
    828    :ref:`strftime-strptime-behavior`.
    829 
    830 
    831 
    832 Class attributes:
    833 
    834 .. attribute:: datetime.min
    835 
    836    The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1,
    837    tzinfo=None)``.
    838 
    839 
    840 .. attribute:: datetime.max
    841 
    842    The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
    843    59, 999999, tzinfo=None)``.
    844 
    845 
    846 .. attribute:: datetime.resolution
    847 
    848    The smallest possible difference between non-equal :class:`.datetime` objects,
    849    ``timedelta(microseconds=1)``.
    850 
    851 
    852 Instance attributes (read-only):
    853 
    854 .. attribute:: datetime.year
    855 
    856    Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
    857 
    858 
    859 .. attribute:: datetime.month
    860 
    861    Between 1 and 12 inclusive.
    862 
    863 
    864 .. attribute:: datetime.day
    865 
    866    Between 1 and the number of days in the given month of the given year.
    867 
    868 
    869 .. attribute:: datetime.hour
    870 
    871    In ``range(24)``.
    872 
    873 
    874 .. attribute:: datetime.minute
    875 
    876    In ``range(60)``.
    877 
    878 
    879 .. attribute:: datetime.second
    880 
    881    In ``range(60)``.
    882 
    883 
    884 .. attribute:: datetime.microsecond
    885 
    886    In ``range(1000000)``.
    887 
    888 
    889 .. attribute:: datetime.tzinfo
    890 
    891    The object passed as the *tzinfo* argument to the :class:`.datetime` constructor,
    892    or ``None`` if none was passed.
    893 
    894 
    895 .. attribute:: datetime.fold
    896 
    897    In ``[0, 1]``.  Used to disambiguate wall times during a repeated interval.  (A
    898    repeated interval occurs when clocks are rolled back at the end of daylight saving
    899    time or when the UTC offset for the current zone is decreased for political reasons.)
    900    The value 0 (1) represents the earlier (later) of the two moments with the same wall
    901    time representation.
    902 
    903    .. versionadded:: 3.6
    904 
    905 Supported operations:
    906 
    907 +---------------------------------------+--------------------------------+
    908 | Operation                             | Result                         |
    909 +=======================================+================================+
    910 | ``datetime2 = datetime1 + timedelta`` | \(1)                           |
    911 +---------------------------------------+--------------------------------+
    912 | ``datetime2 = datetime1 - timedelta`` | \(2)                           |
    913 +---------------------------------------+--------------------------------+
    914 | ``timedelta = datetime1 - datetime2`` | \(3)                           |
    915 +---------------------------------------+--------------------------------+
    916 | ``datetime1 < datetime2``             | Compares :class:`.datetime` to |
    917 |                                       | :class:`.datetime`. (4)        |
    918 +---------------------------------------+--------------------------------+
    919 
    920 (1)
    921    datetime2 is a duration of timedelta removed from datetime1, moving forward in
    922    time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0.  The
    923    result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and
    924    datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
    925    datetime2.year would be smaller than :const:`MINYEAR` or larger than
    926    :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
    927    input is an aware object.
    928 
    929 (2)
    930    Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
    931    addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input
    932    datetime, and no time zone adjustments are done even if the input is aware.
    933    This isn't quite equivalent to datetime1 + (-timedelta), because -timedelta
    934    in isolation can overflow in cases where datetime1 - timedelta does not.
    935 
    936 (3)
    937    Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if
    938    both operands are naive, or if both are aware.  If one is aware and the other is
    939    naive, :exc:`TypeError` is raised.
    940 
    941    If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute,
    942    the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta`
    943    object *t* such that ``datetime2 + t == datetime1``.  No time zone adjustments
    944    are done in this case.
    945 
    946    If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
    947    as if *a* and *b* were first converted to naive UTC datetimes first.  The
    948    result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
    949    - b.utcoffset())`` except that the implementation never overflows.
    950 
    951 (4)
    952    *datetime1* is considered less than *datetime2* when *datetime1* precedes
    953    *datetime2* in time.
    954 
    955    If one comparand is naive and the other is aware, :exc:`TypeError`
    956    is raised if an order comparison is attempted.  For equality
    957    comparisons, naive instances are never equal to aware instances.
    958 
    959    If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
    960    common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
    961    compared.  If both comparands are aware and have different :attr:`~.datetime.tzinfo`
    962    attributes, the comparands are first adjusted by subtracting their UTC
    963    offsets (obtained from ``self.utcoffset()``).
    964 
    965    .. versionchanged:: 3.3
    966       Equality comparisons between naive and aware :class:`.datetime`
    967       instances don't raise :exc:`TypeError`.
    968 
    969    .. note::
    970 
    971       In order to stop comparison from falling back to the default scheme of comparing
    972       object addresses, datetime comparison normally raises :exc:`TypeError` if the
    973       other comparand isn't also a :class:`.datetime` object.  However,
    974       ``NotImplemented`` is returned instead if the other comparand has a
    975       :meth:`timetuple` attribute.  This hook gives other kinds of date objects a
    976       chance at implementing mixed-type comparison.  If not, when a :class:`.datetime`
    977       object is compared to an object of a different type, :exc:`TypeError` is raised
    978       unless the comparison is ``==`` or ``!=``.  The latter cases return
    979       :const:`False` or :const:`True`, respectively.
    980 
    981 :class:`.datetime` objects can be used as dictionary keys. In Boolean contexts,
    982 all :class:`.datetime` objects are considered to be true.
    983 
    984 Instance methods:
    985 
    986 .. method:: datetime.date()
    987 
    988    Return :class:`date` object with same year, month and day.
    989 
    990 
    991 .. method:: datetime.time()
    992 
    993    Return :class:`.time` object with same hour, minute, second, microsecond and fold.
    994    :attr:`.tzinfo` is ``None``.  See also method :meth:`timetz`.
    995 
    996    .. versionchanged:: 3.6
    997       The fold value is copied to the returned :class:`.time` object.
    998 
    999 
   1000 .. method:: datetime.timetz()
   1001 
   1002    Return :class:`.time` object with same hour, minute, second, microsecond, fold, and
   1003    tzinfo attributes.  See also method :meth:`time`.
   1004 
   1005    .. versionchanged:: 3.6
   1006       The fold value is copied to the returned :class:`.time` object.
   1007 
   1008 
   1009 .. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \
   1010    hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \
   1011    tzinfo=self.tzinfo, * fold=0)
   1012 
   1013    Return a datetime with the same attributes, except for those attributes given
   1014    new values by whichever keyword arguments are specified.  Note that
   1015    ``tzinfo=None`` can be specified to create a naive datetime from an aware
   1016    datetime with no conversion of date and time data.
   1017 
   1018    .. versionadded:: 3.6
   1019       Added the ``fold`` argument.
   1020 
   1021 
   1022 .. method:: datetime.astimezone(tz=None)
   1023 
   1024    Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*,
   1025    adjusting the date and time data so the result is the same UTC time as
   1026    *self*, but in *tz*'s local time.
   1027 
   1028    If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its
   1029    :meth:`utcoffset` and :meth:`dst` methods must not return ``None``.  If *self*
   1030    is naive (``self.tzinfo is None``), it is presumed to represent time in the
   1031    system timezone.
   1032 
   1033    If called without arguments (or with ``tz=None``) the system local
   1034    timezone is assumed for the target timezone.  The ``.tzinfo`` attribute of the converted
   1035    datetime instance will be set to an instance of :class:`timezone`
   1036    with the zone name and offset obtained from the OS.
   1037 
   1038    If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*:  no
   1039    adjustment of date or time data is performed. Else the result is local
   1040    time in the timezone *tz*, representing the same UTC time as *self*:  after
   1041    ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have
   1042    the same date and time data as ``dt - dt.utcoffset()``.
   1043 
   1044    If you merely want to attach a time zone object *tz* to a datetime *dt* without
   1045    adjustment of date and time data, use ``dt.replace(tzinfo=tz)``.  If you
   1046    merely want to remove the time zone object from an aware datetime *dt* without
   1047    conversion of date and time data, use ``dt.replace(tzinfo=None)``.
   1048 
   1049    Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
   1050    :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
   1051    Ignoring error cases, :meth:`astimezone` acts like::
   1052 
   1053       def astimezone(self, tz):
   1054           if self.tzinfo is tz:
   1055               return self
   1056           # Convert self to UTC, and attach the new time zone object.
   1057           utc = (self - self.utcoffset()).replace(tzinfo=tz)
   1058           # Convert from UTC to tz's local time.
   1059           return tz.fromutc(utc)
   1060 
   1061    .. versionchanged:: 3.3
   1062       *tz* now can be omitted.
   1063 
   1064    .. versionchanged:: 3.6
   1065       The :meth:`astimezone` method can now be called on naive instances that
   1066       are presumed to represent system local time.
   1067 
   1068 
   1069 .. method:: datetime.utcoffset()
   1070 
   1071    If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
   1072    ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
   1073    return ``None``, or a :class:`timedelta` object representing a whole number of
   1074    minutes with magnitude less than one day.
   1075 
   1076 
   1077 .. method:: datetime.dst()
   1078 
   1079    If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
   1080    ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
   1081    ``None``, or a :class:`timedelta` object representing a whole number of minutes
   1082    with magnitude less than one day.
   1083 
   1084 
   1085 .. method:: datetime.tzname()
   1086 
   1087    If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
   1088    ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
   1089    ``None`` or a string object,
   1090 
   1091 
   1092 .. method:: datetime.timetuple()
   1093 
   1094    Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
   1095    ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day,
   1096    d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday =
   1097    d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within
   1098    the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag
   1099    of the result is set according to the :meth:`dst` method: :attr:`.tzinfo` is
   1100    ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``;
   1101    else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``;
   1102    else :attr:`tm_isdst` is set to ``0``.
   1103 
   1104 
   1105 .. method:: datetime.utctimetuple()
   1106 
   1107    If :class:`.datetime` instance *d* is naive, this is the same as
   1108    ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
   1109    ``d.dst()`` returns.  DST is never in effect for a UTC time.
   1110 
   1111    If *d* is aware, *d* is normalized to UTC time, by subtracting
   1112    ``d.utcoffset()``, and a :class:`time.struct_time` for the
   1113    normalized time is returned.  :attr:`tm_isdst` is forced to 0. Note
   1114    that an :exc:`OverflowError` may be raised if *d*.year was
   1115    ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
   1116    boundary.
   1117 
   1118 
   1119 .. method:: datetime.toordinal()
   1120 
   1121    Return the proleptic Gregorian ordinal of the date.  The same as
   1122    ``self.date().toordinal()``.
   1123 
   1124 .. method:: datetime.timestamp()
   1125 
   1126    Return POSIX timestamp corresponding to the :class:`.datetime`
   1127    instance.  The return value is a :class:`float` similar to that
   1128    returned by :func:`time.time`.
   1129 
   1130    Naive :class:`.datetime` instances are assumed to represent local
   1131    time and this method relies on the platform C :c:func:`mktime`
   1132    function to perform the conversion.  Since :class:`.datetime`
   1133    supports wider range of values than :c:func:`mktime` on many
   1134    platforms, this method may raise :exc:`OverflowError` for times far
   1135    in the past or far in the future.
   1136 
   1137    For aware :class:`.datetime` instances, the return value is computed
   1138    as::
   1139 
   1140       (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
   1141 
   1142    .. versionadded:: 3.3
   1143 
   1144    .. versionchanged:: 3.6
   1145       The :meth:`timestamp` method uses the :attr:`.fold` attribute to
   1146       disambiguate the times during a repeated interval.
   1147 
   1148    .. note::
   1149 
   1150       There is no method to obtain the POSIX timestamp directly from a
   1151       naive :class:`.datetime` instance representing UTC time.  If your
   1152       application uses this convention and your system timezone is not
   1153       set to UTC, you can obtain the POSIX timestamp by supplying
   1154       ``tzinfo=timezone.utc``::
   1155 
   1156          timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
   1157 
   1158       or by calculating the timestamp directly::
   1159 
   1160          timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
   1161 
   1162 .. method:: datetime.weekday()
   1163 
   1164    Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
   1165    The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
   1166 
   1167 
   1168 .. method:: datetime.isoweekday()
   1169 
   1170    Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
   1171    The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
   1172    :meth:`isocalendar`.
   1173 
   1174 
   1175 .. method:: datetime.isocalendar()
   1176 
   1177    Return a 3-tuple, (ISO year, ISO week number, ISO weekday).  The same as
   1178    ``self.date().isocalendar()``.
   1179 
   1180 
   1181 .. method:: datetime.isoformat(sep='T', timespec='auto')
   1182 
   1183    Return a string representing the date and time in ISO 8601 format,
   1184    YYYY-MM-DDTHH:MM:SS.mmmmmm or, if :attr:`microsecond` is 0,
   1185    YYYY-MM-DDTHH:MM:SS
   1186 
   1187    If :meth:`utcoffset` does not return ``None``, a 6-character string is
   1188    appended, giving the UTC offset in (signed) hours and minutes:
   1189    YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM or, if :attr:`microsecond` is 0
   1190    YYYY-MM-DDTHH:MM:SS+HH:MM
   1191 
   1192    The optional argument *sep* (default ``'T'``) is a one-character separator,
   1193    placed between the date and time portions of the result.  For example,
   1194 
   1195       >>> from datetime import tzinfo, timedelta, datetime
   1196       >>> class TZ(tzinfo):
   1197       ...     def utcoffset(self, dt): return timedelta(minutes=-399)
   1198       ...
   1199       >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
   1200       '2002-12-25 00:00:00-06:39'
   1201 
   1202    The optional argument *timespec* specifies the number of additional
   1203    components of the time to include (the default is ``'auto'``).
   1204    It can be one of the following:
   1205 
   1206    - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
   1207      same as ``'microseconds'`` otherwise.
   1208    - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
   1209    - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
   1210    - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
   1211      in HH:MM:SS format.
   1212    - ``'milliseconds'``: Include full time, but truncate fractional second
   1213      part to milliseconds. HH:MM:SS.sss format.
   1214    - ``'microseconds'``: Include full time in HH:MM:SS.mmmmmm format.
   1215 
   1216    .. note::
   1217 
   1218       Excluded time components are truncated, not rounded.
   1219 
   1220    :exc:`ValueError` will be raised on an invalid *timespec* argument.
   1221 
   1222 
   1223       >>> from datetime import datetime
   1224       >>> datetime.now().isoformat(timespec='minutes')
   1225       '2002-12-25T00:00'
   1226       >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
   1227       >>> dt.isoformat(timespec='microseconds')
   1228       '2015-01-01T12:30:59.000000'
   1229 
   1230    .. versionadded:: 3.6
   1231       Added the *timespec* argument.
   1232 
   1233 
   1234 .. method:: datetime.__str__()
   1235 
   1236    For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to
   1237    ``d.isoformat(' ')``.
   1238 
   1239 
   1240 .. method:: datetime.ctime()
   1241 
   1242    Return a string representing the date and time, for example ``datetime(2002, 12,
   1243    4, 20, 30, 40).ctime() == 'Wed Dec  4 20:30:40 2002'``. ``d.ctime()`` is
   1244    equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the
   1245    native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
   1246    :meth:`datetime.ctime` does not invoke) conforms to the C standard.
   1247 
   1248 
   1249 .. method:: datetime.strftime(format)
   1250 
   1251    Return a string representing the date and time, controlled by an explicit format
   1252    string.  For a complete list of formatting directives, see
   1253    :ref:`strftime-strptime-behavior`.
   1254 
   1255 
   1256 .. method:: datetime.__format__(format)
   1257 
   1258    Same as :meth:`.datetime.strftime`.  This makes it possible to specify a format
   1259    string for a :class:`.datetime` object in :ref:`formatted string
   1260    literals <f-strings>` and when using :meth:`str.format`.  For a
   1261    complete list of formatting directives, see
   1262    :ref:`strftime-strptime-behavior`.
   1263 
   1264 
   1265 Examples of working with datetime objects:
   1266 
   1267 .. doctest::
   1268 
   1269     >>> from datetime import datetime, date, time
   1270     >>> # Using datetime.combine()
   1271     >>> d = date(2005, 7, 14)
   1272     >>> t = time(12, 30)
   1273     >>> datetime.combine(d, t)
   1274     datetime.datetime(2005, 7, 14, 12, 30)
   1275     >>> # Using datetime.now() or datetime.utcnow()
   1276     >>> datetime.now()   # doctest: +SKIP
   1277     datetime.datetime(2007, 12, 6, 16, 29, 43, 79043)   # GMT +1
   1278     >>> datetime.utcnow()   # doctest: +SKIP
   1279     datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
   1280     >>> # Using datetime.strptime()
   1281     >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
   1282     >>> dt
   1283     datetime.datetime(2006, 11, 21, 16, 30)
   1284     >>> # Using datetime.timetuple() to get tuple of all attributes
   1285     >>> tt = dt.timetuple()
   1286     >>> for it in tt:   # doctest: +SKIP
   1287     ...     print(it)
   1288     ...
   1289     2006    # year
   1290     11      # month
   1291     21      # day
   1292     16      # hour
   1293     30      # minute
   1294     0       # second
   1295     1       # weekday (0 = Monday)
   1296     325     # number of days since 1st January
   1297     -1      # dst - method tzinfo.dst() returned None
   1298     >>> # Date in ISO format
   1299     >>> ic = dt.isocalendar()
   1300     >>> for it in ic:   # doctest: +SKIP
   1301     ...     print(it)
   1302     ...
   1303     2006    # ISO year
   1304     47      # ISO week
   1305     2       # ISO weekday
   1306     >>> # Formatting datetime
   1307     >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
   1308     'Tuesday, 21. November 2006 04:30PM'
   1309     >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
   1310     'The day is 21, the month is November, the time is 04:30PM.'
   1311 
   1312 Using datetime with tzinfo:
   1313 
   1314     >>> from datetime import timedelta, datetime, tzinfo
   1315     >>> class GMT1(tzinfo):
   1316     ...     def utcoffset(self, dt):
   1317     ...         return timedelta(hours=1) + self.dst(dt)
   1318     ...     def dst(self, dt):
   1319     ...         # DST starts last Sunday in March
   1320     ...         d = datetime(dt.year, 4, 1)   # ends last Sunday in October
   1321     ...         self.dston = d - timedelta(days=d.weekday() + 1)
   1322     ...         d = datetime(dt.year, 11, 1)
   1323     ...         self.dstoff = d - timedelta(days=d.weekday() + 1)
   1324     ...         if self.dston <=  dt.replace(tzinfo=None) < self.dstoff:
   1325     ...             return timedelta(hours=1)
   1326     ...         else:
   1327     ...             return timedelta(0)
   1328     ...     def tzname(self,dt):
   1329     ...          return "GMT +1"
   1330     ...
   1331     >>> class GMT2(tzinfo):
   1332     ...     def utcoffset(self, dt):
   1333     ...         return timedelta(hours=2) + self.dst(dt)
   1334     ...     def dst(self, dt):
   1335     ...         d = datetime(dt.year, 4, 1)
   1336     ...         self.dston = d - timedelta(days=d.weekday() + 1)
   1337     ...         d = datetime(dt.year, 11, 1)
   1338     ...         self.dstoff = d - timedelta(days=d.weekday() + 1)
   1339     ...         if self.dston <=  dt.replace(tzinfo=None) < self.dstoff:
   1340     ...             return timedelta(hours=1)
   1341     ...         else:
   1342     ...             return timedelta(0)
   1343     ...     def tzname(self,dt):
   1344     ...         return "GMT +2"
   1345     ...
   1346     >>> gmt1 = GMT1()
   1347     >>> # Daylight Saving Time
   1348     >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
   1349     >>> dt1.dst()
   1350     datetime.timedelta(0)
   1351     >>> dt1.utcoffset()
   1352     datetime.timedelta(0, 3600)
   1353     >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
   1354     >>> dt2.dst()
   1355     datetime.timedelta(0, 3600)
   1356     >>> dt2.utcoffset()
   1357     datetime.timedelta(0, 7200)
   1358     >>> # Convert datetime to another time zone
   1359     >>> dt3 = dt2.astimezone(GMT2())
   1360     >>> dt3     # doctest: +ELLIPSIS
   1361     datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
   1362     >>> dt2     # doctest: +ELLIPSIS
   1363     datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
   1364     >>> dt2.utctimetuple() == dt3.utctimetuple()
   1365     True
   1366 
   1367 
   1368 
   1369 .. _datetime-time:
   1370 
   1371 :class:`.time` Objects
   1372 ----------------------
   1373 
   1374 A time object represents a (local) time of day, independent of any particular
   1375 day, and subject to adjustment via a :class:`tzinfo` object.
   1376 
   1377 .. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
   1378 
   1379    All arguments are optional.  *tzinfo* may be ``None``, or an instance of a
   1380    :class:`tzinfo` subclass.  The remaining arguments may be integers, in the
   1381    following ranges:
   1382 
   1383    * ``0 <= hour < 24``,
   1384    * ``0 <= minute < 60``,
   1385    * ``0 <= second < 60``,
   1386    * ``0 <= microsecond < 1000000``,
   1387    * ``fold in [0, 1]``.
   1388 
   1389    If an argument outside those ranges is given, :exc:`ValueError` is raised.  All
   1390    default to ``0`` except *tzinfo*, which defaults to :const:`None`.
   1391 
   1392 Class attributes:
   1393 
   1394 
   1395 .. attribute:: time.min
   1396 
   1397    The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``.
   1398 
   1399 
   1400 .. attribute:: time.max
   1401 
   1402    The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``.
   1403 
   1404 
   1405 .. attribute:: time.resolution
   1406 
   1407    The smallest possible difference between non-equal :class:`.time` objects,
   1408    ``timedelta(microseconds=1)``, although note that arithmetic on
   1409    :class:`.time` objects is not supported.
   1410 
   1411 
   1412 Instance attributes (read-only):
   1413 
   1414 .. attribute:: time.hour
   1415 
   1416    In ``range(24)``.
   1417 
   1418 
   1419 .. attribute:: time.minute
   1420 
   1421    In ``range(60)``.
   1422 
   1423 
   1424 .. attribute:: time.second
   1425 
   1426    In ``range(60)``.
   1427 
   1428 
   1429 .. attribute:: time.microsecond
   1430 
   1431    In ``range(1000000)``.
   1432 
   1433 
   1434 .. attribute:: time.tzinfo
   1435 
   1436    The object passed as the tzinfo argument to the :class:`.time` constructor, or
   1437    ``None`` if none was passed.
   1438 
   1439 
   1440 .. attribute:: time.fold
   1441 
   1442    In ``[0, 1]``.  Used to disambiguate wall times during a repeated interval.  (A
   1443    repeated interval occurs when clocks are rolled back at the end of daylight saving
   1444    time or when the UTC offset for the current zone is decreased for political reasons.)
   1445    The value 0 (1) represents the earlier (later) of the two moments with the same wall
   1446    time representation.
   1447 
   1448    .. versionadded:: 3.6
   1449 
   1450 
   1451 Supported operations:
   1452 
   1453 * comparison of :class:`.time` to :class:`.time`, where *a* is considered less
   1454   than *b* when *a* precedes *b* in time.  If one comparand is naive and the other
   1455   is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality
   1456   comparisons, naive instances are never equal to aware instances.
   1457 
   1458   If both comparands are aware, and have
   1459   the same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is
   1460   ignored and the base times are compared.  If both comparands are aware and
   1461   have different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by
   1462   subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
   1463   to stop mixed-type comparisons from falling back to the default comparison by
   1464   object address, when a :class:`.time` object is compared to an object of a
   1465   different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
   1466   ``!=``.  The latter cases return :const:`False` or :const:`True`, respectively.
   1467 
   1468   .. versionchanged:: 3.3
   1469      Equality comparisons between naive and aware :class:`~datetime.time` instances
   1470      don't raise :exc:`TypeError`.
   1471 
   1472 * hash, use as dict key
   1473 
   1474 * efficient pickling
   1475 
   1476 In boolean contexts, a :class:`.time` object is always considered to be true.
   1477 
   1478 .. versionchanged:: 3.5
   1479    Before Python 3.5, a :class:`.time` object was considered to be false if it
   1480    represented midnight in UTC.  This behavior was considered obscure and
   1481    error-prone and has been removed in Python 3.5.  See :issue:`13936` for full
   1482    details.
   1483 
   1484 Instance methods:
   1485 
   1486 .. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \
   1487    microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
   1488 
   1489    Return a :class:`.time` with the same value, except for those attributes given
   1490    new values by whichever keyword arguments are specified.  Note that
   1491    ``tzinfo=None`` can be specified to create a naive :class:`.time` from an
   1492    aware :class:`.time`, without conversion of the time data.
   1493 
   1494    .. versionadded:: 3.6
   1495       Added the ``fold`` argument.
   1496 
   1497 
   1498 .. method:: time.isoformat(timespec='auto')
   1499 
   1500    Return a string representing the time in ISO 8601 format, HH:MM:SS.mmmmmm or, if
   1501    :attr:`microsecond` is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a
   1502    6-character string is appended, giving the UTC offset in (signed) hours and
   1503    minutes: HH:MM:SS.mmmmmm+HH:MM or, if self.microsecond is 0, HH:MM:SS+HH:MM
   1504 
   1505    The optional argument *timespec* specifies the number of additional
   1506    components of the time to include (the default is ``'auto'``).
   1507    It can be one of the following:
   1508 
   1509    - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
   1510      same as ``'microseconds'`` otherwise.
   1511    - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
   1512    - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
   1513    - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
   1514      in HH:MM:SS format.
   1515    - ``'milliseconds'``: Include full time, but truncate fractional second
   1516      part to milliseconds. HH:MM:SS.sss format.
   1517    - ``'microseconds'``: Include full time in HH:MM:SS.mmmmmm format.
   1518 
   1519    .. note::
   1520 
   1521       Excluded time components are truncated, not rounded.
   1522 
   1523    :exc:`ValueError` will be raised on an invalid *timespec* argument.
   1524 
   1525 
   1526       >>> from datetime import time
   1527       >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
   1528       '12:34'
   1529       >>> dt = time(hour=12, minute=34, second=56, microsecond=0)
   1530       >>> dt.isoformat(timespec='microseconds')
   1531       '12:34:56.000000'
   1532       >>> dt.isoformat(timespec='auto')
   1533       '12:34:56'
   1534 
   1535    .. versionadded:: 3.6
   1536       Added the *timespec* argument.
   1537 
   1538 
   1539 .. method:: time.__str__()
   1540 
   1541    For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
   1542 
   1543 
   1544 .. method:: time.strftime(format)
   1545 
   1546    Return a string representing the time, controlled by an explicit format
   1547    string.  For a complete list of formatting directives, see
   1548    :ref:`strftime-strptime-behavior`.
   1549 
   1550 
   1551 .. method:: time.__format__(format)
   1552 
   1553    Same as :meth:`.time.strftime`. This makes it possible to specify a format string
   1554    for a :class:`.time` object in :ref:`formatted string
   1555    literals <f-strings>` and when using :meth:`str.format`.  For a
   1556    complete list of formatting directives, see
   1557    :ref:`strftime-strptime-behavior`.
   1558 
   1559 
   1560 .. method:: time.utcoffset()
   1561 
   1562    If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
   1563    ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
   1564    return ``None`` or a :class:`timedelta` object representing a whole number of
   1565    minutes with magnitude less than one day.
   1566 
   1567 
   1568 .. method:: time.dst()
   1569 
   1570    If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
   1571    ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
   1572    ``None``, or a :class:`timedelta` object representing a whole number of minutes
   1573    with magnitude less than one day.
   1574 
   1575 
   1576 .. method:: time.tzname()
   1577 
   1578    If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
   1579    ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
   1580    return ``None`` or a string object.
   1581 
   1582 
   1583 Example:
   1584 
   1585     >>> from datetime import time, tzinfo, timedelta
   1586     >>> class GMT1(tzinfo):
   1587     ...     def utcoffset(self, dt):
   1588     ...         return timedelta(hours=1)
   1589     ...     def dst(self, dt):
   1590     ...         return timedelta(0)
   1591     ...     def tzname(self,dt):
   1592     ...         return "Europe/Prague"
   1593     ...
   1594     >>> t = time(12, 10, 30, tzinfo=GMT1())
   1595     >>> t                               # doctest: +ELLIPSIS
   1596     datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>)
   1597     >>> gmt = GMT1()
   1598     >>> t.isoformat()
   1599     '12:10:30+01:00'
   1600     >>> t.dst()
   1601     datetime.timedelta(0)
   1602     >>> t.tzname()
   1603     'Europe/Prague'
   1604     >>> t.strftime("%H:%M:%S %Z")
   1605     '12:10:30 Europe/Prague'
   1606     >>> 'The {} is {:%H:%M}.'.format("time", t)
   1607     'The time is 12:10.'
   1608 
   1609 
   1610 .. _datetime-tzinfo:
   1611 
   1612 :class:`tzinfo` Objects
   1613 -----------------------
   1614 
   1615 .. class:: tzinfo()
   1616 
   1617    This is an abstract base class, meaning that this class should not be
   1618    instantiated directly.  You need to derive a concrete subclass, and (at least)
   1619    supply implementations of the standard :class:`tzinfo` methods needed by the
   1620    :class:`.datetime` methods you use.  The :mod:`datetime` module supplies
   1621    a simple concrete subclass of :class:`tzinfo`, :class:`timezone`, which can represent
   1622    timezones with fixed offset from UTC such as UTC itself or North American EST and
   1623    EDT.
   1624 
   1625    An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
   1626    constructors for :class:`.datetime` and :class:`.time` objects. The latter objects
   1627    view their attributes as being in local time, and the :class:`tzinfo` object
   1628    supports methods revealing offset of local time from UTC, the name of the time
   1629    zone, and DST offset, all relative to a date or time object passed to them.
   1630 
   1631    Special requirement for pickling:  A :class:`tzinfo` subclass must have an
   1632    :meth:`__init__` method that can be called with no arguments, else it can be
   1633    pickled but possibly not unpickled again.  This is a technical requirement that
   1634    may be relaxed in the future.
   1635 
   1636    A concrete subclass of :class:`tzinfo` may need to implement the following
   1637    methods.  Exactly which methods are needed depends on the uses made of aware
   1638    :mod:`datetime` objects.  If in doubt, simply implement all of them.
   1639 
   1640 
   1641 .. method:: tzinfo.utcoffset(dt)
   1642 
   1643    Return offset of local time from UTC, in minutes east of UTC.  If local time is
   1644    west of UTC, this should be negative.  Note that this is intended to be the
   1645    total offset from UTC; for example, if a :class:`tzinfo` object represents both
   1646    time zone and DST adjustments, :meth:`utcoffset` should return their sum.  If
   1647    the UTC offset isn't known, return ``None``.  Else the value returned must be a
   1648    :class:`timedelta` object specifying a whole number of minutes in the range
   1649    -1439 to 1439 inclusive (1440 = 24\*60; the magnitude of the offset must be less
   1650    than one day).  Most implementations of :meth:`utcoffset` will probably look
   1651    like one of these two::
   1652 
   1653       return CONSTANT                 # fixed-offset class
   1654       return CONSTANT + self.dst(dt)  # daylight-aware class
   1655 
   1656    If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
   1657    ``None`` either.
   1658 
   1659    The default implementation of :meth:`utcoffset` raises
   1660    :exc:`NotImplementedError`.
   1661 
   1662 
   1663 .. method:: tzinfo.dst(dt)
   1664 
   1665    Return the daylight saving time (DST) adjustment, in minutes east of UTC, or
   1666    ``None`` if DST information isn't known.  Return ``timedelta(0)`` if DST is not
   1667    in effect. If DST is in effect, return the offset as a :class:`timedelta` object
   1668    (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
   1669    already been added to the UTC offset returned by :meth:`utcoffset`, so there's
   1670    no need to consult :meth:`dst` unless you're interested in obtaining DST info
   1671    separately.  For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo`
   1672    attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
   1673    should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
   1674    DST changes when crossing time zones.
   1675 
   1676    An instance *tz* of a :class:`tzinfo` subclass that models both standard and
   1677    daylight times must be consistent in this sense:
   1678 
   1679    ``tz.utcoffset(dt) - tz.dst(dt)``
   1680 
   1681    must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo ==
   1682    tz``  For sane :class:`tzinfo` subclasses, this expression yields the time
   1683    zone's "standard offset", which should not depend on the date or the time, but
   1684    only on geographic location.  The implementation of :meth:`datetime.astimezone`
   1685    relies on this, but cannot detect violations; it's the programmer's
   1686    responsibility to ensure it.  If a :class:`tzinfo` subclass cannot guarantee
   1687    this, it may be able to override the default implementation of
   1688    :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
   1689 
   1690    Most implementations of :meth:`dst` will probably look like one of these two::
   1691 
   1692       def dst(self, dt):
   1693           # a fixed-offset class:  doesn't account for DST
   1694           return timedelta(0)
   1695 
   1696    or ::
   1697 
   1698       def dst(self, dt):
   1699           # Code to set dston and dstoff to the time zone's DST
   1700           # transition times based on the input dt.year, and expressed
   1701           # in standard local time.  Then
   1702 
   1703           if dston <= dt.replace(tzinfo=None) < dstoff:
   1704               return timedelta(hours=1)
   1705           else:
   1706               return timedelta(0)
   1707 
   1708    The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
   1709 
   1710 
   1711 .. method:: tzinfo.tzname(dt)
   1712 
   1713    Return the time zone name corresponding to the :class:`.datetime` object *dt*, as
   1714    a string. Nothing about string names is defined by the :mod:`datetime` module,
   1715    and there's no requirement that it mean anything in particular.  For example,
   1716    "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
   1717    valid replies.  Return ``None`` if a string name isn't known.  Note that this is
   1718    a method rather than a fixed string primarily because some :class:`tzinfo`
   1719    subclasses will wish to return different names depending on the specific value
   1720    of *dt* passed, especially if the :class:`tzinfo` class is accounting for
   1721    daylight time.
   1722 
   1723    The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
   1724 
   1725 
   1726 These methods are called by a :class:`.datetime` or :class:`.time` object, in
   1727 response to their methods of the same names.  A :class:`.datetime` object passes
   1728 itself as the argument, and a :class:`.time` object passes ``None`` as the
   1729 argument.  A :class:`tzinfo` subclass's methods should therefore be prepared to
   1730 accept a *dt* argument of ``None``, or of class :class:`.datetime`.
   1731 
   1732 When ``None`` is passed, it's up to the class designer to decide the best
   1733 response.  For example, returning ``None`` is appropriate if the class wishes to
   1734 say that time objects don't participate in the :class:`tzinfo` protocols.  It
   1735 may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
   1736 there is no other convention for discovering the standard offset.
   1737 
   1738 When a :class:`.datetime` object is passed in response to a :class:`.datetime`
   1739 method, ``dt.tzinfo`` is the same object as *self*.  :class:`tzinfo` methods can
   1740 rely on this, unless user code calls :class:`tzinfo` methods directly.  The
   1741 intent is that the :class:`tzinfo` methods interpret *dt* as being in local
   1742 time, and not need worry about objects in other timezones.
   1743 
   1744 There is one more :class:`tzinfo` method that a subclass may wish to override:
   1745 
   1746 
   1747 .. method:: tzinfo.fromutc(dt)
   1748 
   1749    This is called from the default :class:`datetime.astimezone()`
   1750    implementation.  When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
   1751    date and time data are to be viewed as expressing a UTC time.  The purpose
   1752    of :meth:`fromutc` is to adjust the date and time data, returning an
   1753    equivalent datetime in *self*'s local time.
   1754 
   1755    Most :class:`tzinfo` subclasses should be able to inherit the default
   1756    :meth:`fromutc` implementation without problems.  It's strong enough to handle
   1757    fixed-offset time zones, and time zones accounting for both standard and
   1758    daylight time, and the latter even if the DST transition times differ in
   1759    different years.  An example of a time zone the default :meth:`fromutc`
   1760    implementation may not handle correctly in all cases is one where the standard
   1761    offset (from UTC) depends on the specific date and time passed, which can happen
   1762    for political reasons. The default implementations of :meth:`astimezone` and
   1763    :meth:`fromutc` may not produce the result you want if the result is one of the
   1764    hours straddling the moment the standard offset changes.
   1765 
   1766    Skipping code for error cases, the default :meth:`fromutc` implementation acts
   1767    like::
   1768 
   1769       def fromutc(self, dt):
   1770           # raise ValueError error if dt.tzinfo is not self
   1771           dtoff = dt.utcoffset()
   1772           dtdst = dt.dst()
   1773           # raise ValueError if dtoff is None or dtdst is None
   1774           delta = dtoff - dtdst  # this is self's standard offset
   1775           if delta:
   1776               dt += delta   # convert to standard local time
   1777               dtdst = dt.dst()
   1778               # raise ValueError if dtdst is None
   1779           if dtdst:
   1780               return dt + dtdst
   1781           else:
   1782               return dt
   1783 
   1784 Example :class:`tzinfo` classes:
   1785 
   1786 .. literalinclude:: ../includes/tzinfo-examples.py
   1787 
   1788 Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
   1789 subclass accounting for both standard and daylight time, at the DST transition
   1790 points.  For concreteness, consider US Eastern (UTC -0500), where EDT begins the
   1791 minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
   1792 1:59 (EDT) on the first Sunday in November::
   1793 
   1794      UTC   3:MM  4:MM  5:MM  6:MM  7:MM  8:MM
   1795      EST  22:MM 23:MM  0:MM  1:MM  2:MM  3:MM
   1796      EDT  23:MM  0:MM  1:MM  2:MM  3:MM  4:MM
   1797 
   1798    start  22:MM 23:MM  0:MM  1:MM  3:MM  4:MM
   1799 
   1800      end  23:MM  0:MM  1:MM  1:MM  2:MM  3:MM
   1801 
   1802 When DST starts (the "start" line), the local wall clock leaps from 1:59 to
   1803 3:00.  A wall time of the form 2:MM doesn't really make sense on that day, so
   1804 ``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
   1805 begins.  For example, at the Spring forward transition of 2016, we get
   1806 
   1807     >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
   1808     >>> for i in range(4):
   1809     ...     u = u0 + i*HOUR
   1810     ...     t = u.astimezone(Eastern)
   1811     ...     print(u.time(), 'UTC =', t.time(), t.tzname())
   1812     ...
   1813     05:00:00 UTC = 00:00:00 EST
   1814     06:00:00 UTC = 01:00:00 EST
   1815     07:00:00 UTC = 03:00:00 EDT
   1816     08:00:00 UTC = 04:00:00 EDT
   1817 
   1818 
   1819 When DST ends (the "end" line), there's a potentially worse problem: there's an
   1820 hour that can't be spelled unambiguously in local wall time: the last hour of
   1821 daylight time.  In Eastern, that's times of the form 5:MM UTC on the day
   1822 daylight time ends.  The local wall clock leaps from 1:59 (daylight time) back
   1823 to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
   1824 :meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
   1825 hours into the same local hour then.  In the Eastern example, UTC times of the
   1826 form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times
   1827 have the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1.
   1828 For example, at the Fall back transition of 2016, we get
   1829 
   1830     >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
   1831     >>> for i in range(4):
   1832     ...     u = u0 + i*HOUR
   1833     ...     t = u.astimezone(Eastern)
   1834     ...     print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
   1835     ...
   1836     04:00:00 UTC = 00:00:00 EDT 0
   1837     05:00:00 UTC = 01:00:00 EDT 0
   1838     06:00:00 UTC = 01:00:00 EST 1
   1839     07:00:00 UTC = 02:00:00 EST 0
   1840 
   1841 Note that the :class:`datetime` instances that differ only by the value of the
   1842 :attr:`~datetime.fold` attribute are considered equal in comparisons.
   1843 
   1844 Applications that can't bear wall-time ambiguities should explicitly check the
   1845 value of the :attr:`~datetime.fold` attribute or avoid using hybrid
   1846 :class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
   1847 or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
   1848 only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
   1849 
   1850 .. seealso::
   1851 
   1852    `datetuil.tz <https://dateutil.readthedocs.io/en/stable/tz.html>`_
   1853       The standard library has :class:`timezone` class for handling arbitrary
   1854       fixed offsets from UTC and :attr:`timezone.utc` as UTC timezone instance.
   1855 
   1856       *datetuil.tz* library brings the *IANA timezone database* (also known as the
   1857       Olson database) to Python and its usage is recommended.
   1858 
   1859    `IANA timezone database <https://www.iana.org/time-zones>`_
   1860       The Time Zone Database (often called tz, tzdata or zoneinfo) contains code and
   1861       data that represent the history of local time for many representative
   1862       locations around the globe. It is updated periodically to reflect changes
   1863       made by political bodies to time zone boundaries, UTC offsets, and
   1864       daylight-saving rules.
   1865 
   1866 
   1867 .. _datetime-timezone:
   1868 
   1869 :class:`timezone` Objects
   1870 --------------------------
   1871 
   1872 The :class:`timezone` class is a subclass of :class:`tzinfo`, each
   1873 instance of which represents a timezone defined by a fixed offset from
   1874 UTC.  Note that objects of this class cannot be used to represent
   1875 timezone information in the locations where different offsets are used
   1876 in different days of the year or where historical changes have been
   1877 made to civil time.
   1878 
   1879 
   1880 .. class:: timezone(offset, name=None)
   1881 
   1882   The *offset* argument must be specified as a :class:`timedelta`
   1883   object representing the difference between the local time and UTC.  It must
   1884   be strictly between ``-timedelta(hours=24)`` and
   1885   ``timedelta(hours=24)`` and represent a whole number of minutes,
   1886   otherwise :exc:`ValueError` is raised.
   1887 
   1888   The *name* argument is optional.  If specified it must be a string that
   1889   will be used as the value returned by the :meth:`datetime.tzname` method.
   1890 
   1891   .. versionadded:: 3.2
   1892 
   1893 .. method:: timezone.utcoffset(dt)
   1894 
   1895   Return the fixed value specified when the :class:`timezone` instance is
   1896   constructed.  The *dt* argument is ignored.  The return value is a
   1897   :class:`timedelta` instance equal to the difference between the
   1898   local time and UTC.
   1899 
   1900 .. method:: timezone.tzname(dt)
   1901 
   1902   Return the fixed value specified when the :class:`timezone` instance
   1903   is constructed.  If *name* is not provided in the constructor, the
   1904   name returned by ``tzname(dt)`` is generated from the value of the
   1905   ``offset`` as follows.  If *offset* is ``timedelta(0)``, the name
   1906   is "UTC", otherwise it is a string 'UTCHH:MM', where  is the sign
   1907   of ``offset``, HH and MM are two digits of ``offset.hours`` and
   1908   ``offset.minutes`` respectively.
   1909 
   1910   .. versionchanged:: 3.6
   1911      Name generated from ``offset=timedelta(0)`` is now plain 'UTC', not
   1912      'UTC+00:00'.
   1913 
   1914 
   1915 .. method:: timezone.dst(dt)
   1916 
   1917   Always returns ``None``.
   1918 
   1919 .. method:: timezone.fromutc(dt)
   1920 
   1921   Return ``dt + offset``.  The *dt* argument must be an aware
   1922   :class:`.datetime` instance, with ``tzinfo`` set to ``self``.
   1923 
   1924 Class attributes:
   1925 
   1926 .. attribute:: timezone.utc
   1927 
   1928    The UTC timezone, ``timezone(timedelta(0))``.
   1929 
   1930 
   1931 .. _strftime-strptime-behavior:
   1932 
   1933 :meth:`strftime` and :meth:`strptime` Behavior
   1934 ----------------------------------------------
   1935 
   1936 :class:`date`, :class:`.datetime`, and :class:`.time` objects all support a
   1937 ``strftime(format)`` method, to create a string representing the time under the
   1938 control of an explicit format string.  Broadly speaking, ``d.strftime(fmt)``
   1939 acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
   1940 although not all objects support a :meth:`timetuple` method.
   1941 
   1942 Conversely, the :meth:`datetime.strptime` class method creates a
   1943 :class:`.datetime` object from a string representing a date and time and a
   1944 corresponding format string. ``datetime.strptime(date_string, format)`` is
   1945 equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``.
   1946 
   1947 For :class:`.time` objects, the format codes for year, month, and day should not
   1948 be used, as time objects have no such values.  If they're used anyway, ``1900``
   1949 is substituted for the year, and ``1`` for the month and day.
   1950 
   1951 For :class:`date` objects, the format codes for hours, minutes, seconds, and
   1952 microseconds should not be used, as :class:`date` objects have no such
   1953 values.  If they're used anyway, ``0`` is substituted for them.
   1954 
   1955 The full set of format codes supported varies across platforms, because Python
   1956 calls the platform C library's :func:`strftime` function, and platform
   1957 variations are common.  To see the full set of format codes supported on your
   1958 platform, consult the :manpage:`strftime(3)` documentation.
   1959 
   1960 The following is a list of all the format codes that the C standard (1989
   1961 version) requires, and these work on all platforms with a standard C
   1962 implementation.  Note that the 1999 version of the C standard added additional
   1963 format codes.
   1964 
   1965 +-----------+--------------------------------+------------------------+-------+
   1966 | Directive | Meaning                        | Example                | Notes |
   1967 +===========+================================+========================+=======+
   1968 | ``%a``    | Weekday as locale's            || Sun, Mon, ..., Sat    | \(1)  |
   1969 |           | abbreviated name.              |  (en_US);              |       |
   1970 |           |                                || So, Mo, ..., Sa       |       |
   1971 |           |                                |  (de_DE)               |       |
   1972 +-----------+--------------------------------+------------------------+-------+
   1973 | ``%A``    | Weekday as locale's full name. || Sunday, Monday, ...,  | \(1)  |
   1974 |           |                                |  Saturday (en_US);     |       |
   1975 |           |                                || Sonntag, Montag, ..., |       |
   1976 |           |                                |  Samstag (de_DE)       |       |
   1977 +-----------+--------------------------------+------------------------+-------+
   1978 | ``%w``    | Weekday as a decimal number,   | 0, 1, ..., 6           |       |
   1979 |           | where 0 is Sunday and 6 is     |                        |       |
   1980 |           | Saturday.                      |                        |       |
   1981 +-----------+--------------------------------+------------------------+-------+
   1982 | ``%d``    | Day of the month as a          | 01, 02, ..., 31        |       |
   1983 |           | zero-padded decimal number.    |                        |       |
   1984 +-----------+--------------------------------+------------------------+-------+
   1985 | ``%b``    | Month as locale's abbreviated  || Jan, Feb, ..., Dec    | \(1)  |
   1986 |           | name.                          |  (en_US);              |       |
   1987 |           |                                || Jan, Feb, ..., Dez    |       |
   1988 |           |                                |  (de_DE)               |       |
   1989 +-----------+--------------------------------+------------------------+-------+
   1990 | ``%B``    | Month as locale's full name.   || January, February,    | \(1)  |
   1991 |           |                                |  ..., December (en_US);|       |
   1992 |           |                                || Januar, Februar, ..., |       |
   1993 |           |                                |  Dezember (de_DE)      |       |
   1994 +-----------+--------------------------------+------------------------+-------+
   1995 | ``%m``    | Month as a zero-padded         | 01, 02, ..., 12        |       |
   1996 |           | decimal number.                |                        |       |
   1997 +-----------+--------------------------------+------------------------+-------+
   1998 | ``%y``    | Year without century as a      | 00, 01, ..., 99        |       |
   1999 |           | zero-padded decimal number.    |                        |       |
   2000 +-----------+--------------------------------+------------------------+-------+
   2001 | ``%Y``    | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2)  |
   2002 |           | number.                        | 2014, ..., 9998, 9999  |       |
   2003 +-----------+--------------------------------+------------------------+-------+
   2004 | ``%H``    | Hour (24-hour clock) as a      | 00, 01, ..., 23        |       |
   2005 |           | zero-padded decimal number.    |                        |       |
   2006 +-----------+--------------------------------+------------------------+-------+
   2007 | ``%I``    | Hour (12-hour clock) as a      | 01, 02, ..., 12        |       |
   2008 |           | zero-padded decimal number.    |                        |       |
   2009 +-----------+--------------------------------+------------------------+-------+
   2010 | ``%p``    | Locale's equivalent of either  || AM, PM (en_US);       | \(1), |
   2011 |           | AM or PM.                      || am, pm (de_DE)        | \(3)  |
   2012 +-----------+--------------------------------+------------------------+-------+
   2013 | ``%M``    | Minute as a zero-padded        | 00, 01, ..., 59        |       |
   2014 |           | decimal number.                |                        |       |
   2015 +-----------+--------------------------------+------------------------+-------+
   2016 | ``%S``    | Second as a zero-padded        | 00, 01, ..., 59        | \(4)  |
   2017 |           | decimal number.                |                        |       |
   2018 +-----------+--------------------------------+------------------------+-------+
   2019 | ``%f``    | Microsecond as a decimal       | 000000, 000001, ...,   | \(5)  |
   2020 |           | number, zero-padded on the     | 999999                 |       |
   2021 |           | left.                          |                        |       |
   2022 +-----------+--------------------------------+------------------------+-------+
   2023 | ``%z``    | UTC offset in the form +HHMM   | (empty), +0000, -0400, | \(6)  |
   2024 |           | or -HHMM (empty string if the  | +1030                  |       |
   2025 |           | object is naive).              |                        |       |
   2026 +-----------+--------------------------------+------------------------+-------+
   2027 | ``%Z``    | Time zone name (empty string   | (empty), UTC, EST, CST |       |
   2028 |           | if the object is naive).       |                        |       |
   2029 +-----------+--------------------------------+------------------------+-------+
   2030 | ``%j``    | Day of the year as a           | 001, 002, ..., 366     |       |
   2031 |           | zero-padded decimal number.    |                        |       |
   2032 +-----------+--------------------------------+------------------------+-------+
   2033 | ``%U``    | Week number of the year        | 00, 01, ..., 53        | \(7)  |
   2034 |           | (Sunday as the first day of    |                        |       |
   2035 |           | the week) as a zero padded     |                        |       |
   2036 |           | decimal number. All days in a  |                        |       |
   2037 |           | new year preceding the first   |                        |       |
   2038 |           | Sunday are considered to be in |                        |       |
   2039 |           | week 0.                        |                        |       |
   2040 +-----------+--------------------------------+------------------------+-------+
   2041 | ``%W``    | Week number of the year        | 00, 01, ..., 53        | \(7)  |
   2042 |           | (Monday as the first day of    |                        |       |
   2043 |           | the week) as a decimal number. |                        |       |
   2044 |           | All days in a new year         |                        |       |
   2045 |           | preceding the first Monday     |                        |       |
   2046 |           | are considered to be in        |                        |       |
   2047 |           | week 0.                        |                        |       |
   2048 +-----------+--------------------------------+------------------------+-------+
   2049 | ``%c``    | Locale's appropriate date and  || Tue Aug 16 21:30:00   | \(1)  |
   2050 |           | time representation.           |  1988 (en_US);         |       |
   2051 |           |                                || Di 16 Aug 21:30:00    |       |
   2052 |           |                                |  1988 (de_DE)          |       |
   2053 +-----------+--------------------------------+------------------------+-------+
   2054 | ``%x``    | Locale's appropriate date      || 08/16/88 (None);      | \(1)  |
   2055 |           | representation.                || 08/16/1988 (en_US);   |       |
   2056 |           |                                || 16.08.1988 (de_DE)    |       |
   2057 +-----------+--------------------------------+------------------------+-------+
   2058 | ``%X``    | Locale's appropriate time      || 21:30:00 (en_US);     | \(1)  |
   2059 |           | representation.                || 21:30:00 (de_DE)      |       |
   2060 +-----------+--------------------------------+------------------------+-------+
   2061 | ``%%``    | A literal ``'%'`` character.   | %                      |       |
   2062 +-----------+--------------------------------+------------------------+-------+
   2063 
   2064 Several additional directives not required by the C89 standard are included for
   2065 convenience. These parameters all correspond to ISO 8601 date values. These
   2066 may not be available on all platforms when used with the :meth:`strftime`
   2067 method. The ISO 8601 year and ISO 8601 week directives are not interchangeable
   2068 with the year and week number directives above. Calling :meth:`strptime` with
   2069 incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
   2070 
   2071 +-----------+--------------------------------+------------------------+-------+
   2072 | Directive | Meaning                        | Example                | Notes |
   2073 +===========+================================+========================+=======+
   2074 | ``%G``    | ISO 8601 year with century     | 0001, 0002, ..., 2013, | \(8)  |
   2075 |           | representing the year that     | 2014, ..., 9998, 9999  |       |
   2076 |           | contains the greater part of   |                        |       |
   2077 |           | the ISO week (``%V``).         |                        |       |
   2078 +-----------+--------------------------------+------------------------+-------+
   2079 | ``%u``    | ISO 8601 weekday as a decimal  | 1, 2, ..., 7           |       |
   2080 |           | number where 1 is Monday.      |                        |       |
   2081 +-----------+--------------------------------+------------------------+-------+
   2082 | ``%V``    | ISO 8601 week as a decimal     | 01, 02, ..., 53        | \(8)  |
   2083 |           | number with Monday as          |                        |       |
   2084 |           | the first day of the week.     |                        |       |
   2085 |           | Week 01 is the week containing |                        |       |
   2086 |           | Jan 4.                         |                        |       |
   2087 +-----------+--------------------------------+------------------------+-------+
   2088 
   2089 .. versionadded:: 3.6
   2090    ``%G``, ``%u`` and ``%V`` were added.
   2091 
   2092 Notes:
   2093 
   2094 (1)
   2095    Because the format depends on the current locale, care should be taken when
   2096    making assumptions about the output value. Field orderings will vary (for
   2097    example, "month/day/year" versus "day/month/year"), and the output may
   2098    contain Unicode characters encoded using the locale's default encoding (for
   2099    example, if the current locale is ``ja_JP``, the default encoding could be
   2100    any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale`
   2101    to determine the current locale's encoding).
   2102 
   2103 (2)
   2104    The :meth:`strptime` method can parse years in the full [1, 9999] range, but
   2105    years < 1000 must be zero-filled to 4-digit width.
   2106 
   2107    .. versionchanged:: 3.2
   2108       In previous versions, :meth:`strftime` method was restricted to
   2109       years >= 1900.
   2110 
   2111    .. versionchanged:: 3.3
   2112       In version 3.2, :meth:`strftime` method was restricted to
   2113       years >= 1000.
   2114 
   2115 (3)
   2116    When used with the :meth:`strptime` method, the ``%p`` directive only affects
   2117    the output hour field if the ``%I`` directive is used to parse the hour.
   2118 
   2119 (4)
   2120    Unlike the :mod:`time` module, the :mod:`datetime` module does not support
   2121    leap seconds.
   2122 
   2123 (5)
   2124    When used with the :meth:`strptime` method, the ``%f`` directive
   2125    accepts from one to six digits and zero pads on the right.  ``%f`` is
   2126    an extension to the set of format characters in the C standard (but
   2127    implemented separately in datetime objects, and therefore always
   2128    available).
   2129 
   2130 (6)
   2131    For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
   2132    strings.
   2133 
   2134    For an aware object:
   2135 
   2136    ``%z``
   2137       :meth:`utcoffset` is transformed into a 5-character string of the form
   2138       +HHMM or -HHMM, where HH is a 2-digit string giving the number of UTC
   2139       offset hours, and MM is a 2-digit string giving the number of UTC offset
   2140       minutes.  For example, if :meth:`utcoffset` returns
   2141       ``timedelta(hours=-3, minutes=-30)``, ``%z`` is replaced with the string
   2142       ``'-0330'``.
   2143 
   2144    ``%Z``
   2145       If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty
   2146       string.  Otherwise ``%Z`` is replaced by the returned value, which must
   2147       be a string.
   2148 
   2149    .. versionchanged:: 3.2
   2150       When the ``%z`` directive is provided to the :meth:`strptime` method, an
   2151       aware :class:`.datetime` object will be produced.  The ``tzinfo`` of the
   2152       result will be set to a :class:`timezone` instance.
   2153 
   2154 (7)
   2155    When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used
   2156    in calculations when the day of the week and the calendar year (``%Y``)
   2157    are specified.
   2158 
   2159 (8)
   2160    Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the
   2161    day of the week and the ISO year (``%G``) are specified in a
   2162    :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
   2163    interchangeable.
   2164 
   2165 .. rubric:: Footnotes
   2166 
   2167 .. [#] If, that is, we ignore the effects of Relativity
   2168