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