blob: 22ecbb551d89736ab10b960d5aa28154d89182ce [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`datetime` --- Basic date and time types
2=============================================
3
4.. module:: datetime
5 :synopsis: Basic date and time types.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Tim Peters <tim@zope.com>
8.. sectionauthor:: Tim Peters <tim@zope.com>
9.. sectionauthor:: A.M. Kuchling <amk@amk.ca>
10
Andrew Kuchling2e3743c2014-03-19 16:23:01 -040011**Source code:** :source:`Lib/datetime.py`
12
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040013--------------
14
Christian Heimes5b5e81c2007-12-31 16:14:33 +000015.. XXX what order should the types be discussed in?
Georg Brandl116aa622007-08-15 14:28:22 +000016
Brad3fb13632019-09-11 05:19:05 -040017The :mod:`datetime` module supplies classes for manipulating dates and times.
Georg Brandl116aa622007-08-15 14:28:22 +000018
Brad3fb13632019-09-11 05:19:05 -040019While date and time arithmetic is supported, the focus of the implementation is
20on efficient attribute extraction for output formatting and manipulation.
Georg Brandl116aa622007-08-15 14:28:22 +000021
Brad3fb13632019-09-11 05:19:05 -040022.. seealso::
R David Murray9075d8b2012-05-14 22:14:46 -040023
Brad3fb13632019-09-11 05:19:05 -040024 Module :mod:`calendar`
25 General calendar related functions.
26
27 Module :mod:`time`
28 Time access and conversions.
29
30 Package `dateutil <https://dateutil.readthedocs.io/en/stable/>`_
31 Third-party library with expanded time zone and parsing support.
32
33.. _datetime-naive-aware:
34
35Aware and Naive Objects
36-----------------------
37
38Date and time objects may be categorized as "aware" or "naive."
39
40With sufficient knowledge of applicable algorithmic and political time
41adjustments, such as time zone and daylight saving time information,
42an **aware** object can locate itself relative to other aware objects.
43An aware object represents a specific moment in time that is not open to
44interpretation. [#]_
45
46A **naive** object does not contain enough information to unambiguously locate
47itself relative to other date/time objects. Whether a naive object represents
R David Murray539f2392012-05-14 22:17:23 -040048Coordinated Universal Time (UTC), local time, or time in some other timezone is
49purely up to the program, just like it is up to the program whether a
Brad3fb13632019-09-11 05:19:05 -040050particular number represents metres, miles, or mass. Naive objects are easy to
R David Murray539f2392012-05-14 22:17:23 -040051understand and to work with, at the cost of ignoring some aspects of reality.
Georg Brandl116aa622007-08-15 14:28:22 +000052
R David Murray539f2392012-05-14 22:17:23 -040053For applications requiring aware objects, :class:`.datetime` and :class:`.time`
Martin Panter16c7cfd2016-04-01 21:48:24 +000054objects have an optional time zone information attribute, :attr:`!tzinfo`, that
R David Murray539f2392012-05-14 22:17:23 -040055can be set to an instance of a subclass of the abstract :class:`tzinfo` class.
56These :class:`tzinfo` objects capture information about the offset from UTC
Brad3fb13632019-09-11 05:19:05 -040057time, the time zone name, and whether daylight saving time is in effect.
58
59Only one concrete :class:`tzinfo` class, the :class:`timezone` class, is
60supplied by the :mod:`datetime` module. The :class:`timezone` class can
61represent simple timezones with fixed offsets from UTC, such as UTC itself or
62North American EST and EDT timezones. Supporting timezones at deeper levels of
63detail is up to the application. The rules for time adjustment across the
Alexander Belopolsky4e749a12010-06-14 14:15:50 +000064world are more political than rational, change frequently, and there is no
65standard suitable for every application aside from UTC.
Georg Brandl116aa622007-08-15 14:28:22 +000066
Brad3fb13632019-09-11 05:19:05 -040067Constants
68---------
69
Georg Brandl116aa622007-08-15 14:28:22 +000070The :mod:`datetime` module exports the following constants:
71
Georg Brandl116aa622007-08-15 14:28:22 +000072.. data:: MINYEAR
73
Ezio Melotti35ec7f72011-10-02 12:44:50 +030074 The smallest year number allowed in a :class:`date` or :class:`.datetime` object.
Georg Brandl116aa622007-08-15 14:28:22 +000075 :const:`MINYEAR` is ``1``.
76
77
78.. data:: MAXYEAR
79
Ezio Melotti35ec7f72011-10-02 12:44:50 +030080 The largest year number allowed in a :class:`date` or :class:`.datetime` object.
Georg Brandl116aa622007-08-15 14:28:22 +000081 :const:`MAXYEAR` is ``9999``.
82
Georg Brandl116aa622007-08-15 14:28:22 +000083Available Types
84---------------
85
Georg Brandl116aa622007-08-15 14:28:22 +000086.. class:: date
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000087 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000088
89 An idealized naive date, assuming the current Gregorian calendar always was, and
90 always will be, in effect. Attributes: :attr:`year`, :attr:`month`, and
91 :attr:`day`.
92
93
94.. class:: time
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000095 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000096
97 An idealized time, independent of any particular day, assuming that every day
Brad3fb13632019-09-11 05:19:05 -040098 has exactly 24\*60\*60 seconds. (There is no notion of "leap seconds" here.)
Georg Brandl116aa622007-08-15 14:28:22 +000099 Attributes: :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
Martin Panter16c7cfd2016-04-01 21:48:24 +0000100 and :attr:`.tzinfo`.
Georg Brandl116aa622007-08-15 14:28:22 +0000101
102
103.. class:: datetime
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +0000104 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +0000105
106 A combination of a date and a time. Attributes: :attr:`year`, :attr:`month`,
107 :attr:`day`, :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
Martin Panter16c7cfd2016-04-01 21:48:24 +0000108 and :attr:`.tzinfo`.
Georg Brandl116aa622007-08-15 14:28:22 +0000109
110
111.. class:: timedelta
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +0000112 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +0000113
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300114 A duration expressing the difference between two :class:`date`, :class:`.time`,
115 or :class:`.datetime` instances to microsecond resolution.
Georg Brandl116aa622007-08-15 14:28:22 +0000116
117
118.. class:: tzinfo
Martin Panter16c7cfd2016-04-01 21:48:24 +0000119 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +0000120
Brad3fb13632019-09-11 05:19:05 -0400121 An abstract base class for time zone information objects. These are used by the
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300122 :class:`.datetime` and :class:`.time` classes to provide a customizable notion of
Georg Brandl116aa622007-08-15 14:28:22 +0000123 time adjustment (for example, to account for time zone and/or daylight saving
124 time).
125
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000126.. class:: timezone
Martin Panter16c7cfd2016-04-01 21:48:24 +0000127 :noindex:
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000128
129 A class that implements the :class:`tzinfo` abstract base class as a
130 fixed offset from the UTC.
131
132 .. versionadded:: 3.2
133
Georg Brandl116aa622007-08-15 14:28:22 +0000134Objects of these types are immutable.
135
Georg Brandl116aa622007-08-15 14:28:22 +0000136Subclass relationships::
137
138 object
139 timedelta
140 tzinfo
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000141 timezone
Georg Brandl116aa622007-08-15 14:28:22 +0000142 time
143 date
144 datetime
145
Brad3fb13632019-09-11 05:19:05 -0400146Common Properties
147^^^^^^^^^^^^^^^^^
148
149The :class:`date`, :class:`.datetime`, :class:`.time`, and :class:`timezone` types
150share these common features:
151
152- Objects of these types are immutable.
153- Objects of these types are hashable, meaning that they can be used as
154 dictionary keys.
155- Objects of these types support efficient pickling via the :mod:`pickle` module.
156
157Determining if an Object is Aware or Naive
158^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
159
160Objects of the :class:`date` type are always naive.
161
162An object of type :class:`.time` or :class:`.datetime` may be aware or naive.
163
164A :class:`.datetime` object *d* is aware if both of the following hold:
165
1661. ``d.tzinfo`` is not ``None``
1672. ``d.tzinfo.utcoffset(d)`` does not return ``None``
168
169Otherwise, *d* is naive.
170
171A :class:`.time` object *t* is aware if both of the following hold:
172
1731. ``t.tzinfo`` is not ``None``
1742. ``t.tzinfo.utcoffset(None)`` does not return ``None``.
175
176Otherwise, *t* is naive.
177
178The distinction between aware and naive doesn't apply to :class:`timedelta`
179objects.
Georg Brandl116aa622007-08-15 14:28:22 +0000180
181.. _datetime-timedelta:
182
183:class:`timedelta` Objects
184--------------------------
185
186A :class:`timedelta` object represents a duration, the difference between two
187dates or times.
188
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000189.. class:: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000190
Brad3fb13632019-09-11 05:19:05 -0400191 All arguments are optional and default to ``0``. Arguments may be integers
Georg Brandl116aa622007-08-15 14:28:22 +0000192 or floats, and may be positive or negative.
193
Brad3fb13632019-09-11 05:19:05 -0400194 Only *days*, *seconds* and *microseconds* are stored internally.
195 Arguments are converted to those units:
Georg Brandl116aa622007-08-15 14:28:22 +0000196
197 * A millisecond is converted to 1000 microseconds.
198 * A minute is converted to 60 seconds.
199 * An hour is converted to 3600 seconds.
200 * A week is converted to 7 days.
201
202 and days, seconds and microseconds are then normalized so that the
203 representation is unique, with
204
205 * ``0 <= microseconds < 1000000``
206 * ``0 <= seconds < 3600*24`` (the number of seconds in one day)
207 * ``-999999999 <= days <= 999999999``
208
Brad3fb13632019-09-11 05:19:05 -0400209 The following example illustrates how any arguments besides
210 *days*, *seconds* and *microseconds* are "merged" and normalized into those
211 three resulting attributes::
212
213 >>> from datetime import timedelta
214 >>> delta = timedelta(
215 ... days=50,
216 ... seconds=27,
217 ... microseconds=10,
218 ... milliseconds=29000,
219 ... minutes=5,
220 ... hours=8,
221 ... weeks=2
222 ... )
223 >>> # Only days, seconds, and microseconds remain
224 >>> delta
225 datetime.timedelta(days=64, seconds=29156, microseconds=10)
226
Alexander Belopolsky790d2692013-08-04 14:51:35 -0400227 If any argument is a float and there are fractional microseconds,
228 the fractional microseconds left over from all arguments are
229 combined and their sum is rounded to the nearest microsecond using
Brad3fb13632019-09-11 05:19:05 -0400230 round-half-to-even tiebreaker. If no argument is a float, the
Alexander Belopolsky790d2692013-08-04 14:51:35 -0400231 conversion and normalization processes are exact (no information is
232 lost).
Georg Brandl116aa622007-08-15 14:28:22 +0000233
234 If the normalized value of days lies outside the indicated range,
235 :exc:`OverflowError` is raised.
236
237 Note that normalization of negative values may be surprising at first. For
Brad3fb13632019-09-11 05:19:05 -0400238 example::
Georg Brandl116aa622007-08-15 14:28:22 +0000239
Christian Heimes895627f2007-12-08 17:28:33 +0000240 >>> from datetime import timedelta
Georg Brandl116aa622007-08-15 14:28:22 +0000241 >>> d = timedelta(microseconds=-1)
242 >>> (d.days, d.seconds, d.microseconds)
243 (-1, 86399, 999999)
244
Georg Brandl116aa622007-08-15 14:28:22 +0000245
Brad3fb13632019-09-11 05:19:05 -0400246Class attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000247
248.. attribute:: timedelta.min
249
250 The most negative :class:`timedelta` object, ``timedelta(-999999999)``.
251
252
253.. attribute:: timedelta.max
254
255 The most positive :class:`timedelta` object, ``timedelta(days=999999999,
256 hours=23, minutes=59, seconds=59, microseconds=999999)``.
257
258
259.. attribute:: timedelta.resolution
260
261 The smallest possible difference between non-equal :class:`timedelta` objects,
262 ``timedelta(microseconds=1)``.
263
264Note that, because of normalization, ``timedelta.max`` > ``-timedelta.min``.
265``-timedelta.max`` is not representable as a :class:`timedelta` object.
266
267Instance attributes (read-only):
268
269+------------------+--------------------------------------------+
270| Attribute | Value |
271+==================+============================================+
272| ``days`` | Between -999999999 and 999999999 inclusive |
273+------------------+--------------------------------------------+
274| ``seconds`` | Between 0 and 86399 inclusive |
275+------------------+--------------------------------------------+
276| ``microseconds`` | Between 0 and 999999 inclusive |
277+------------------+--------------------------------------------+
278
279Supported operations:
280
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000281.. XXX this table is too wide!
Georg Brandl116aa622007-08-15 14:28:22 +0000282
283+--------------------------------+-----------------------------------------------+
284| Operation | Result |
285+================================+===============================================+
286| ``t1 = t2 + t3`` | Sum of *t2* and *t3*. Afterwards *t1*-*t2* == |
287| | *t3* and *t1*-*t3* == *t2* are true. (1) |
288+--------------------------------+-----------------------------------------------+
289| ``t1 = t2 - t3`` | Difference of *t2* and *t3*. Afterwards *t1* |
290| | == *t2* - *t3* and *t2* == *t1* + *t3* are |
Farhaan Bukhsh5b6e49a2018-07-05 00:12:05 +0530291| | true. (1)(6) |
Georg Brandl116aa622007-08-15 14:28:22 +0000292+--------------------------------+-----------------------------------------------+
Georg Brandl5c106642007-11-29 17:41:05 +0000293| ``t1 = t2 * i or t1 = i * t2`` | Delta multiplied by an integer. |
Georg Brandl116aa622007-08-15 14:28:22 +0000294| | Afterwards *t1* // i == *t2* is true, |
295| | provided ``i != 0``. |
296+--------------------------------+-----------------------------------------------+
297| | In general, *t1* \* i == *t1* \* (i-1) + *t1* |
298| | is true. (1) |
299+--------------------------------+-----------------------------------------------+
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000300| ``t1 = t2 * f or t1 = f * t2`` | Delta multiplied by a float. The result is |
301| | rounded to the nearest multiple of |
302| | timedelta.resolution using round-half-to-even.|
303+--------------------------------+-----------------------------------------------+
Yasser Af40b4a02019-03-15 23:56:58 -0400304| ``f = t2 / t3`` | Division (3) of overall duration *t2* by |
305| | interval unit *t3*. Returns a :class:`float` |
306| | object. |
Mark Dickinson7c186e22010-04-20 22:32:49 +0000307+--------------------------------+-----------------------------------------------+
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000308| ``t1 = t2 / f or t1 = t2 / i`` | Delta divided by a float or an int. The result|
309| | is rounded to the nearest multiple of |
310| | timedelta.resolution using round-half-to-even.|
311+--------------------------------+-----------------------------------------------+
Mark Dickinson7c186e22010-04-20 22:32:49 +0000312| ``t1 = t2 // i`` or | The floor is computed and the remainder (if |
Brad3fb13632019-09-11 05:19:05 -0400313| ``t1 = t2 // t3`` | any) is thrown away. In the second case, an |
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000314| | integer is returned. (3) |
Mark Dickinson7c186e22010-04-20 22:32:49 +0000315+--------------------------------+-----------------------------------------------+
316| ``t1 = t2 % t3`` | The remainder is computed as a |
317| | :class:`timedelta` object. (3) |
318+--------------------------------+-----------------------------------------------+
319| ``q, r = divmod(t1, t2)`` | Computes the quotient and the remainder: |
320| | ``q = t1 // t2`` (3) and ``r = t1 % t2``. |
321| | q is an integer and r is a :class:`timedelta` |
322| | object. |
Georg Brandl116aa622007-08-15 14:28:22 +0000323+--------------------------------+-----------------------------------------------+
324| ``+t1`` | Returns a :class:`timedelta` object with the |
325| | same value. (2) |
326+--------------------------------+-----------------------------------------------+
Serhiy Storchaka3f819ca2018-10-31 02:26:06 +0200327| ``-t1`` | equivalent to |
328| | :class:`timedelta`\ (-*t1.days*, |
329| | -*t1.seconds*, -*t1.microseconds*), |
330| | and to *t1*\* -1. (1)(4) |
Georg Brandl116aa622007-08-15 14:28:22 +0000331+--------------------------------+-----------------------------------------------+
Brad3fb13632019-09-11 05:19:05 -0400332| ``abs(t)`` | equivalent to +\ *t* when ``t.days >= 0``, |
333| | and to -*t* when ``t.days < 0``. (2) |
Georg Brandl116aa622007-08-15 14:28:22 +0000334+--------------------------------+-----------------------------------------------+
Georg Brandlf55c3152010-07-31 11:40:07 +0000335| ``str(t)`` | Returns a string in the form |
336| | ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D |
337| | is negative for negative ``t``. (5) |
338+--------------------------------+-----------------------------------------------+
Utkarsh Upadhyaycc5a65c2017-07-25 23:51:33 +0200339| ``repr(t)`` | Returns a string representation of the |
340| | :class:`timedelta` object as a constructor |
341| | call with canonical attribute values. |
Georg Brandlf55c3152010-07-31 11:40:07 +0000342+--------------------------------+-----------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000343
Utkarsh Upadhyaycc5a65c2017-07-25 23:51:33 +0200344
Georg Brandl116aa622007-08-15 14:28:22 +0000345Notes:
346
347(1)
Brad3fb13632019-09-11 05:19:05 -0400348 This is exact but may overflow.
Georg Brandl116aa622007-08-15 14:28:22 +0000349
350(2)
Brad3fb13632019-09-11 05:19:05 -0400351 This is exact and cannot overflow.
Georg Brandl116aa622007-08-15 14:28:22 +0000352
353(3)
354 Division by 0 raises :exc:`ZeroDivisionError`.
355
356(4)
357 -*timedelta.max* is not representable as a :class:`timedelta` object.
358
Georg Brandlf55c3152010-07-31 11:40:07 +0000359(5)
Brad3fb13632019-09-11 05:19:05 -0400360 String representations of :class:`timedelta` objects are normalized
361 similarly to their internal representation. This leads to somewhat
362 unusual results for negative timedeltas. For example::
Georg Brandlf55c3152010-07-31 11:40:07 +0000363
Brad3fb13632019-09-11 05:19:05 -0400364 >>> timedelta(hours=-5)
365 datetime.timedelta(days=-1, seconds=68400)
366 >>> print(_)
367 -1 day, 19:00:00
Georg Brandlf55c3152010-07-31 11:40:07 +0000368
Farhaan Bukhsh5b6e49a2018-07-05 00:12:05 +0530369(6)
370 The expression ``t2 - t3`` will always be equal to the expression ``t2 + (-t3)`` except
371 when t3 is equal to ``timedelta.max``; in that case the former will produce a result
372 while the latter will overflow.
373
Brad3fb13632019-09-11 05:19:05 -0400374In addition to the operations listed above, :class:`timedelta` objects support
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300375certain additions and subtractions with :class:`date` and :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +0000376objects (see below).
377
Georg Brandl67b21b72010-08-17 15:07:14 +0000378.. versionchanged:: 3.2
379 Floor division and true division of a :class:`timedelta` object by another
380 :class:`timedelta` object are now supported, as are remainder operations and
Brad3fb13632019-09-11 05:19:05 -0400381 the :func:`divmod` function. True division and multiplication of a
Georg Brandl67b21b72010-08-17 15:07:14 +0000382 :class:`timedelta` object by a :class:`float` object are now supported.
Mark Dickinson7c186e22010-04-20 22:32:49 +0000383
384
Brad3fb13632019-09-11 05:19:05 -0400385Comparisons of :class:`timedelta` objects are supported, with some caveats.
Georg Brandl116aa622007-08-15 14:28:22 +0000386
Brad3fb13632019-09-11 05:19:05 -0400387The comparisons ``==`` or ``!=`` *always* return a :class:`bool`, no matter
388the type of the compared object::
389
390 >>> from datetime import timedelta
391 >>> delta1 = timedelta(seconds=57)
392 >>> delta2 = timedelta(hours=25, seconds=2)
393 >>> delta2 != delta1
394 True
395 >>> delta2 == 5
396 False
397
398For all other comparisons (such as ``<`` and ``>``), when a :class:`timedelta`
399object is compared to an object of a different type, :exc:`TypeError`
400is raised::
401
402 >>> delta2 > delta1
403 True
404 >>> delta2 > 5
405 Traceback (most recent call last):
406 File "<stdin>", line 1, in <module>
407 TypeError: '>' not supported between instances of 'datetime.timedelta' and 'int'
408
409In Boolean contexts, a :class:`timedelta` object is
Georg Brandl116aa622007-08-15 14:28:22 +0000410considered to be true if and only if it isn't equal to ``timedelta(0)``.
411
Antoine Pitroube6859d2009-11-25 23:02:32 +0000412Instance methods:
413
414.. method:: timedelta.total_seconds()
415
416 Return the total number of seconds contained in the duration. Equivalent to
Yasser Af40b4a02019-03-15 23:56:58 -0400417 ``td / timedelta(seconds=1)``. For interval units other than seconds, use the
418 division form directly (e.g. ``td / timedelta(microseconds=1)``).
Mark Dickinson0381e3f2010-05-08 14:35:02 +0000419
420 Note that for very large time intervals (greater than 270 years on
421 most platforms) this method will lose microsecond accuracy.
Antoine Pitroube6859d2009-11-25 23:02:32 +0000422
423 .. versionadded:: 3.2
424
Brad3fb13632019-09-11 05:19:05 -0400425Examples of usage: :class:`timedelta`
426^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Antoine Pitroube6859d2009-11-25 23:02:32 +0000427
Brad3fb13632019-09-11 05:19:05 -0400428An additional example of normalization::
Georg Brandl48310cd2009-01-03 21:18:54 +0000429
Brad3fb13632019-09-11 05:19:05 -0400430 >>> # Components of another_year add up to exactly 365 days
Christian Heimes895627f2007-12-08 17:28:33 +0000431 >>> from datetime import timedelta
432 >>> year = timedelta(days=365)
Georg Brandl48310cd2009-01-03 21:18:54 +0000433 >>> another_year = timedelta(weeks=40, days=84, hours=23,
Brad3fb13632019-09-11 05:19:05 -0400434 ... minutes=50, seconds=600)
Christian Heimes895627f2007-12-08 17:28:33 +0000435 >>> year == another_year
436 True
Brad3fb13632019-09-11 05:19:05 -0400437 >>> year.total_seconds()
438 31536000.0
439
440Examples of :class:`timedelta` arithmetic::
441
442 >>> from datetime import timedelta
443 >>> year = timedelta(days=365)
Christian Heimes895627f2007-12-08 17:28:33 +0000444 >>> ten_years = 10 * year
Brad3fb13632019-09-11 05:19:05 -0400445 >>> ten_years
446 datetime.timedelta(days=3650)
447 >>> ten_years.days // 365
448 10
Christian Heimes895627f2007-12-08 17:28:33 +0000449 >>> nine_years = ten_years - year
Brad3fb13632019-09-11 05:19:05 -0400450 >>> nine_years
451 datetime.timedelta(days=3285)
delirious-lettucec7b3f0f2017-05-18 19:01:00 -0600452 >>> three_years = nine_years // 3
Christian Heimes895627f2007-12-08 17:28:33 +0000453 >>> three_years, three_years.days // 365
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +0200454 (datetime.timedelta(days=1095), 3)
Georg Brandl116aa622007-08-15 14:28:22 +0000455
456.. _datetime-date:
457
458:class:`date` Objects
459---------------------
460
461A :class:`date` object represents a date (year, month and day) in an idealized
462calendar, the current Gregorian calendar indefinitely extended in both
Brad3fb13632019-09-11 05:19:05 -0400463directions.
Georg Brandl116aa622007-08-15 14:28:22 +0000464
Brad3fb13632019-09-11 05:19:05 -0400465January 1 of year 1 is called day number 1, January 2 of year 1 is
466called day number 2, and so on. [#]_
Georg Brandl116aa622007-08-15 14:28:22 +0000467
468.. class:: date(year, month, day)
469
Brad3fb13632019-09-11 05:19:05 -0400470 All arguments are required. Arguments must be integers, in the following
Georg Brandl116aa622007-08-15 14:28:22 +0000471 ranges:
472
473 * ``MINYEAR <= year <= MAXYEAR``
474 * ``1 <= month <= 12``
475 * ``1 <= day <= number of days in the given month and year``
476
477 If an argument outside those ranges is given, :exc:`ValueError` is raised.
478
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000479
Georg Brandl116aa622007-08-15 14:28:22 +0000480Other constructors, all class methods:
481
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000482.. classmethod:: date.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000483
Brad3fb13632019-09-11 05:19:05 -0400484 Return the current local date.
Georg Brandl116aa622007-08-15 14:28:22 +0000485
Brad3fb13632019-09-11 05:19:05 -0400486 This is equivalent to ``date.fromtimestamp(time.time())``.
Georg Brandl116aa622007-08-15 14:28:22 +0000487
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000488.. classmethod:: date.fromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000489
Brad3fb13632019-09-11 05:19:05 -0400490 Return the local date corresponding to the POSIX timestamp, such as is
491 returned by :func:`time.time`.
492
493 This may raise :exc:`OverflowError`, if the timestamp is out
494 of the range of values supported by the platform C :c:func:`localtime`
495 function, and :exc:`OSError` on :c:func:`localtime` failure.
496 It's common for this to be restricted to years from 1970 through 2038. Note
Georg Brandl116aa622007-08-15 14:28:22 +0000497 that on non-POSIX systems that include leap seconds in their notion of a
498 timestamp, leap seconds are ignored by :meth:`fromtimestamp`.
499
Victor Stinner5d272cc2012-03-13 13:35:55 +0100500 .. versionchanged:: 3.3
501 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
502 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100503 :c:func:`localtime` function. Raise :exc:`OSError` instead of
504 :exc:`ValueError` on :c:func:`localtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100505
Georg Brandl116aa622007-08-15 14:28:22 +0000506
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000507.. classmethod:: date.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000508
Brad3fb13632019-09-11 05:19:05 -0400509 Return the date corresponding to the proleptic Gregorian ordinal, where
510 January 1 of year 1 has ordinal 1.
511
512 :exc:`ValueError` is raised unless ``1 <= ordinal <=
513 date.max.toordinal()``. For any date *d*,
514 ``date.fromordinal(d.toordinal()) == d``.
Georg Brandl116aa622007-08-15 14:28:22 +0000515
Georg Brandl116aa622007-08-15 14:28:22 +0000516
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500517.. classmethod:: date.fromisoformat(date_string)
518
Brad3fb13632019-09-11 05:19:05 -0400519 Return a :class:`date` corresponding to a *date_string* given in the format
520 ``YYYY-MM-DD``::
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500521
Brad3fb13632019-09-11 05:19:05 -0400522 >>> from datetime import date
523 >>> date.fromisoformat('2019-12-04')
524 datetime.date(2019, 12, 4)
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500525
Brad3fb13632019-09-11 05:19:05 -0400526 This is the inverse of :meth:`date.isoformat`. It only supports the format
527 ``YYYY-MM-DD``.
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500528
Brad3fb13632019-09-11 05:19:05 -0400529 .. versionadded:: 3.7
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500530
531
Paul Ganssle88c09372019-04-29 09:22:03 -0400532.. classmethod:: date.fromisocalendar(year, week, day)
533
534 Return a :class:`date` corresponding to the ISO calendar date specified by
535 year, week and day. This is the inverse of the function :meth:`date.isocalendar`.
536
537 .. versionadded:: 3.8
538
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500539
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000540Class attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000541
542.. attribute:: date.min
543
544 The earliest representable date, ``date(MINYEAR, 1, 1)``.
545
546
547.. attribute:: date.max
548
549 The latest representable date, ``date(MAXYEAR, 12, 31)``.
550
551
552.. attribute:: date.resolution
553
554 The smallest possible difference between non-equal date objects,
555 ``timedelta(days=1)``.
556
Georg Brandl116aa622007-08-15 14:28:22 +0000557
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000558Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000559
560.. attribute:: date.year
561
562 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
563
564
565.. attribute:: date.month
566
567 Between 1 and 12 inclusive.
568
569
570.. attribute:: date.day
571
572 Between 1 and the number of days in the given month of the given year.
573
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000574
Georg Brandl116aa622007-08-15 14:28:22 +0000575Supported operations:
576
577+-------------------------------+----------------------------------------------+
578| Operation | Result |
579+===============================+==============================================+
580| ``date2 = date1 + timedelta`` | *date2* is ``timedelta.days`` days removed |
Brad3fb13632019-09-11 05:19:05 -0400581| | from *date1*. (1) |
Georg Brandl116aa622007-08-15 14:28:22 +0000582+-------------------------------+----------------------------------------------+
583| ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 + |
584| | timedelta == date1``. (2) |
585+-------------------------------+----------------------------------------------+
586| ``timedelta = date1 - date2`` | \(3) |
587+-------------------------------+----------------------------------------------+
588| ``date1 < date2`` | *date1* is considered less than *date2* when |
589| | *date1* precedes *date2* in time. (4) |
590+-------------------------------+----------------------------------------------+
591
592Notes:
593
594(1)
595 *date2* is moved forward in time if ``timedelta.days > 0``, or backward if
Brad3fb13632019-09-11 05:19:05 -0400596 ``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``.
Georg Brandl116aa622007-08-15 14:28:22 +0000597 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
598 :exc:`OverflowError` is raised if ``date2.year`` would be smaller than
599 :const:`MINYEAR` or larger than :const:`MAXYEAR`.
600
601(2)
Georg Brandl116aa622007-08-15 14:28:22 +0000602 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
603
604(3)
Brad3fb13632019-09-11 05:19:05 -0400605 This is exact, and cannot overflow. timedelta.seconds and
Georg Brandl116aa622007-08-15 14:28:22 +0000606 timedelta.microseconds are 0, and date2 + timedelta == date1 after.
607
608(4)
609 In other words, ``date1 < date2`` if and only if ``date1.toordinal() <
Danish Prakash9c223792018-09-12 02:29:23 +0530610 date2.toordinal()``. Date comparison raises :exc:`TypeError` if
611 the other comparand isn't also a :class:`date` object. However,
612 ``NotImplemented`` is returned instead if the other comparand has a
Brad3fb13632019-09-11 05:19:05 -0400613 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
Georg Brandl116aa622007-08-15 14:28:22 +0000614 chance at implementing mixed-type comparison. If not, when a :class:`date`
615 object is compared to an object of a different type, :exc:`TypeError` is raised
Brad3fb13632019-09-11 05:19:05 -0400616 unless the comparison is ``==`` or ``!=``. The latter cases return
Georg Brandl116aa622007-08-15 14:28:22 +0000617 :const:`False` or :const:`True`, respectively.
618
Brad3fb13632019-09-11 05:19:05 -0400619In Boolean contexts, all :class:`date` objects are considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +0000620
621Instance methods:
622
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400623.. method:: date.replace(year=self.year, month=self.month, day=self.day)
Georg Brandl116aa622007-08-15 14:28:22 +0000624
Senthil Kumarana6bac952011-07-04 11:28:30 -0700625 Return a date with the same value, except for those parameters given new
Brad3fb13632019-09-11 05:19:05 -0400626 values by whichever keyword arguments are specified.
627
628 Example::
629
630 >>> from datetime import date
631 >>> d = date(2002, 12, 31)
632 >>> d.replace(day=26)
633 datetime.date(2002, 12, 26)
Georg Brandl116aa622007-08-15 14:28:22 +0000634
635
636.. method:: date.timetuple()
637
638 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
Brad3fb13632019-09-11 05:19:05 -0400639
640 The hours, minutes and seconds are 0, and the DST flag is -1.
641
642 ``d.timetuple()`` is equivalent to::
643
644 time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1))
645
646 where ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1``
647 is the day number within the current year starting with ``1`` for January 1st.
Georg Brandl116aa622007-08-15 14:28:22 +0000648
649
650.. method:: date.toordinal()
651
652 Return the proleptic Gregorian ordinal of the date, where January 1 of year 1
Brad3fb13632019-09-11 05:19:05 -0400653 has ordinal 1. For any :class:`date` object *d*,
Georg Brandl116aa622007-08-15 14:28:22 +0000654 ``date.fromordinal(d.toordinal()) == d``.
655
656
657.. method:: date.weekday()
658
659 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
660 For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also
661 :meth:`isoweekday`.
662
663
664.. method:: date.isoweekday()
665
666 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
667 For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also
668 :meth:`weekday`, :meth:`isocalendar`.
669
670
671.. method:: date.isocalendar()
672
673 Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
674
Brad3fb13632019-09-11 05:19:05 -0400675 The ISO calendar is a widely used variant of the Gregorian calendar. [#]_
Georg Brandl116aa622007-08-15 14:28:22 +0000676
677 The ISO year consists of 52 or 53 full weeks, and where a week starts on a
Brad3fb13632019-09-11 05:19:05 -0400678 Monday and ends on a Sunday. The first week of an ISO year is the first
Georg Brandl116aa622007-08-15 14:28:22 +0000679 (Gregorian) calendar week of a year containing a Thursday. This is called week
680 number 1, and the ISO year of that Thursday is the same as its Gregorian year.
681
682 For example, 2004 begins on a Thursday, so the first week of ISO year 2004
Brad3fb13632019-09-11 05:19:05 -0400683 begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004::
Georg Brandl116aa622007-08-15 14:28:22 +0000684
Brad3fb13632019-09-11 05:19:05 -0400685 >>> from datetime import date
686 >>> date(2003, 12, 29).isocalendar()
687 (2004, 1, 1)
688 >>> date(2004, 1, 4).isocalendar()
689 (2004, 1, 7)
Georg Brandl116aa622007-08-15 14:28:22 +0000690
691.. method:: date.isoformat()
692
Brad3fb13632019-09-11 05:19:05 -0400693 Return a string representing the date in ISO 8601 format, ``YYYY-MM-DD``::
Georg Brandl116aa622007-08-15 14:28:22 +0000694
Brad3fb13632019-09-11 05:19:05 -0400695 >>> from datetime import date
696 >>> date(2002, 12, 4).isoformat()
697 '2002-12-04'
698
699 This is the inverse of :meth:`date.fromisoformat`.
Georg Brandl116aa622007-08-15 14:28:22 +0000700
701.. method:: date.__str__()
702
703 For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``.
704
705
706.. method:: date.ctime()
707
Brad3fb13632019-09-11 05:19:05 -0400708 Return a string representing the date::
709
710 >>> from datetime import date
711 >>> date(2002, 12, 4).ctime()
712 'Wed Dec 4 00:00:00 2002'
713
714 ``d.ctime()`` is equivalent to::
715
716 time.ctime(time.mktime(d.timetuple()))
717
718 on platforms where the native C
Georg Brandl60203b42010-10-06 10:11:56 +0000719 :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +0000720 :meth:`date.ctime` does not invoke) conforms to the C standard.
721
722
723.. method:: date.strftime(format)
724
725 Return a string representing the date, controlled by an explicit format string.
David Wolever569a5fa2013-08-12 16:56:02 -0400726 Format codes referring to hours, minutes or seconds will see 0 values. For a
727 complete list of formatting directives, see
728 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000729
Georg Brandl116aa622007-08-15 14:28:22 +0000730
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300731.. method:: date.__format__(format)
732
Martin Panterd5db1472016-02-08 01:34:09 +0000733 Same as :meth:`.date.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +0000734 string for a :class:`.date` object in :ref:`formatted string
735 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -0400736 complete list of formatting directives, see
737 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300738
Brad3fb13632019-09-11 05:19:05 -0400739Examples of Usage: :class:`date`
740^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300741
Christian Heimes895627f2007-12-08 17:28:33 +0000742Example of counting days to an event::
743
744 >>> import time
745 >>> from datetime import date
746 >>> today = date.today()
747 >>> today
748 datetime.date(2007, 12, 5)
749 >>> today == date.fromtimestamp(time.time())
750 True
751 >>> my_birthday = date(today.year, 6, 24)
752 >>> if my_birthday < today:
Georg Brandl48310cd2009-01-03 21:18:54 +0000753 ... my_birthday = my_birthday.replace(year=today.year + 1)
Christian Heimes895627f2007-12-08 17:28:33 +0000754 >>> my_birthday
755 datetime.date(2008, 6, 24)
Georg Brandl48310cd2009-01-03 21:18:54 +0000756 >>> time_to_birthday = abs(my_birthday - today)
Christian Heimes895627f2007-12-08 17:28:33 +0000757 >>> time_to_birthday.days
758 202
759
Brad3fb13632019-09-11 05:19:05 -0400760More examples of working with :class:`date`:
Christian Heimesfe337bf2008-03-23 21:54:12 +0000761
762.. doctest::
Christian Heimes895627f2007-12-08 17:28:33 +0000763
764 >>> from datetime import date
765 >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
766 >>> d
767 datetime.date(2002, 3, 11)
Brad3fb13632019-09-11 05:19:05 -0400768
769 >>> # Methods related to formatting string output
770 >>> d.isoformat()
771 '2002-03-11'
772 >>> d.strftime("%d/%m/%y")
773 '11/03/02'
774 >>> d.strftime("%A %d. %B %Y")
775 'Monday 11. March 2002'
776 >>> d.ctime()
777 'Mon Mar 11 00:00:00 2002'
778 >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
779 'The day is 11, the month is March.'
780
781 >>> # Methods for to extracting 'components' under different calendars
Christian Heimes895627f2007-12-08 17:28:33 +0000782 >>> t = d.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000783 >>> for i in t: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000784 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000785 2002 # year
786 3 # month
787 11 # day
788 0
789 0
790 0
791 0 # weekday (0 = Monday)
792 70 # 70th day in the year
793 -1
794 >>> ic = d.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000795 >>> for i in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000796 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000797 2002 # ISO year
798 11 # ISO week number
799 1 # ISO day number ( 1 = Monday )
Brad3fb13632019-09-11 05:19:05 -0400800
801 >>> # A date object is immutable; all operations produce a new object
802 >>> d.replace(year=2005)
803 datetime.date(2005, 3, 11)
Christian Heimes895627f2007-12-08 17:28:33 +0000804
Georg Brandl116aa622007-08-15 14:28:22 +0000805
806.. _datetime-datetime:
807
Benjamin Petersond87dd432015-04-25 14:15:16 -0400808:class:`.datetime` Objects
809--------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000810
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300811A :class:`.datetime` object is a single object containing all the information
Brad3fb13632019-09-11 05:19:05 -0400812from a :class:`date` object and a :class:`.time` object.
813
814Like a :class:`date` object, :class:`.datetime` assumes the current Gregorian
815calendar extended in both directions; like a :class:`.time` object,
816:class:`.datetime` assumes there are exactly 3600\*24 seconds in every day.
Georg Brandl116aa622007-08-15 14:28:22 +0000817
818Constructor:
819
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400820.. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000821
Brad3fb13632019-09-11 05:19:05 -0400822 The *year*, *month* and *day* arguments are required. *tzinfo* may be ``None``, or an
823 instance of a :class:`tzinfo` subclass. The remaining arguments must be integers
Georg Brandl5c106642007-11-29 17:41:05 +0000824 in the following ranges:
Georg Brandl116aa622007-08-15 14:28:22 +0000825
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400826 * ``MINYEAR <= year <= MAXYEAR``,
827 * ``1 <= month <= 12``,
828 * ``1 <= day <= number of days in the given month and year``,
829 * ``0 <= hour < 24``,
830 * ``0 <= minute < 60``,
831 * ``0 <= second < 60``,
832 * ``0 <= microsecond < 1000000``,
833 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +0000834
835 If an argument outside those ranges is given, :exc:`ValueError` is raised.
836
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400837 .. versionadded:: 3.6
838 Added the ``fold`` argument.
839
Georg Brandl116aa622007-08-15 14:28:22 +0000840Other constructors, all class methods:
841
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000842.. classmethod:: datetime.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000843
Brad3fb13632019-09-11 05:19:05 -0400844 Return the current local datetime, with :attr:`.tzinfo` ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000845
Brad3fb13632019-09-11 05:19:05 -0400846 Equivalent to::
847
848 datetime.fromtimestamp(time.time())
849
850 See also :meth:`now`, :meth:`fromtimestamp`.
851
852 This method is functionally equivalent to :meth:`now`, but without a
853 ``tz`` parameter.
Georg Brandl116aa622007-08-15 14:28:22 +0000854
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000855.. classmethod:: datetime.now(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000856
Brad3fb13632019-09-11 05:19:05 -0400857 Return the current local date and time.
858
859 If optional argument *tz* is ``None``
Georg Brandl116aa622007-08-15 14:28:22 +0000860 or not specified, this is like :meth:`today`, but, if possible, supplies more
861 precision than can be gotten from going through a :func:`time.time` timestamp
862 (for example, this may be possible on platforms supplying the C
Georg Brandl60203b42010-10-06 10:11:56 +0000863 :c:func:`gettimeofday` function).
Georg Brandl116aa622007-08-15 14:28:22 +0000864
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100865 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass,
866 and the current date and time are converted to *tz*’s time zone.
Brad3fb13632019-09-11 05:19:05 -0400867
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100868 This function is preferred over :meth:`today` and :meth:`utcnow`.
Georg Brandl116aa622007-08-15 14:28:22 +0000869
870
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000871.. classmethod:: datetime.utcnow()
Georg Brandl116aa622007-08-15 14:28:22 +0000872
Brad3fb13632019-09-11 05:19:05 -0400873 Return the current UTC date and time, with :attr:`.tzinfo` ``None``.
874
875 This is like :meth:`now`, but returns the current UTC date and time, as a naive
876 :class:`.datetime` object. An aware current UTC datetime can be obtained by
877 calling ``datetime.now(timezone.utc)``. See also :meth:`now`.
Georg Brandl116aa622007-08-15 14:28:22 +0000878
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100879 .. warning::
880
881 Because naive ``datetime`` objects are treated by many ``datetime`` methods
882 as local times, it is preferred to use aware datetimes to represent times
883 in UTC. As such, the recommended way to create an object representing the
Ofek Lev575d0b42019-12-01 00:44:21 -0500884 current time in UTC is by calling ``datetime.now(timezone.utc)``.
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100885
886
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000887.. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000888
889 Return the local date and time corresponding to the POSIX timestamp, such as is
890 returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
891 specified, the timestamp is converted to the platform's local date and time, and
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300892 the returned :class:`.datetime` object is naive.
Georg Brandl116aa622007-08-15 14:28:22 +0000893
Martin Panter16c7cfd2016-04-01 21:48:24 +0000894 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
Brad3fb13632019-09-11 05:19:05 -0400895 timestamp is converted to *tz*’s time zone.
896
Victor Stinnerecc6e662012-03-14 00:39:29 +0100897 :meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is out of
Georg Brandl60203b42010-10-06 10:11:56 +0000898 the range of values supported by the platform C :c:func:`localtime` or
Victor Stinnerecc6e662012-03-14 00:39:29 +0100899 :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or
900 :c:func:`gmtime` failure.
901 It's common for this to be restricted to years in
Georg Brandl116aa622007-08-15 14:28:22 +0000902 1970 through 2038. Note that on non-POSIX systems that include leap seconds in
903 their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`,
904 and then it's possible to have two timestamps differing by a second that yield
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100905 identical :class:`.datetime` objects. This method is preferred over
906 :meth:`utcfromtimestamp`.
Georg Brandl116aa622007-08-15 14:28:22 +0000907
Victor Stinner5d272cc2012-03-13 13:35:55 +0100908 .. versionchanged:: 3.3
909 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
910 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100911 :c:func:`localtime` or :c:func:`gmtime` functions. Raise :exc:`OSError`
912 instead of :exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime`
913 failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100914
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400915 .. versionchanged:: 3.6
916 :meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000917
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000918.. classmethod:: datetime.utcfromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000919
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300920 Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with
Brad3fb13632019-09-11 05:19:05 -0400921 :attr:`.tzinfo` ``None``. (The resulting object is naive.)
922
923 This may raise :exc:`OverflowError`, if the timestamp is
Victor Stinnerecc6e662012-03-14 00:39:29 +0100924 out of the range of values supported by the platform C :c:func:`gmtime` function,
925 and :exc:`OSError` on :c:func:`gmtime` failure.
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500926 It's common for this to be restricted to years in 1970 through 2038.
Georg Brandl116aa622007-08-15 14:28:22 +0000927
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500928 To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`::
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400929
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500930 datetime.fromtimestamp(timestamp, timezone.utc)
931
932 On the POSIX compliant platforms, it is equivalent to the following
933 expression::
934
935 datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
936
937 except the latter formula always supports the full years range: between
938 :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400939
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100940 .. warning::
941
942 Because naive ``datetime`` objects are treated by many ``datetime`` methods
943 as local times, it is preferred to use aware datetimes to represent times
944 in UTC. As such, the recommended way to create an object representing a
Ofek Lev575d0b42019-12-01 00:44:21 -0500945 specific timestamp in UTC is by calling
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100946 ``datetime.fromtimestamp(timestamp, tz=timezone.utc)``.
947
Victor Stinner5d272cc2012-03-13 13:35:55 +0100948 .. versionchanged:: 3.3
949 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
950 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100951 :c:func:`gmtime` function. Raise :exc:`OSError` instead of
952 :exc:`ValueError` on :c:func:`gmtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100953
Georg Brandl116aa622007-08-15 14:28:22 +0000954
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000955.. classmethod:: datetime.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000956
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300957 Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal,
Georg Brandl116aa622007-08-15 14:28:22 +0000958 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
Brad3fb13632019-09-11 05:19:05 -0400959 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and
Martin Panter16c7cfd2016-04-01 21:48:24 +0000960 microsecond of the result are all 0, and :attr:`.tzinfo` is ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000961
962
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400963.. classmethod:: datetime.combine(date, time, tzinfo=self.tzinfo)
Georg Brandl116aa622007-08-15 14:28:22 +0000964
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300965 Return a new :class:`.datetime` object whose date components are equal to the
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400966 given :class:`date` object's, and whose time components
Brad3fb13632019-09-11 05:19:05 -0400967 are equal to the given :class:`.time` object's. If the *tzinfo*
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400968 argument is provided, its value is used to set the :attr:`.tzinfo` attribute
969 of the result, otherwise the :attr:`~.time.tzinfo` attribute of the *time* argument
970 is used.
971
972 For any :class:`.datetime` object *d*,
Brad3fb13632019-09-11 05:19:05 -0400973 ``d == datetime.combine(d.date(), d.time(), d.tzinfo)``. If date is a
Martin Panter16c7cfd2016-04-01 21:48:24 +0000974 :class:`.datetime` object, its time components and :attr:`.tzinfo` attributes
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800975 are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000976
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400977 .. versionchanged:: 3.6
978 Added the *tzinfo* argument.
979
Georg Brandl116aa622007-08-15 14:28:22 +0000980
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500981.. classmethod:: datetime.fromisoformat(date_string)
982
Brad3fb13632019-09-11 05:19:05 -0400983 Return a :class:`.datetime` corresponding to a *date_string* in one of the
984 formats emitted by :meth:`date.isoformat` and :meth:`datetime.isoformat`.
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500985
Brad3fb13632019-09-11 05:19:05 -0400986 Specifically, this function supports strings in the format:
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500987
Brad3fb13632019-09-11 05:19:05 -0400988 .. code-block:: none
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500989
Brad3fb13632019-09-11 05:19:05 -0400990 YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500991
Brad3fb13632019-09-11 05:19:05 -0400992 where ``*`` can match any single character.
993
994 .. caution::
995
996 This does *not* support parsing arbitrary ISO 8601 strings - it is only intended
997 as the inverse operation of :meth:`datetime.isoformat`. A more full-featured
998 ISO 8601 parser, ``dateutil.parser.isoparse`` is available in the third-party package
999 `dateutil <https://dateutil.readthedocs.io/en/stable/parser.html#dateutil.parser.isoparse>`__.
Brad3fb13632019-09-11 05:19:05 -04001000
1001 Examples::
1002
1003 >>> from datetime import datetime
1004 >>> datetime.fromisoformat('2011-11-04')
1005 datetime.datetime(2011, 11, 4, 0, 0)
1006 >>> datetime.fromisoformat('2011-11-04T00:05:23')
1007 datetime.datetime(2011, 11, 4, 0, 5, 23)
1008 >>> datetime.fromisoformat('2011-11-04 00:05:23.283')
1009 datetime.datetime(2011, 11, 4, 0, 5, 23, 283000)
1010 >>> datetime.fromisoformat('2011-11-04 00:05:23.283+00:00')
1011 datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc)
1012 >>> datetime.fromisoformat('2011-11-04T00:05:23+04:00') # doctest: +NORMALIZE_WHITESPACE
1013 datetime.datetime(2011, 11, 4, 0, 5, 23,
1014 tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
1015
1016 .. versionadded:: 3.7
Paul Ganssle88c09372019-04-29 09:22:03 -04001017
1018.. classmethod:: datetime.fromisocalendar(year, week, day)
1019
Brad3fb13632019-09-11 05:19:05 -04001020 Return a :class:`.datetime` corresponding to the ISO calendar date specified
Paul Ganssle88c09372019-04-29 09:22:03 -04001021 by year, week and day. The non-date components of the datetime are populated
1022 with their normal default values. This is the inverse of the function
1023 :meth:`datetime.isocalendar`.
1024
1025 .. versionadded:: 3.8
1026
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001027.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +00001028
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001029 Return a :class:`.datetime` corresponding to *date_string*, parsed according to
Brad3fb13632019-09-11 05:19:05 -04001030 *format*.
1031
1032 This is equivalent to::
1033
1034 datetime(*(time.strptime(date_string, format)[0:6]))
1035
1036 :exc:`ValueError` is raised if the date_string and format
Georg Brandl116aa622007-08-15 14:28:22 +00001037 can't be parsed by :func:`time.strptime` or if it returns a value which isn't a
David Wolever569a5fa2013-08-12 16:56:02 -04001038 time tuple. For a complete list of formatting directives, see
1039 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001040
Georg Brandl116aa622007-08-15 14:28:22 +00001041
Georg Brandl116aa622007-08-15 14:28:22 +00001042
1043Class attributes:
1044
Georg Brandl116aa622007-08-15 14:28:22 +00001045.. attribute:: datetime.min
1046
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001047 The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1,
Georg Brandl116aa622007-08-15 14:28:22 +00001048 tzinfo=None)``.
1049
1050
1051.. attribute:: datetime.max
1052
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001053 The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
Georg Brandl116aa622007-08-15 14:28:22 +00001054 59, 999999, tzinfo=None)``.
1055
1056
1057.. attribute:: datetime.resolution
1058
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001059 The smallest possible difference between non-equal :class:`.datetime` objects,
Georg Brandl116aa622007-08-15 14:28:22 +00001060 ``timedelta(microseconds=1)``.
1061
Georg Brandl116aa622007-08-15 14:28:22 +00001062
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001063Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001064
1065.. attribute:: datetime.year
1066
1067 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
1068
1069
1070.. attribute:: datetime.month
1071
1072 Between 1 and 12 inclusive.
1073
1074
1075.. attribute:: datetime.day
1076
1077 Between 1 and the number of days in the given month of the given year.
1078
1079
1080.. attribute:: datetime.hour
1081
1082 In ``range(24)``.
1083
1084
1085.. attribute:: datetime.minute
1086
1087 In ``range(60)``.
1088
1089
1090.. attribute:: datetime.second
1091
1092 In ``range(60)``.
1093
1094
1095.. attribute:: datetime.microsecond
1096
1097 In ``range(1000000)``.
1098
1099
1100.. attribute:: datetime.tzinfo
1101
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001102 The object passed as the *tzinfo* argument to the :class:`.datetime` constructor,
Georg Brandl116aa622007-08-15 14:28:22 +00001103 or ``None`` if none was passed.
1104
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001105
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001106.. attribute:: datetime.fold
1107
Brad3fb13632019-09-11 05:19:05 -04001108 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001109 repeated interval occurs when clocks are rolled back at the end of daylight saving
1110 time or when the UTC offset for the current zone is decreased for political reasons.)
1111 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1112 time representation.
1113
1114 .. versionadded:: 3.6
1115
Georg Brandl116aa622007-08-15 14:28:22 +00001116Supported operations:
1117
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001118+---------------------------------------+--------------------------------+
1119| Operation | Result |
1120+=======================================+================================+
1121| ``datetime2 = datetime1 + timedelta`` | \(1) |
1122+---------------------------------------+--------------------------------+
1123| ``datetime2 = datetime1 - timedelta`` | \(2) |
1124+---------------------------------------+--------------------------------+
1125| ``timedelta = datetime1 - datetime2`` | \(3) |
1126+---------------------------------------+--------------------------------+
1127| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
1128| | :class:`.datetime`. (4) |
1129+---------------------------------------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +00001130
1131(1)
1132 datetime2 is a duration of timedelta removed from datetime1, moving forward in
Brad3fb13632019-09-11 05:19:05 -04001133 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Martin Panter16c7cfd2016-04-01 21:48:24 +00001134 result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and
Senthil Kumarana6bac952011-07-04 11:28:30 -07001135 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
1136 datetime2.year would be smaller than :const:`MINYEAR` or larger than
1137 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
1138 input is an aware object.
Georg Brandl116aa622007-08-15 14:28:22 +00001139
1140(2)
1141 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Martin Panter16c7cfd2016-04-01 21:48:24 +00001142 addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input
Senthil Kumarana6bac952011-07-04 11:28:30 -07001143 datetime, and no time zone adjustments are done even if the input is aware.
Georg Brandl116aa622007-08-15 14:28:22 +00001144
1145(3)
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001146 Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if
Brad3fb13632019-09-11 05:19:05 -04001147 both operands are naive, or if both are aware. If one is aware and the other is
Georg Brandl116aa622007-08-15 14:28:22 +00001148 naive, :exc:`TypeError` is raised.
1149
Martin Panter16c7cfd2016-04-01 21:48:24 +00001150 If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute,
1151 the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Brad3fb13632019-09-11 05:19:05 -04001152 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
Georg Brandl116aa622007-08-15 14:28:22 +00001153 are done in this case.
1154
Martin Panter16c7cfd2016-04-01 21:48:24 +00001155 If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
Brad3fb13632019-09-11 05:19:05 -04001156 as if *a* and *b* were first converted to naive UTC datetimes first. The
Senthil Kumarana6bac952011-07-04 11:28:30 -07001157 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
1158 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl116aa622007-08-15 14:28:22 +00001159
1160(4)
1161 *datetime1* is considered less than *datetime2* when *datetime1* precedes
1162 *datetime2* in time.
1163
Alexander Belopolsky08313822012-06-15 20:19:47 -04001164 If one comparand is naive and the other is aware, :exc:`TypeError`
Brad3fb13632019-09-11 05:19:05 -04001165 is raised if an order comparison is attempted. For equality
Alexander Belopolsky08313822012-06-15 20:19:47 -04001166 comparisons, naive instances are never equal to aware instances.
1167
Martin Panter16c7cfd2016-04-01 21:48:24 +00001168 If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
1169 common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
Brad3fb13632019-09-11 05:19:05 -04001170 compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001171 attributes, the comparands are first adjusted by subtracting their UTC
1172 offsets (obtained from ``self.utcoffset()``).
Georg Brandl116aa622007-08-15 14:28:22 +00001173
Alexander Belopolsky08313822012-06-15 20:19:47 -04001174 .. versionchanged:: 3.3
Brad3fb13632019-09-11 05:19:05 -04001175 Equality comparisons between aware and naive :class:`.datetime`
Éric Araujob0f08952012-06-24 16:22:09 -04001176 instances don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001177
Georg Brandl116aa622007-08-15 14:28:22 +00001178 .. note::
1179
1180 In order to stop comparison from falling back to the default scheme of comparing
1181 object addresses, datetime comparison normally raises :exc:`TypeError` if the
Brad3fb13632019-09-11 05:19:05 -04001182 other comparand isn't also a :class:`.datetime` object. However,
Georg Brandl116aa622007-08-15 14:28:22 +00001183 ``NotImplemented`` is returned instead if the other comparand has a
Brad3fb13632019-09-11 05:19:05 -04001184 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
1185 chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001186 object is compared to an object of a different type, :exc:`TypeError` is raised
Brad3fb13632019-09-11 05:19:05 -04001187 unless the comparison is ``==`` or ``!=``. The latter cases return
Georg Brandl116aa622007-08-15 14:28:22 +00001188 :const:`False` or :const:`True`, respectively.
1189
Georg Brandl116aa622007-08-15 14:28:22 +00001190Instance methods:
1191
Georg Brandl116aa622007-08-15 14:28:22 +00001192.. method:: datetime.date()
1193
1194 Return :class:`date` object with same year, month and day.
1195
1196
1197.. method:: datetime.time()
1198
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001199 Return :class:`.time` object with same hour, minute, second, microsecond and fold.
Brad3fb13632019-09-11 05:19:05 -04001200 :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`.
Georg Brandl116aa622007-08-15 14:28:22 +00001201
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001202 .. versionchanged:: 3.6
1203 The fold value is copied to the returned :class:`.time` object.
1204
Georg Brandl116aa622007-08-15 14:28:22 +00001205
1206.. method:: datetime.timetz()
1207
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001208 Return :class:`.time` object with same hour, minute, second, microsecond, fold, and
Brad3fb13632019-09-11 05:19:05 -04001209 tzinfo attributes. See also method :meth:`time`.
Georg Brandl116aa622007-08-15 14:28:22 +00001210
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001211 .. versionchanged:: 3.6
1212 The fold value is copied to the returned :class:`.time` object.
Georg Brandl116aa622007-08-15 14:28:22 +00001213
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001214
1215.. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \
1216 hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \
1217 tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001218
Senthil Kumarana6bac952011-07-04 11:28:30 -07001219 Return a datetime with the same attributes, except for those attributes given
Brad3fb13632019-09-11 05:19:05 -04001220 new values by whichever keyword arguments are specified. Note that
Senthil Kumarana6bac952011-07-04 11:28:30 -07001221 ``tzinfo=None`` can be specified to create a naive datetime from an aware
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001222 datetime with no conversion of date and time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001223
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001224 .. versionadded:: 3.6
1225 Added the ``fold`` argument.
1226
Georg Brandl116aa622007-08-15 14:28:22 +00001227
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001228.. method:: datetime.astimezone(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001229
Martin Panter16c7cfd2016-04-01 21:48:24 +00001230 Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*,
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001231 adjusting the date and time data so the result is the same UTC time as
Senthil Kumarana6bac952011-07-04 11:28:30 -07001232 *self*, but in *tz*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001233
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001234 If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its
Brad3fb13632019-09-11 05:19:05 -04001235 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If *self*
Alexander Belopolsky877b2322018-06-10 17:02:58 -04001236 is naive, it is presumed to represent time in the system timezone.
Georg Brandl116aa622007-08-15 14:28:22 +00001237
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001238 If called without arguments (or with ``tz=None``) the system local
Brad3fb13632019-09-11 05:19:05 -04001239 timezone is assumed for the target timezone. The ``.tzinfo`` attribute of the converted
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001240 datetime instance will be set to an instance of :class:`timezone`
1241 with the zone name and offset obtained from the OS.
1242
Georg Brandl116aa622007-08-15 14:28:22 +00001243 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001244 adjustment of date or time data is performed. Else the result is local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001245 time in the timezone *tz*, representing the same UTC time as *self*: after
1246 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have
1247 the same date and time data as ``dt - dt.utcoffset()``.
Georg Brandl116aa622007-08-15 14:28:22 +00001248
1249 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Brad3fb13632019-09-11 05:19:05 -04001250 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl116aa622007-08-15 14:28:22 +00001251 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001252 conversion of date and time data, use ``dt.replace(tzinfo=None)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001253
1254 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
1255 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
1256 Ignoring error cases, :meth:`astimezone` acts like::
1257
1258 def astimezone(self, tz):
1259 if self.tzinfo is tz:
1260 return self
1261 # Convert self to UTC, and attach the new time zone object.
1262 utc = (self - self.utcoffset()).replace(tzinfo=tz)
1263 # Convert from UTC to tz's local time.
1264 return tz.fromutc(utc)
1265
Georg Brandlee0be402012-06-26 09:14:40 +02001266 .. versionchanged:: 3.3
1267 *tz* now can be omitted.
1268
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001269 .. versionchanged:: 3.6
1270 The :meth:`astimezone` method can now be called on naive instances that
1271 are presumed to represent system local time.
1272
Georg Brandl116aa622007-08-15 14:28:22 +00001273
1274.. method:: datetime.utcoffset()
1275
Martin Panter16c7cfd2016-04-01 21:48:24 +00001276 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001277 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001278 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1279
1280 .. versionchanged:: 3.7
1281 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001282
1283
1284.. method:: datetime.dst()
1285
Martin Panter16c7cfd2016-04-01 21:48:24 +00001286 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001287 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001288 ``None`` or a :class:`timedelta` object with magnitude less than one day.
1289
1290 .. versionchanged:: 3.7
1291 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001292
1293
1294.. method:: datetime.tzname()
1295
Martin Panter16c7cfd2016-04-01 21:48:24 +00001296 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001297 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
1298 ``None`` or a string object,
1299
1300
1301.. method:: datetime.timetuple()
1302
1303 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
Brad3fb13632019-09-11 05:19:05 -04001304
1305 ``d.timetuple()`` is equivalent to::
1306
1307 time.struct_time((d.year, d.month, d.day,
1308 d.hour, d.minute, d.second,
1309 d.weekday(), yday, dst))
1310
1311 where ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1``
1312 is the day number within the current year starting with ``1`` for January
1313 1st. The :attr:`tm_isdst` flag of the result is set according to the
1314 :meth:`dst` method: :attr:`.tzinfo` is ``None`` or :meth:`dst` returns
1315 ``None``, :attr:`tm_isdst` is set to ``-1``; else if :meth:`dst` returns a
1316 non-zero value, :attr:`tm_isdst` is set to ``1``; else :attr:`tm_isdst` is
1317 set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +00001318
1319
1320.. method:: datetime.utctimetuple()
1321
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001322 If :class:`.datetime` instance *d* is naive, this is the same as
Georg Brandl116aa622007-08-15 14:28:22 +00001323 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
Brad3fb13632019-09-11 05:19:05 -04001324 ``d.dst()`` returns. DST is never in effect for a UTC time.
Georg Brandl116aa622007-08-15 14:28:22 +00001325
1326 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001327 ``d.utcoffset()``, and a :class:`time.struct_time` for the
Brad3fb13632019-09-11 05:19:05 -04001328 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001329 that an :exc:`OverflowError` may be raised if *d*.year was
1330 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +00001331 boundary.
1332
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001333 .. warning::
1334
1335 Because naive ``datetime`` objects are treated by many ``datetime`` methods
1336 as local times, it is preferred to use aware datetimes to represent times
1337 in UTC; as a result, using ``utcfromtimetuple`` may give misleading
1338 results. If you have a naive ``datetime`` representing UTC, use
1339 ``datetime.replace(tzinfo=timezone.utc)`` to make it aware, at which point
1340 you can use :meth:`.datetime.timetuple`.
Georg Brandl116aa622007-08-15 14:28:22 +00001341
1342.. method:: datetime.toordinal()
1343
Brad3fb13632019-09-11 05:19:05 -04001344 Return the proleptic Gregorian ordinal of the date. The same as
Georg Brandl116aa622007-08-15 14:28:22 +00001345 ``self.date().toordinal()``.
1346
Alexander Belopolskya4415142012-06-08 12:33:09 -04001347.. method:: datetime.timestamp()
1348
Martin Panter16c7cfd2016-04-01 21:48:24 +00001349 Return POSIX timestamp corresponding to the :class:`.datetime`
Brad3fb13632019-09-11 05:19:05 -04001350 instance. The return value is a :class:`float` similar to that
Alexander Belopolskya4415142012-06-08 12:33:09 -04001351 returned by :func:`time.time`.
1352
Martin Panter16c7cfd2016-04-01 21:48:24 +00001353 Naive :class:`.datetime` instances are assumed to represent local
Alexander Belopolskya4415142012-06-08 12:33:09 -04001354 time and this method relies on the platform C :c:func:`mktime`
Brad3fb13632019-09-11 05:19:05 -04001355 function to perform the conversion. Since :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001356 supports wider range of values than :c:func:`mktime` on many
1357 platforms, this method may raise :exc:`OverflowError` for times far
1358 in the past or far in the future.
1359
Martin Panter16c7cfd2016-04-01 21:48:24 +00001360 For aware :class:`.datetime` instances, the return value is computed
Alexander Belopolskya4415142012-06-08 12:33:09 -04001361 as::
1362
1363 (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
1364
1365 .. versionadded:: 3.3
1366
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001367 .. versionchanged:: 3.6
1368 The :meth:`timestamp` method uses the :attr:`.fold` attribute to
1369 disambiguate the times during a repeated interval.
1370
Alexander Belopolskya4415142012-06-08 12:33:09 -04001371 .. note::
1372
1373 There is no method to obtain the POSIX timestamp directly from a
Brad3fb13632019-09-11 05:19:05 -04001374 naive :class:`.datetime` instance representing UTC time. If your
Alexander Belopolskya4415142012-06-08 12:33:09 -04001375 application uses this convention and your system timezone is not
1376 set to UTC, you can obtain the POSIX timestamp by supplying
1377 ``tzinfo=timezone.utc``::
1378
1379 timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
1380
1381 or by calculating the timestamp directly::
1382
1383 timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
Georg Brandl116aa622007-08-15 14:28:22 +00001384
1385.. method:: datetime.weekday()
1386
1387 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1388 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1389
1390
1391.. method:: datetime.isoweekday()
1392
1393 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1394 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1395 :meth:`isocalendar`.
1396
1397
1398.. method:: datetime.isocalendar()
1399
Brad3fb13632019-09-11 05:19:05 -04001400 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
Georg Brandl116aa622007-08-15 14:28:22 +00001401 ``self.date().isocalendar()``.
1402
1403
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001404.. method:: datetime.isoformat(sep='T', timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001405
Brad3fb13632019-09-11 05:19:05 -04001406 Return a string representing the date and time in ISO 8601 format:
1407
1408 - ``YYYY-MM-DDTHH:MM:SS.ffffff``, if :attr:`microsecond` is not 0
1409 - ``YYYY-MM-DDTHH:MM:SS``, if :attr:`microsecond` is 0
Georg Brandl116aa622007-08-15 14:28:22 +00001410
Christophe Nanteuil92878822018-10-06 00:57:02 +02001411 If :meth:`utcoffset` does not return ``None``, a string is
1412 appended, giving the UTC offset:
Brad3fb13632019-09-11 05:19:05 -04001413
1414 - ``YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond`
1415 is not 0
1416 - ``YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` is 0
1417
1418 Examples::
1419
1420 >>> from datetime import datetime, timezone
1421 >>> datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat()
1422 '2019-05-18T15:17:08.132263'
1423 >>> datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat()
1424 '2019-05-18T15:17:00+00:00'
Georg Brandl116aa622007-08-15 14:28:22 +00001425
1426 The optional argument *sep* (default ``'T'``) is a one-character separator,
Brad3fb13632019-09-11 05:19:05 -04001427 placed between the date and time portions of the result. For example::
Georg Brandl116aa622007-08-15 14:28:22 +00001428
1429 >>> from datetime import tzinfo, timedelta, datetime
1430 >>> class TZ(tzinfo):
Brad3fb13632019-09-11 05:19:05 -04001431 ... """A time zone with an arbitrary, constant -06:39 offset."""
1432 ... def utcoffset(self, dt):
1433 ... return timedelta(hours=-6, minutes=-39)
Georg Brandl116aa622007-08-15 14:28:22 +00001434 ...
1435 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1436 '2002-12-25 00:00:00-06:39'
Brad3fb13632019-09-11 05:19:05 -04001437 >>> datetime(2009, 11, 27, microsecond=100, tzinfo=TZ()).isoformat()
1438 '2009-11-27T00:00:00.000100-06:39'
Georg Brandl116aa622007-08-15 14:28:22 +00001439
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001440 The optional argument *timespec* specifies the number of additional
1441 components of the time to include (the default is ``'auto'``).
1442 It can be one of the following:
1443
1444 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1445 same as ``'microseconds'`` otherwise.
Brad3fb13632019-09-11 05:19:05 -04001446 - ``'hours'``: Include the :attr:`hour` in the two-digit ``HH`` format.
1447 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in ``HH:MM`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001448 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
Brad3fb13632019-09-11 05:19:05 -04001449 in ``HH:MM:SS`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001450 - ``'milliseconds'``: Include full time, but truncate fractional second
Brad3fb13632019-09-11 05:19:05 -04001451 part to milliseconds. ``HH:MM:SS.sss`` format.
1452 - ``'microseconds'``: Include full time in ``HH:MM:SS.ffffff`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001453
1454 .. note::
1455
1456 Excluded time components are truncated, not rounded.
1457
Brad3fb13632019-09-11 05:19:05 -04001458 :exc:`ValueError` will be raised on an invalid *timespec* argument::
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001459
1460
1461 >>> from datetime import datetime
Marco Buttu909a6f62017-03-18 17:59:33 +01001462 >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001463 '2002-12-25T00:00'
1464 >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
1465 >>> dt.isoformat(timespec='microseconds')
1466 '2015-01-01T12:30:59.000000'
1467
1468 .. versionadded:: 3.6
1469 Added the *timespec* argument.
1470
Georg Brandl116aa622007-08-15 14:28:22 +00001471
1472.. method:: datetime.__str__()
1473
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001474 For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to
Georg Brandl116aa622007-08-15 14:28:22 +00001475 ``d.isoformat(' ')``.
1476
1477
1478.. method:: datetime.ctime()
1479
Brad3fb13632019-09-11 05:19:05 -04001480 Return a string representing the date and time::
Georg Brandl116aa622007-08-15 14:28:22 +00001481
Brad3fb13632019-09-11 05:19:05 -04001482 >>> from datetime import datetime
1483 >>> datetime(2002, 12, 4, 20, 30, 40).ctime()
1484 'Wed Dec 4 20:30:40 2002'
1485
1486 The output string will *not* include time zone information, regardless
1487 of whether the input is aware or naive.
1488
1489 ``d.ctime()`` is equivalent to::
1490
1491 time.ctime(time.mktime(d.timetuple()))
1492
1493 on platforms where the native C :c:func:`ctime` function
1494 (which :func:`time.ctime` invokes, but which
1495 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
Georg Brandl116aa622007-08-15 14:28:22 +00001496
1497.. method:: datetime.strftime(format)
1498
1499 Return a string representing the date and time, controlled by an explicit format
Brad3fb13632019-09-11 05:19:05 -04001500 string. For a complete list of formatting directives, see
David Wolever569a5fa2013-08-12 16:56:02 -04001501 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001502
Georg Brandl116aa622007-08-15 14:28:22 +00001503
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001504.. method:: datetime.__format__(format)
1505
Brad3fb13632019-09-11 05:19:05 -04001506 Same as :meth:`.datetime.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +00001507 string for a :class:`.datetime` object in :ref:`formatted string
Brad3fb13632019-09-11 05:19:05 -04001508 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001509 complete list of formatting directives, see
1510 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001511
Brad3fb13632019-09-11 05:19:05 -04001512Examples of Usage: :class:`.datetime`
1513^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001514
Brad3fb13632019-09-11 05:19:05 -04001515Examples of working with :class:`~datetime.datetime` objects:
Christian Heimesfe337bf2008-03-23 21:54:12 +00001516
1517.. doctest::
1518
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001519 >>> from datetime import datetime, date, time, timezone
Brad3fb13632019-09-11 05:19:05 -04001520
Christian Heimes895627f2007-12-08 17:28:33 +00001521 >>> # Using datetime.combine()
1522 >>> d = date(2005, 7, 14)
1523 >>> t = time(12, 30)
1524 >>> datetime.combine(d, t)
1525 datetime.datetime(2005, 7, 14, 12, 30)
Brad3fb13632019-09-11 05:19:05 -04001526
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001527 >>> # Using datetime.now()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001528 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001529 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001530 >>> datetime.now(timezone.utc) # doctest: +SKIP
1531 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060, tzinfo=datetime.timezone.utc)
Brad3fb13632019-09-11 05:19:05 -04001532
Christian Heimes895627f2007-12-08 17:28:33 +00001533 >>> # Using datetime.strptime()
1534 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1535 >>> dt
1536 datetime.datetime(2006, 11, 21, 16, 30)
Brad3fb13632019-09-11 05:19:05 -04001537
Christian Heimes895627f2007-12-08 17:28:33 +00001538 >>> # Using datetime.timetuple() to get tuple of all attributes
1539 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001540 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001541 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001542 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001543 2006 # year
1544 11 # month
1545 21 # day
1546 16 # hour
1547 30 # minute
1548 0 # second
1549 1 # weekday (0 = Monday)
1550 325 # number of days since 1st January
1551 -1 # dst - method tzinfo.dst() returned None
Brad3fb13632019-09-11 05:19:05 -04001552
Christian Heimes895627f2007-12-08 17:28:33 +00001553 >>> # Date in ISO format
1554 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001555 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001556 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001557 ...
1558 2006 # ISO year
1559 47 # ISO week
1560 2 # ISO weekday
Brad3fb13632019-09-11 05:19:05 -04001561
1562 >>> # Formatting a datetime
Christian Heimes895627f2007-12-08 17:28:33 +00001563 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1564 'Tuesday, 21. November 2006 04:30PM'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001565 >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
1566 'The day is 21, the month is November, the time is 04:30PM.'
Christian Heimes895627f2007-12-08 17:28:33 +00001567
Brad3fb13632019-09-11 05:19:05 -04001568The example below defines a :class:`tzinfo` subclass capturing time zone
1569information for Kabul, Afghanistan, which used +4 UTC until 1945
1570and then +4:30 UTC thereafter::
Christian Heimes895627f2007-12-08 17:28:33 +00001571
Brad3fb13632019-09-11 05:19:05 -04001572 from datetime import timedelta, datetime, tzinfo, timezone
Georg Brandl48310cd2009-01-03 21:18:54 +00001573
Brad3fb13632019-09-11 05:19:05 -04001574 class KabulTz(tzinfo):
1575 # Kabul used +4 until 1945, when they moved to +4:30
1576 UTC_MOVE_DATE = datetime(1944, 12, 31, 20, tzinfo=timezone.utc)
Christian Heimes895627f2007-12-08 17:28:33 +00001577
Brad3fb13632019-09-11 05:19:05 -04001578 def utcoffset(self, dt):
1579 if dt.year < 1945:
1580 return timedelta(hours=4)
1581 elif (1945, 1, 1, 0, 0) <= dt.timetuple()[:5] < (1945, 1, 1, 0, 30):
1582 # An ambiguous ("imaginary") half-hour range representing
1583 # a 'fold' in time due to the shift from +4 to +4:30.
1584 # If dt falls in the imaginary range, use fold to decide how
1585 # to resolve. See PEP495.
1586 return timedelta(hours=4, minutes=(30 if dt.fold else 0))
1587 else:
1588 return timedelta(hours=4, minutes=30)
1589
1590 def fromutc(self, dt):
1591 # Follow same validations as in datetime.tzinfo
1592 if not isinstance(dt, datetime):
1593 raise TypeError("fromutc() requires a datetime argument")
1594 if dt.tzinfo is not self:
1595 raise ValueError("dt.tzinfo is not self")
1596
1597 # A custom implementation is required for fromutc as
1598 # the input to this function is a datetime with utc values
1599 # but with a tzinfo set to self.
1600 # See datetime.astimezone or fromtimestamp.
1601 if dt.replace(tzinfo=timezone.utc) >= self.UTC_MOVE_DATE:
1602 return dt + timedelta(hours=4, minutes=30)
1603 else:
1604 return dt + timedelta(hours=4)
1605
1606 def dst(self, dt):
1607 # Kabul does not observe daylight saving time.
1608 return timedelta(0)
1609
1610 def tzname(self, dt):
1611 if dt >= self.UTC_MOVE_DATE:
1612 return "+04:30"
1613 return "+04"
1614
1615Usage of ``KabulTz`` from above::
1616
1617 >>> tz1 = KabulTz()
1618
1619 >>> # Datetime before the change
1620 >>> dt1 = datetime(1900, 11, 21, 16, 30, tzinfo=tz1)
1621 >>> print(dt1.utcoffset())
1622 4:00:00
1623
1624 >>> # Datetime after the change
1625 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=tz1)
1626 >>> print(dt2.utcoffset())
1627 4:30:00
1628
1629 >>> # Convert datetime to another time zone
1630 >>> dt3 = dt2.astimezone(timezone.utc)
1631 >>> dt3
1632 datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc)
1633 >>> dt2
1634 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=KabulTz())
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001635 >>> dt2 == dt3
Brad3fb13632019-09-11 05:19:05 -04001636 True
Georg Brandl116aa622007-08-15 14:28:22 +00001637
1638.. _datetime-time:
1639
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001640:class:`.time` Objects
1641----------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001642
Brad3fb13632019-09-11 05:19:05 -04001643A :class:`time` object represents a (local) time of day, independent of any particular
Georg Brandl116aa622007-08-15 14:28:22 +00001644day, and subject to adjustment via a :class:`tzinfo` object.
1645
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001646.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001647
Brad3fb13632019-09-11 05:19:05 -04001648 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
1649 :class:`tzinfo` subclass. The remaining arguments must be integers in the
Georg Brandl116aa622007-08-15 14:28:22 +00001650 following ranges:
1651
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001652 * ``0 <= hour < 24``,
1653 * ``0 <= minute < 60``,
1654 * ``0 <= second < 60``,
1655 * ``0 <= microsecond < 1000000``,
1656 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +00001657
Brad3fb13632019-09-11 05:19:05 -04001658 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
Georg Brandl116aa622007-08-15 14:28:22 +00001659 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1660
1661Class attributes:
1662
1663
1664.. attribute:: time.min
1665
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001666 The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001667
1668
1669.. attribute:: time.max
1670
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001671 The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001672
1673
1674.. attribute:: time.resolution
1675
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001676 The smallest possible difference between non-equal :class:`.time` objects,
1677 ``timedelta(microseconds=1)``, although note that arithmetic on
1678 :class:`.time` objects is not supported.
Georg Brandl116aa622007-08-15 14:28:22 +00001679
Georg Brandl116aa622007-08-15 14:28:22 +00001680
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001681Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001682
1683.. attribute:: time.hour
1684
1685 In ``range(24)``.
1686
1687
1688.. attribute:: time.minute
1689
1690 In ``range(60)``.
1691
1692
1693.. attribute:: time.second
1694
1695 In ``range(60)``.
1696
1697
1698.. attribute:: time.microsecond
1699
1700 In ``range(1000000)``.
1701
1702
1703.. attribute:: time.tzinfo
1704
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001705 The object passed as the tzinfo argument to the :class:`.time` constructor, or
Georg Brandl116aa622007-08-15 14:28:22 +00001706 ``None`` if none was passed.
1707
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001708
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001709.. attribute:: time.fold
1710
Brad3fb13632019-09-11 05:19:05 -04001711 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001712 repeated interval occurs when clocks are rolled back at the end of daylight saving
1713 time or when the UTC offset for the current zone is decreased for political reasons.)
1714 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1715 time representation.
1716
1717 .. versionadded:: 3.6
1718
Brad3fb13632019-09-11 05:19:05 -04001719:class:`.time` objects support comparison of :class:`.time` to :class:`.time`,
1720where *a* is considered less
1721than *b* when *a* precedes *b* in time. If one comparand is naive and the other
1722is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality
1723comparisons, naive instances are never equal to aware instances.
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001724
Brad3fb13632019-09-11 05:19:05 -04001725If both comparands are aware, and have
1726the same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is
1727ignored and the base times are compared. If both comparands are aware and
1728have different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by
1729subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1730to stop mixed-type comparisons from falling back to the default comparison by
1731object address, when a :class:`.time` object is compared to an object of a
1732different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
1733``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl116aa622007-08-15 14:28:22 +00001734
Brad3fb13632019-09-11 05:19:05 -04001735.. versionchanged:: 3.3
1736 Equality comparisons between aware and naive :class:`~datetime.time` instances
1737 don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001738
Brad3fb13632019-09-11 05:19:05 -04001739In Boolean contexts, a :class:`.time` object is always considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001740
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001741.. versionchanged:: 3.5
1742 Before Python 3.5, a :class:`.time` object was considered to be false if it
Brad3fb13632019-09-11 05:19:05 -04001743 represented midnight in UTC. This behavior was considered obscure and
1744 error-prone and has been removed in Python 3.5. See :issue:`13936` for full
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001745 details.
Georg Brandl116aa622007-08-15 14:28:22 +00001746
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001747
1748Other constructor:
1749
1750.. classmethod:: time.fromisoformat(time_string)
1751
Brad3fb13632019-09-11 05:19:05 -04001752 Return a :class:`.time` corresponding to a *time_string* in one of the
1753 formats emitted by :meth:`time.isoformat`. Specifically, this function supports
1754 strings in the format:
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001755
Brad3fb13632019-09-11 05:19:05 -04001756 .. code-block:: none
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001757
Brad3fb13632019-09-11 05:19:05 -04001758 HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001759
Brad3fb13632019-09-11 05:19:05 -04001760 .. caution::
1761
1762 This does *not* support parsing arbitrary ISO 8601 strings. It is only
1763 intended as the inverse operation of :meth:`time.isoformat`.
1764
1765 Examples::
1766
1767 >>> from datetime import time
1768 >>> time.fromisoformat('04:23:01')
1769 datetime.time(4, 23, 1)
1770 >>> time.fromisoformat('04:23:01.000384')
1771 datetime.time(4, 23, 1, 384)
1772 >>> time.fromisoformat('04:23:01+04:00')
1773 datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
1774
1775 .. versionadded:: 3.7
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001776
1777
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001778Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001779
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001780.. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \
1781 microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001782
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001783 Return a :class:`.time` with the same value, except for those attributes given
Brad3fb13632019-09-11 05:19:05 -04001784 new values by whichever keyword arguments are specified. Note that
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001785 ``tzinfo=None`` can be specified to create a naive :class:`.time` from an
1786 aware :class:`.time`, without conversion of the time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001787
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001788 .. versionadded:: 3.6
1789 Added the ``fold`` argument.
1790
Georg Brandl116aa622007-08-15 14:28:22 +00001791
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001792.. method:: time.isoformat(timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001793
Brad3fb13632019-09-11 05:19:05 -04001794 Return a string representing the time in ISO 8601 format, one of:
1795
1796 - ``HH:MM:SS.ffffff``, if :attr:`microsecond` is not 0
1797 - ``HH:MM:SS``, if :attr:`microsecond` is 0
1798 - ``HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :meth:`utcoffset` does not return ``None``
1799 - ``HH:MM:SS+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` is 0 and :meth:`utcoffset` does not return ``None``
Georg Brandl116aa622007-08-15 14:28:22 +00001800
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001801 The optional argument *timespec* specifies the number of additional
1802 components of the time to include (the default is ``'auto'``).
1803 It can be one of the following:
1804
1805 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1806 same as ``'microseconds'`` otherwise.
Brad3fb13632019-09-11 05:19:05 -04001807 - ``'hours'``: Include the :attr:`hour` in the two-digit ``HH`` format.
1808 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in ``HH:MM`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001809 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
Brad3fb13632019-09-11 05:19:05 -04001810 in ``HH:MM:SS`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001811 - ``'milliseconds'``: Include full time, but truncate fractional second
Brad3fb13632019-09-11 05:19:05 -04001812 part to milliseconds. ``HH:MM:SS.sss`` format.
1813 - ``'microseconds'``: Include full time in ``HH:MM:SS.ffffff`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001814
1815 .. note::
1816
1817 Excluded time components are truncated, not rounded.
1818
1819 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1820
Brad3fb13632019-09-11 05:19:05 -04001821 Example::
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001822
1823 >>> from datetime import time
Berker Peksag94f89a62016-06-04 21:36:53 -07001824 >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001825 '12:34'
Berker Peksag94f89a62016-06-04 21:36:53 -07001826 >>> dt = time(hour=12, minute=34, second=56, microsecond=0)
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001827 >>> dt.isoformat(timespec='microseconds')
1828 '12:34:56.000000'
1829 >>> dt.isoformat(timespec='auto')
1830 '12:34:56'
1831
1832 .. versionadded:: 3.6
1833 Added the *timespec* argument.
1834
Georg Brandl116aa622007-08-15 14:28:22 +00001835
1836.. method:: time.__str__()
1837
1838 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1839
1840
1841.. method:: time.strftime(format)
1842
David Wolever569a5fa2013-08-12 16:56:02 -04001843 Return a string representing the time, controlled by an explicit format
Brad3fb13632019-09-11 05:19:05 -04001844 string. For a complete list of formatting directives, see
David Woleverbbf4a462013-08-12 17:15:36 -04001845 :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001846
1847
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001848.. method:: time.__format__(format)
1849
Martin Panterd5db1472016-02-08 01:34:09 +00001850 Same as :meth:`.time.strftime`. This makes it possible to specify a format string
Martin Panterbc1ee462016-02-13 00:41:37 +00001851 for a :class:`.time` object in :ref:`formatted string
Brad3fb13632019-09-11 05:19:05 -04001852 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001853 complete list of formatting directives, see
1854 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001855
1856
Georg Brandl116aa622007-08-15 14:28:22 +00001857.. method:: time.utcoffset()
1858
Martin Panter16c7cfd2016-04-01 21:48:24 +00001859 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001860 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001861 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1862
1863 .. versionchanged:: 3.7
1864 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001865
1866
1867.. method:: time.dst()
1868
Martin Panter16c7cfd2016-04-01 21:48:24 +00001869 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001870 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001871 ``None``, or a :class:`timedelta` object with magnitude less than one day.
Georg Brandl116aa622007-08-15 14:28:22 +00001872
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001873 .. versionchanged:: 3.7
1874 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001875
1876.. method:: time.tzname()
1877
Martin Panter16c7cfd2016-04-01 21:48:24 +00001878 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001879 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1880 return ``None`` or a string object.
1881
Brad3fb13632019-09-11 05:19:05 -04001882Examples of Usage: :class:`.time`
1883^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1884
1885Examples of working with a :class:`.time` object::
Georg Brandl48310cd2009-01-03 21:18:54 +00001886
Xiang Zhang6721c7c2016-12-27 12:23:59 +08001887 >>> from datetime import time, tzinfo, timedelta
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001888 >>> class TZ1(tzinfo):
Christian Heimes895627f2007-12-08 17:28:33 +00001889 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001890 ... return timedelta(hours=1)
1891 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001892 ... return timedelta(0)
1893 ... def tzname(self,dt):
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001894 ... return "+01:00"
1895 ... def __repr__(self):
1896 ... return f"{self.__class__.__name__}()"
Christian Heimes895627f2007-12-08 17:28:33 +00001897 ...
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001898 >>> t = time(12, 10, 30, tzinfo=TZ1())
1899 >>> t
1900 datetime.time(12, 10, 30, tzinfo=TZ1())
Christian Heimes895627f2007-12-08 17:28:33 +00001901 >>> t.isoformat()
1902 '12:10:30+01:00'
1903 >>> t.dst()
1904 datetime.timedelta(0)
1905 >>> t.tzname()
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001906 '+01:00'
Christian Heimes895627f2007-12-08 17:28:33 +00001907 >>> t.strftime("%H:%M:%S %Z")
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001908 '12:10:30 +01:00'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001909 >>> 'The {} is {:%H:%M}.'.format("time", t)
1910 'The time is 12:10.'
Christian Heimes895627f2007-12-08 17:28:33 +00001911
Georg Brandl116aa622007-08-15 14:28:22 +00001912
1913.. _datetime-tzinfo:
1914
1915:class:`tzinfo` Objects
1916-----------------------
1917
Martin Panter16c7cfd2016-04-01 21:48:24 +00001918.. class:: tzinfo()
Georg Brandl116aa622007-08-15 14:28:22 +00001919
Martin Panter16c7cfd2016-04-01 21:48:24 +00001920 This is an abstract base class, meaning that this class should not be
Brad3fb13632019-09-11 05:19:05 -04001921 instantiated directly. Define a subclass of :class:`tzinfo` to capture
1922 information about a particular time zone.
Georg Brandl116aa622007-08-15 14:28:22 +00001923
Martin Panter16c7cfd2016-04-01 21:48:24 +00001924 An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1925 constructors for :class:`.datetime` and :class:`.time` objects. The latter objects
1926 view their attributes as being in local time, and the :class:`tzinfo` object
1927 supports methods revealing offset of local time from UTC, the name of the time
1928 zone, and DST offset, all relative to a date or time object passed to them.
Georg Brandl116aa622007-08-15 14:28:22 +00001929
Brad3fb13632019-09-11 05:19:05 -04001930 You need to derive a concrete subclass, and (at least)
1931 supply implementations of the standard :class:`tzinfo` methods needed by the
1932 :class:`.datetime` methods you use. The :mod:`datetime` module provides
1933 :class:`timezone`, a simple concrete subclass of :class:`tzinfo` which can
1934 represent timezones with fixed offset from UTC such as UTC itself or North
1935 American EST and EDT.
1936
Martin Panter16c7cfd2016-04-01 21:48:24 +00001937 Special requirement for pickling: A :class:`tzinfo` subclass must have an
Brad3fb13632019-09-11 05:19:05 -04001938 :meth:`__init__` method that can be called with no arguments, otherwise it can be
1939 pickled but possibly not unpickled again. This is a technical requirement that
Martin Panter16c7cfd2016-04-01 21:48:24 +00001940 may be relaxed in the future.
1941
1942 A concrete subclass of :class:`tzinfo` may need to implement the following
Brad3fb13632019-09-11 05:19:05 -04001943 methods. Exactly which methods are needed depends on the uses made of aware
1944 :mod:`datetime` objects. If in doubt, simply implement all of them.
Georg Brandl116aa622007-08-15 14:28:22 +00001945
1946
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001947.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001948
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001949 Return offset of local time from UTC, as a :class:`timedelta` object that is
Brad3fb13632019-09-11 05:19:05 -04001950 positive east of UTC. If local time is west of UTC, this should be negative.
1951
1952 This represents the *total* offset from UTC; for example, if a
1953 :class:`tzinfo` object represents both time zone and DST adjustments,
1954 :meth:`utcoffset` should return their sum. If the UTC offset isn't known,
1955 return ``None``. Else the value returned must be a :class:`timedelta` object
1956 strictly between ``-timedelta(hours=24)`` and ``timedelta(hours=24)``
1957 (the magnitude of the offset must be less than one day). Most implementations
1958 of :meth:`utcoffset` will probably look like one of these two::
Georg Brandl116aa622007-08-15 14:28:22 +00001959
1960 return CONSTANT # fixed-offset class
1961 return CONSTANT + self.dst(dt) # daylight-aware class
1962
1963 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1964 ``None`` either.
1965
1966 The default implementation of :meth:`utcoffset` raises
1967 :exc:`NotImplementedError`.
1968
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001969 .. versionchanged:: 3.7
1970 The UTC offset is not restricted to a whole number of minutes.
1971
Georg Brandl116aa622007-08-15 14:28:22 +00001972
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001973.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001974
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001975 Return the daylight saving time (DST) adjustment, as a :class:`timedelta`
1976 object or
Brad3fb13632019-09-11 05:19:05 -04001977 ``None`` if DST information isn't known.
1978
1979 Return ``timedelta(0)`` if DST is not in effect.
1980 If DST is in effect, return the offset as a :class:`timedelta` object
Georg Brandl116aa622007-08-15 14:28:22 +00001981 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1982 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1983 no need to consult :meth:`dst` unless you're interested in obtaining DST info
Brad3fb13632019-09-11 05:19:05 -04001984 separately. For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001985 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1986 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1987 DST changes when crossing time zones.
Georg Brandl116aa622007-08-15 14:28:22 +00001988
1989 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1990 daylight times must be consistent in this sense:
1991
1992 ``tz.utcoffset(dt) - tz.dst(dt)``
1993
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001994 must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo ==
Georg Brandl116aa622007-08-15 14:28:22 +00001995 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1996 zone's "standard offset", which should not depend on the date or the time, but
Brad3fb13632019-09-11 05:19:05 -04001997 only on geographic location. The implementation of :meth:`datetime.astimezone`
Georg Brandl116aa622007-08-15 14:28:22 +00001998 relies on this, but cannot detect violations; it's the programmer's
Brad3fb13632019-09-11 05:19:05 -04001999 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
Georg Brandl116aa622007-08-15 14:28:22 +00002000 this, it may be able to override the default implementation of
2001 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
2002
2003 Most implementations of :meth:`dst` will probably look like one of these two::
2004
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01002005 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00002006 # a fixed-offset class: doesn't account for DST
2007 return timedelta(0)
2008
Brad3fb13632019-09-11 05:19:05 -04002009 or::
Georg Brandl116aa622007-08-15 14:28:22 +00002010
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01002011 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00002012 # Code to set dston and dstoff to the time zone's DST
2013 # transition times based on the input dt.year, and expressed
Brad3fb13632019-09-11 05:19:05 -04002014 # in standard local time.
Georg Brandl116aa622007-08-15 14:28:22 +00002015
2016 if dston <= dt.replace(tzinfo=None) < dstoff:
2017 return timedelta(hours=1)
2018 else:
2019 return timedelta(0)
2020
2021 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
2022
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002023 .. versionchanged:: 3.7
2024 The DST offset is not restricted to a whole number of minutes.
2025
Georg Brandl116aa622007-08-15 14:28:22 +00002026
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002027.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00002028
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002029 Return the time zone name corresponding to the :class:`.datetime` object *dt*, as
Georg Brandl116aa622007-08-15 14:28:22 +00002030 a string. Nothing about string names is defined by the :mod:`datetime` module,
Brad3fb13632019-09-11 05:19:05 -04002031 and there's no requirement that it mean anything in particular. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00002032 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
Brad3fb13632019-09-11 05:19:05 -04002033 valid replies. Return ``None`` if a string name isn't known. Note that this is
Georg Brandl116aa622007-08-15 14:28:22 +00002034 a method rather than a fixed string primarily because some :class:`tzinfo`
2035 subclasses will wish to return different names depending on the specific value
2036 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
2037 daylight time.
2038
2039 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
2040
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002041
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002042These methods are called by a :class:`.datetime` or :class:`.time` object, in
Brad3fb13632019-09-11 05:19:05 -04002043response to their methods of the same names. A :class:`.datetime` object passes
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002044itself as the argument, and a :class:`.time` object passes ``None`` as the
Brad3fb13632019-09-11 05:19:05 -04002045argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002046accept a *dt* argument of ``None``, or of class :class:`.datetime`.
Georg Brandl116aa622007-08-15 14:28:22 +00002047
2048When ``None`` is passed, it's up to the class designer to decide the best
Brad3fb13632019-09-11 05:19:05 -04002049response. For example, returning ``None`` is appropriate if the class wishes to
2050say that time objects don't participate in the :class:`tzinfo` protocols. It
Georg Brandl116aa622007-08-15 14:28:22 +00002051may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
2052there is no other convention for discovering the standard offset.
2053
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002054When a :class:`.datetime` object is passed in response to a :class:`.datetime`
Brad3fb13632019-09-11 05:19:05 -04002055method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
2056rely on this, unless user code calls :class:`tzinfo` methods directly. The
Georg Brandl116aa622007-08-15 14:28:22 +00002057intent is that the :class:`tzinfo` methods interpret *dt* as being in local
2058time, and not need worry about objects in other timezones.
2059
2060There is one more :class:`tzinfo` method that a subclass may wish to override:
2061
2062
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002063.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00002064
Senthil Kumaran023c6f72011-07-17 19:01:14 +08002065 This is called from the default :class:`datetime.astimezone()`
Brad3fb13632019-09-11 05:19:05 -04002066 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
2067 date and time data are to be viewed as expressing a UTC time. The purpose
Senthil Kumaran023c6f72011-07-17 19:01:14 +08002068 of :meth:`fromutc` is to adjust the date and time data, returning an
Senthil Kumarana6bac952011-07-04 11:28:30 -07002069 equivalent datetime in *self*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00002070
2071 Most :class:`tzinfo` subclasses should be able to inherit the default
Brad3fb13632019-09-11 05:19:05 -04002072 :meth:`fromutc` implementation without problems. It's strong enough to handle
Georg Brandl116aa622007-08-15 14:28:22 +00002073 fixed-offset time zones, and time zones accounting for both standard and
2074 daylight time, and the latter even if the DST transition times differ in
Brad3fb13632019-09-11 05:19:05 -04002075 different years. An example of a time zone the default :meth:`fromutc`
Georg Brandl116aa622007-08-15 14:28:22 +00002076 implementation may not handle correctly in all cases is one where the standard
2077 offset (from UTC) depends on the specific date and time passed, which can happen
2078 for political reasons. The default implementations of :meth:`astimezone` and
2079 :meth:`fromutc` may not produce the result you want if the result is one of the
2080 hours straddling the moment the standard offset changes.
2081
2082 Skipping code for error cases, the default :meth:`fromutc` implementation acts
2083 like::
2084
2085 def fromutc(self, dt):
2086 # raise ValueError error if dt.tzinfo is not self
2087 dtoff = dt.utcoffset()
2088 dtdst = dt.dst()
2089 # raise ValueError if dtoff is None or dtdst is None
2090 delta = dtoff - dtdst # this is self's standard offset
2091 if delta:
2092 dt += delta # convert to standard local time
2093 dtdst = dt.dst()
2094 # raise ValueError if dtdst is None
2095 if dtdst:
2096 return dt + dtdst
2097 else:
2098 return dt
2099
Marco Buttu909a6f62017-03-18 17:59:33 +01002100In the following :download:`tzinfo_examples.py
2101<../includes/tzinfo_examples.py>` file there are some examples of
2102:class:`tzinfo` classes:
Georg Brandl116aa622007-08-15 14:28:22 +00002103
Marco Buttu909a6f62017-03-18 17:59:33 +01002104.. literalinclude:: ../includes/tzinfo_examples.py
Georg Brandl116aa622007-08-15 14:28:22 +00002105
Georg Brandl116aa622007-08-15 14:28:22 +00002106Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
2107subclass accounting for both standard and daylight time, at the DST transition
Brad3fb13632019-09-11 05:19:05 -04002108points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00002109minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
21101:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00002111
2112 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
2113 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
2114 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
2115
2116 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
2117
2118 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
2119
2120When DST starts (the "start" line), the local wall clock leaps from 1:59 to
Brad3fb13632019-09-11 05:19:05 -040021213:00. A wall time of the form 2:MM doesn't really make sense on that day, so
Georg Brandl116aa622007-08-15 14:28:22 +00002122``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
Brad3fb13632019-09-11 05:19:05 -04002123begins. For example, at the Spring forward transition of 2016, we get::
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002124
Marco Buttu909a6f62017-03-18 17:59:33 +01002125 >>> from datetime import datetime, timezone
2126 >>> from tzinfo_examples import HOUR, Eastern
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002127 >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
2128 >>> for i in range(4):
2129 ... u = u0 + i*HOUR
2130 ... t = u.astimezone(Eastern)
2131 ... print(u.time(), 'UTC =', t.time(), t.tzname())
2132 ...
2133 05:00:00 UTC = 00:00:00 EST
2134 06:00:00 UTC = 01:00:00 EST
2135 07:00:00 UTC = 03:00:00 EDT
2136 08:00:00 UTC = 04:00:00 EDT
2137
Georg Brandl116aa622007-08-15 14:28:22 +00002138
2139When DST ends (the "end" line), there's a potentially worse problem: there's an
2140hour that can't be spelled unambiguously in local wall time: the last hour of
Brad3fb13632019-09-11 05:19:05 -04002141daylight time. In Eastern, that's times of the form 5:MM UTC on the day
2142daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
Georg Brandl116aa622007-08-15 14:28:22 +00002143to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
2144:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
Brad3fb13632019-09-11 05:19:05 -04002145hours into the same local hour then. In the Eastern example, UTC times of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002146form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times
2147have the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1.
Brad3fb13632019-09-11 05:19:05 -04002148For example, at the Fall back transition of 2016, we get::
Georg Brandl116aa622007-08-15 14:28:22 +00002149
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002150 >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
2151 >>> for i in range(4):
2152 ... u = u0 + i*HOUR
2153 ... t = u.astimezone(Eastern)
2154 ... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
2155 ...
2156 04:00:00 UTC = 00:00:00 EDT 0
2157 05:00:00 UTC = 01:00:00 EDT 0
2158 06:00:00 UTC = 01:00:00 EST 1
2159 07:00:00 UTC = 02:00:00 EST 0
2160
Brad3fb13632019-09-11 05:19:05 -04002161Note that the :class:`.datetime` instances that differ only by the value of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002162:attr:`~datetime.fold` attribute are considered equal in comparisons.
2163
2164Applications that can't bear wall-time ambiguities should explicitly check the
Raymond Hettinger15f44ab2016-08-30 10:47:49 -07002165value of the :attr:`~datetime.fold` attribute or avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002166:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
2167or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
2168only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
2169
Sandro Tosid11d0d62012-04-24 19:46:06 +02002170.. seealso::
2171
wim glenn53f2af12017-06-06 12:54:41 -05002172 `dateutil.tz <https://dateutil.readthedocs.io/en/stable/tz.html>`_
Brad3fb13632019-09-11 05:19:05 -04002173 The :mod:`datetime` module has a basic :class:`timezone` class (for
2174 handling arbitrary fixed offsets from UTC) and its :attr:`timezone.utc`
2175 attribute (a UTC timezone instance).
Sandro Tosid11d0d62012-04-24 19:46:06 +02002176
Brad3fb13632019-09-11 05:19:05 -04002177 *dateutil.tz* library brings the *IANA timezone database*
2178 (also known as the Olson database) to Python, and its usage is
2179 recommended.
Sandro Tosi100b8892012-04-28 11:19:37 +02002180
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002181 `IANA timezone database <https://www.iana.org/time-zones>`_
Brad3fb13632019-09-11 05:19:05 -04002182 The Time Zone Database (often called tz, tzdata or zoneinfo) contains code
2183 and data that represent the history of local time for many representative
Sandro Tosi100b8892012-04-28 11:19:37 +02002184 locations around the globe. It is updated periodically to reflect changes
2185 made by political bodies to time zone boundaries, UTC offsets, and
2186 daylight-saving rules.
Sandro Tosid11d0d62012-04-24 19:46:06 +02002187
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002188
2189.. _datetime-timezone:
2190
2191:class:`timezone` Objects
2192--------------------------
2193
Alexander Belopolsky6d3c9a62011-05-04 10:28:26 -04002194The :class:`timezone` class is a subclass of :class:`tzinfo`, each
2195instance of which represents a timezone defined by a fixed offset from
Brad3fb13632019-09-11 05:19:05 -04002196UTC.
2197
2198Objects of this class cannot be used to represent timezone information in the
2199locations where different offsets are used in different days of the year or
2200where historical changes have been made to civil time.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002201
2202
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002203.. class:: timezone(offset, name=None)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002204
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002205 The *offset* argument must be specified as a :class:`timedelta`
Brad3fb13632019-09-11 05:19:05 -04002206 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002207 be strictly between ``-timedelta(hours=24)`` and
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002208 ``timedelta(hours=24)``, otherwise :exc:`ValueError` is raised.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002209
Brad3fb13632019-09-11 05:19:05 -04002210 The *name* argument is optional. If specified it must be a string that
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002211 will be used as the value returned by the :meth:`datetime.tzname` method.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002212
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07002213 .. versionadded:: 3.2
2214
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002215 .. versionchanged:: 3.7
2216 The UTC offset is not restricted to a whole number of minutes.
2217
2218
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002219.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002220
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002221 Return the fixed value specified when the :class:`timezone` instance is
Brad3fb13632019-09-11 05:19:05 -04002222 constructed.
2223
2224 The *dt* argument is ignored. The return value is a :class:`timedelta`
2225 instance equal to the difference between the local time and UTC.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002226
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002227 .. versionchanged:: 3.7
2228 The UTC offset is not restricted to a whole number of minutes.
2229
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002230.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002231
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002232 Return the fixed value specified when the :class:`timezone` instance
Brad3fb13632019-09-11 05:19:05 -04002233 is constructed.
2234
2235 If *name* is not provided in the constructor, the name returned by
2236 ``tzname(dt)`` is generated from the value of the ``offset`` as follows. If
2237 *offset* is ``timedelta(0)``, the name is "UTC", otherwise it is a string in
2238 the format ``UTC±HH:MM``, where ± is the sign of ``offset``, HH and MM are
2239 two digits of ``offset.hours`` and ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002240
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002241 .. versionchanged:: 3.6
Brad3fb13632019-09-11 05:19:05 -04002242 Name generated from ``offset=timedelta(0)`` is now plain `'UTC'`, not
2243 ``'UTC+00:00'``.
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002244
2245
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002246.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002247
2248 Always returns ``None``.
2249
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002250.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002251
Brad3fb13632019-09-11 05:19:05 -04002252 Return ``dt + offset``. The *dt* argument must be an aware
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002253 :class:`.datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002254
2255Class attributes:
2256
2257.. attribute:: timezone.utc
2258
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002259 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00002260
Georg Brandl116aa622007-08-15 14:28:22 +00002261
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002262.. index::
Serhiy Storchaka913876d2018-10-28 13:41:26 +02002263 single: % (percent); datetime format
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002264
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002265.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00002266
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002267:meth:`strftime` and :meth:`strptime` Behavior
2268----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00002269
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002270:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a
Georg Brandl116aa622007-08-15 14:28:22 +00002271``strftime(format)`` method, to create a string representing the time under the
Brad3fb13632019-09-11 05:19:05 -04002272control of an explicit format string.
Georg Brandl116aa622007-08-15 14:28:22 +00002273
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002274Conversely, the :meth:`datetime.strptime` class method creates a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002275:class:`.datetime` object from a string representing a date and time and a
Brad3fb13632019-09-11 05:19:05 -04002276corresponding format string.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002277
Brad3fb13632019-09-11 05:19:05 -04002278The table below provides a high-level comparison of :meth:`strftime`
2279versus :meth:`strptime`:
Georg Brandl116aa622007-08-15 14:28:22 +00002280
Brad3fb13632019-09-11 05:19:05 -04002281+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2282| | ``strftime`` | ``strptime`` |
2283+================+========================================================+==============================================================================+
2284| Usage | Convert object to a string according to a given format | Parse a string into a :class:`.datetime` object given a corresponding format |
2285+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2286| Type of method | Instance method | Class method |
2287+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2288| Method of | :class:`date`; :class:`.datetime`; :class:`.time` | :class:`.datetime` |
2289+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2290| Signature | ``strftime(format)`` | ``strptime(date_string, format)`` |
2291+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002292
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302293
Brad3fb13632019-09-11 05:19:05 -04002294:meth:`strftime` and :meth:`strptime` Format Codes
2295^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Christian Heimes895627f2007-12-08 17:28:33 +00002296
Brad3fb13632019-09-11 05:19:05 -04002297The following is a list of all the format codes that the 1989 C standard
2298requires, and these work on all platforms with a standard C implementation.
Georg Brandl116aa622007-08-15 14:28:22 +00002299
David Wolever569a5fa2013-08-12 16:56:02 -04002300+-----------+--------------------------------+------------------------+-------+
2301| Directive | Meaning | Example | Notes |
2302+===========+================================+========================+=======+
2303| ``%a`` | Weekday as locale's || Sun, Mon, ..., Sat | \(1) |
2304| | abbreviated name. | (en_US); | |
2305| | || So, Mo, ..., Sa | |
2306| | | (de_DE) | |
2307+-----------+--------------------------------+------------------------+-------+
2308| ``%A`` | Weekday as locale's full name. || Sunday, Monday, ..., | \(1) |
2309| | | Saturday (en_US); | |
2310| | || Sonntag, Montag, ..., | |
2311| | | Samstag (de_DE) | |
2312+-----------+--------------------------------+------------------------+-------+
2313| ``%w`` | Weekday as a decimal number, | 0, 1, ..., 6 | |
2314| | where 0 is Sunday and 6 is | | |
2315| | Saturday. | | |
2316+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002317| ``%d`` | Day of the month as a | 01, 02, ..., 31 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002318| | zero-padded decimal number. | | |
2319+-----------+--------------------------------+------------------------+-------+
2320| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
2321| | name. | (en_US); | |
2322| | || Jan, Feb, ..., Dez | |
2323| | | (de_DE) | |
2324+-----------+--------------------------------+------------------------+-------+
2325| ``%B`` | Month as locale's full name. || January, February, | \(1) |
2326| | | ..., December (en_US);| |
2327| | || Januar, Februar, ..., | |
2328| | | Dezember (de_DE) | |
2329+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002330| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002331| | decimal number. | | |
2332+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002333| ``%y`` | Year without century as a | 00, 01, ..., 99 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002334| | zero-padded decimal number. | | |
2335+-----------+--------------------------------+------------------------+-------+
2336| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
David Wolever5d07e702013-08-14 14:41:48 -04002337| | number. | 2014, ..., 9998, 9999 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002338+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002339| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002340| | zero-padded decimal number. | | |
2341+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002342| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002343| | zero-padded decimal number. | | |
2344+-----------+--------------------------------+------------------------+-------+
2345| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
2346| | AM or PM. || am, pm (de_DE) | \(3) |
2347+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002348| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002349| | decimal number. | | |
2350+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002351| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4), |
2352| | decimal number. | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002353+-----------+--------------------------------+------------------------+-------+
2354| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
2355| | number, zero-padded on the | 999999 | |
2356| | left. | | |
2357+-----------+--------------------------------+------------------------+-------+
Christophe Nanteuil92878822018-10-06 00:57:02 +02002358| ``%z`` | UTC offset in the form | (empty), +0000, | \(6) |
Brad3fb13632019-09-11 05:19:05 -04002359| | ``±HHMM[SS[.ffffff]]`` (empty | -0400, +1030, | |
Christophe Nanteuil92878822018-10-06 00:57:02 +02002360| | string if the object is | +063415, | |
2361| | naive). | -030712.345216 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002362+-----------+--------------------------------+------------------------+-------+
Karl Dubostbc441ed2019-11-27 01:38:41 +09002363| ``%Z`` | Time zone name (empty string | (empty), UTC, GMT | \(6) |
David Wolever569a5fa2013-08-12 16:56:02 -04002364| | if the object is naive). | | |
2365+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002366| ``%j`` | Day of the year as a | 001, 002, ..., 366 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002367| | zero-padded decimal number. | | |
2368+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002369| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7), |
2370| | (Sunday as the first day of | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002371| | the week) as a zero padded | | |
2372| | decimal number. All days in a | | |
2373| | new year preceding the first | | |
2374| | Sunday are considered to be in | | |
2375| | week 0. | | |
2376+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002377| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7), |
2378| | (Monday as the first day of | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002379| | the week) as a decimal number. | | |
2380| | All days in a new year | | |
2381| | preceding the first Monday | | |
2382| | are considered to be in | | |
2383| | week 0. | | |
2384+-----------+--------------------------------+------------------------+-------+
2385| ``%c`` | Locale's appropriate date and || Tue Aug 16 21:30:00 | \(1) |
2386| | time representation. | 1988 (en_US); | |
2387| | || Di 16 Aug 21:30:00 | |
2388| | | 1988 (de_DE) | |
2389+-----------+--------------------------------+------------------------+-------+
2390| ``%x`` | Locale's appropriate date || 08/16/88 (None); | \(1) |
2391| | representation. || 08/16/1988 (en_US); | |
2392| | || 16.08.1988 (de_DE) | |
2393+-----------+--------------------------------+------------------------+-------+
2394| ``%X`` | Locale's appropriate time || 21:30:00 (en_US); | \(1) |
2395| | representation. || 21:30:00 (de_DE) | |
2396+-----------+--------------------------------+------------------------+-------+
2397| ``%%`` | A literal ``'%'`` character. | % | |
2398+-----------+--------------------------------+------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00002399
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002400Several additional directives not required by the C89 standard are included for
Brad3fb13632019-09-11 05:19:05 -04002401convenience. These parameters all correspond to ISO 8601 date values.
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002402
2403+-----------+--------------------------------+------------------------+-------+
2404| Directive | Meaning | Example | Notes |
2405+===========+================================+========================+=======+
2406| ``%G`` | ISO 8601 year with century | 0001, 0002, ..., 2013, | \(8) |
2407| | representing the year that | 2014, ..., 9998, 9999 | |
2408| | contains the greater part of | | |
2409| | the ISO week (``%V``). | | |
2410+-----------+--------------------------------+------------------------+-------+
2411| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
2412| | number where 1 is Monday. | | |
2413+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002414| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8), |
2415| | number with Monday as | | \(9) |
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002416| | the first day of the week. | | |
2417| | Week 01 is the week containing | | |
2418| | Jan 4. | | |
2419+-----------+--------------------------------+------------------------+-------+
2420
Brad3fb13632019-09-11 05:19:05 -04002421These may not be available on all platforms when used with the :meth:`strftime`
2422method. The ISO 8601 year and ISO 8601 week directives are not interchangeable
2423with the year and week number directives above. Calling :meth:`strptime` with
2424incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
2425
2426The full set of format codes supported varies across platforms, because Python
2427calls the platform C library's :func:`strftime` function, and platform
2428variations are common. To see the full set of format codes supported on your
2429platform, consult the :manpage:`strftime(3)` documentation.
2430
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002431.. versionadded:: 3.6
2432 ``%G``, ``%u`` and ``%V`` were added.
2433
Brad3fb13632019-09-11 05:19:05 -04002434Technical Detail
2435^^^^^^^^^^^^^^^^
2436
2437Broadly speaking, ``d.strftime(fmt)`` acts like the :mod:`time` module's
2438``time.strftime(fmt, d.timetuple())`` although not all objects support a
2439:meth:`timetuple` method.
2440
2441For the :meth:`datetime.strptime` class method, the default value is
2442``1900-01-01T00:00:00.000``: any components not specified in the format string
2443will be pulled from the default value. [#]_
2444
2445Using ``datetime.strptime(date_string, format)`` is equivalent to::
2446
2447 datetime(*(time.strptime(date_string, format)[0:6]))
2448
2449except when the format includes sub-second components or timezone offset
2450information, which are supported in ``datetime.strptime`` but are discarded by
2451``time.strptime``.
2452
2453For :class:`.time` objects, the format codes for year, month, and day should not
2454be used, as :class:`time` objects have no such values. If they're used anyway,
2455``1900`` is substituted for the year, and ``1`` for the month and day.
2456
2457For :class:`date` objects, the format codes for hours, minutes, seconds, and
2458microseconds should not be used, as :class:`date` objects have no such
2459values. If they're used anyway, ``0`` is substituted for them.
2460
2461For the same reason, handling of format strings containing Unicode code points
2462that can't be represented in the charset of the current locale is also
2463platform-dependent. On some platforms such code points are preserved intact in
2464the output, while on others ``strftime`` may raise :exc:`UnicodeError` or return
2465an empty string instead.
2466
Christian Heimes895627f2007-12-08 17:28:33 +00002467Notes:
2468
2469(1)
David Wolever569a5fa2013-08-12 16:56:02 -04002470 Because the format depends on the current locale, care should be taken when
2471 making assumptions about the output value. Field orderings will vary (for
2472 example, "month/day/year" versus "day/month/year"), and the output may
2473 contain Unicode characters encoded using the locale's default encoding (for
Georg Brandlad321532013-10-29 08:05:10 +01002474 example, if the current locale is ``ja_JP``, the default encoding could be
David Wolever569a5fa2013-08-12 16:56:02 -04002475 any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale`
2476 to determine the current locale's encoding).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002477
2478(2)
David Wolever569a5fa2013-08-12 16:56:02 -04002479 The :meth:`strptime` method can parse years in the full [1, 9999] range, but
2480 years < 1000 must be zero-filled to 4-digit width.
Alexander Belopolsky085556a2011-01-10 23:28:33 +00002481
2482 .. versionchanged:: 3.2
2483 In previous versions, :meth:`strftime` method was restricted to
2484 years >= 1900.
2485
Alexander Belopolsky5611a1c2011-05-02 14:14:48 -04002486 .. versionchanged:: 3.3
2487 In version 3.2, :meth:`strftime` method was restricted to
2488 years >= 1000.
2489
David Wolever569a5fa2013-08-12 16:56:02 -04002490(3)
2491 When used with the :meth:`strptime` method, the ``%p`` directive only affects
2492 the output hour field if the ``%I`` directive is used to parse the hour.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00002493
David Wolever569a5fa2013-08-12 16:56:02 -04002494(4)
2495 Unlike the :mod:`time` module, the :mod:`datetime` module does not support
2496 leap seconds.
2497
2498(5)
2499 When used with the :meth:`strptime` method, the ``%f`` directive
Brad3fb13632019-09-11 05:19:05 -04002500 accepts from one to six digits and zero pads on the right. ``%f`` is
David Wolever569a5fa2013-08-12 16:56:02 -04002501 an extension to the set of format characters in the C standard (but
2502 implemented separately in datetime objects, and therefore always
2503 available).
2504
2505(6)
2506 For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
2507 strings.
2508
2509 For an aware object:
2510
2511 ``%z``
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002512 :meth:`utcoffset` is transformed into a string of the form
Brad3fb13632019-09-11 05:19:05 -04002513 ``±HHMM[SS[.ffffff]]``, where ``HH`` is a 2-digit string giving the number
2514 of UTC offset hours, ``MM`` is a 2-digit string giving the number of UTC
cocoatomo068768f2019-12-23 02:46:45 +09002515 offset minutes, ``SS`` is a 2-digit string giving the number of UTC offset
Brad3fb13632019-09-11 05:19:05 -04002516 seconds and ``ffffff`` is a 6-digit string giving the number of UTC
2517 offset microseconds. The ``ffffff`` part is omitted when the offset is a
2518 whole number of seconds and both the ``ffffff`` and the ``SS`` part is
2519 omitted when the offset is a whole number of minutes. For example, if
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002520 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
2521 replaced with the string ``'-0330'``.
2522
2523 .. versionchanged:: 3.7
2524 The UTC offset is not restricted to a whole number of minutes.
David Wolever569a5fa2013-08-12 16:56:02 -04002525
Mario Corchero32318932017-10-26 01:35:41 +01002526 .. versionchanged:: 3.7
2527 When the ``%z`` directive is provided to the :meth:`strptime` method,
2528 the UTC offsets can have a colon as a separator between hours, minutes
2529 and seconds.
2530 For example, ``'+01:00:00'`` will be parsed as an offset of one hour.
2531 In addition, providing ``'Z'`` is identical to ``'+00:00'``.
2532
David Wolever569a5fa2013-08-12 16:56:02 -04002533 ``%Z``
Karl Dubostbc441ed2019-11-27 01:38:41 +09002534 In :meth:`strftime`, ``%Z`` is replaced by an empty string if
2535 :meth:`tzname` returns ``None``; otherwise ``%Z`` is replaced by the
2536 returned value, which must be a string.
2537
2538 :meth:`strptime` only accepts certain values for ``%Z``:
2539
2540 1. any value in ``time.tzname`` for your machine's locale
2541 2. the hard-coded values ``UTC`` and ``GMT``
2542
2543 So someone living in Japan may have ``JST``, ``UTC``, and ``GMT`` as
2544 valid values, but probably not ``EST``. It will raise ``ValueError`` for
2545 invalid values.
David Wolever569a5fa2013-08-12 16:56:02 -04002546
2547 .. versionchanged:: 3.2
2548 When the ``%z`` directive is provided to the :meth:`strptime` method, an
Brad3fb13632019-09-11 05:19:05 -04002549 aware :class:`.datetime` object will be produced. The ``tzinfo`` of the
David Wolever569a5fa2013-08-12 16:56:02 -04002550 result will be set to a :class:`timezone` instance.
2551
2552(7)
2553 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002554 in calculations when the day of the week and the calendar year (``%Y``)
2555 are specified.
2556
2557(8)
2558 Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the
2559 day of the week and the ISO year (``%G``) are specified in a
2560 :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
Martin Panterf1579822016-05-26 06:03:33 +00002561 interchangeable.
R David Murray9075d8b2012-05-14 22:14:46 -04002562
Mike Gleen6b9c2042019-06-18 19:14:57 +01002563(9)
2564 When used with the :meth:`strptime` method, the leading zero is optional
2565 for formats ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, ``%S``, ``%J``, ``%U``,
2566 ``%W``, and ``%V``. Format ``%y`` does require a leading zero.
2567
R David Murray9075d8b2012-05-14 22:14:46 -04002568.. rubric:: Footnotes
2569
2570.. [#] If, that is, we ignore the effects of Relativity
Brad3fb13632019-09-11 05:19:05 -04002571
2572.. [#] This matches the definition of the "proleptic Gregorian" calendar in
2573 Dershowitz and Reingold's book *Calendrical Calculations*,
2574 where it's the base calendar for all computations. See the book for
2575 algorithms for converting between proleptic Gregorian ordinals and
2576 many other calendar systems.
2577
2578.. [#] See R. H. van Gent's `guide to the mathematics of the ISO 8601 calendar
2579 <https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm>`_
2580 for a good explanation.
2581
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302582.. [#] Passing ``datetime.strptime('Feb 29', '%b %d')`` will fail since ``1900`` is not a leap year.