blob: 882d4e16e1f6d29f4323877c4a936516aa4a4b23 [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
Martin Panter16c7cfd2016-04-01 21:48:24 +0000865 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
Brad3fb13632019-09-11 05:19:05 -0400866 current date and time are converted to *tz*’s time zone. In this case the
867 result is equivalent to::
868
869 tz.fromutc(datetime.utcnow().replace(tzinfo=tz))
870
Georg Brandl116aa622007-08-15 14:28:22 +0000871 See also :meth:`today`, :meth:`utcnow`.
872
873
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000874.. classmethod:: datetime.utcnow()
Georg Brandl116aa622007-08-15 14:28:22 +0000875
Brad3fb13632019-09-11 05:19:05 -0400876 Return the current UTC date and time, with :attr:`.tzinfo` ``None``.
877
878 This is like :meth:`now`, but returns the current UTC date and time, as a naive
879 :class:`.datetime` object. An aware current UTC datetime can be obtained by
880 calling ``datetime.now(timezone.utc)``. See also :meth:`now`.
Georg Brandl116aa622007-08-15 14:28:22 +0000881
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000882.. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000883
884 Return the local date and time corresponding to the POSIX timestamp, such as is
885 returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
886 specified, the timestamp is converted to the platform's local date and time, and
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300887 the returned :class:`.datetime` object is naive.
Georg Brandl116aa622007-08-15 14:28:22 +0000888
Martin Panter16c7cfd2016-04-01 21:48:24 +0000889 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
Brad3fb13632019-09-11 05:19:05 -0400890 timestamp is converted to *tz*’s time zone.
891
892 In this case the result is equivalent to::
893
894 tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))
Georg Brandl116aa622007-08-15 14:28:22 +0000895
Victor Stinnerecc6e662012-03-14 00:39:29 +0100896 :meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is out of
Georg Brandl60203b42010-10-06 10:11:56 +0000897 the range of values supported by the platform C :c:func:`localtime` or
Victor Stinnerecc6e662012-03-14 00:39:29 +0100898 :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or
899 :c:func:`gmtime` failure.
900 It's common for this to be restricted to years in
Georg Brandl116aa622007-08-15 14:28:22 +0000901 1970 through 2038. Note that on non-POSIX systems that include leap seconds in
902 their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`,
903 and then it's possible to have two timestamps differing by a second that yield
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300904 identical :class:`.datetime` objects. See also :meth:`utcfromtimestamp`.
Georg Brandl116aa622007-08-15 14:28:22 +0000905
Victor Stinner5d272cc2012-03-13 13:35:55 +0100906 .. versionchanged:: 3.3
907 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
908 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100909 :c:func:`localtime` or :c:func:`gmtime` functions. Raise :exc:`OSError`
910 instead of :exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime`
911 failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100912
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400913 .. versionchanged:: 3.6
914 :meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000915
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000916.. classmethod:: datetime.utcfromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000917
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300918 Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with
Brad3fb13632019-09-11 05:19:05 -0400919 :attr:`.tzinfo` ``None``. (The resulting object is naive.)
920
921 This may raise :exc:`OverflowError`, if the timestamp is
Victor Stinnerecc6e662012-03-14 00:39:29 +0100922 out of the range of values supported by the platform C :c:func:`gmtime` function,
923 and :exc:`OSError` on :c:func:`gmtime` failure.
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500924 It's common for this to be restricted to years in 1970 through 2038.
Georg Brandl116aa622007-08-15 14:28:22 +0000925
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500926 To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`::
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400927
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500928 datetime.fromtimestamp(timestamp, timezone.utc)
929
930 On the POSIX compliant platforms, it is equivalent to the following
931 expression::
932
933 datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
934
935 except the latter formula always supports the full years range: between
936 :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400937
Victor Stinner5d272cc2012-03-13 13:35:55 +0100938 .. versionchanged:: 3.3
939 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
940 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100941 :c:func:`gmtime` function. Raise :exc:`OSError` instead of
942 :exc:`ValueError` on :c:func:`gmtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100943
Georg Brandl116aa622007-08-15 14:28:22 +0000944
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000945.. classmethod:: datetime.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000946
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300947 Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal,
Georg Brandl116aa622007-08-15 14:28:22 +0000948 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
Brad3fb13632019-09-11 05:19:05 -0400949 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and
Martin Panter16c7cfd2016-04-01 21:48:24 +0000950 microsecond of the result are all 0, and :attr:`.tzinfo` is ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000951
952
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400953.. classmethod:: datetime.combine(date, time, tzinfo=self.tzinfo)
Georg Brandl116aa622007-08-15 14:28:22 +0000954
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300955 Return a new :class:`.datetime` object whose date components are equal to the
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400956 given :class:`date` object's, and whose time components
Brad3fb13632019-09-11 05:19:05 -0400957 are equal to the given :class:`.time` object's. If the *tzinfo*
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400958 argument is provided, its value is used to set the :attr:`.tzinfo` attribute
959 of the result, otherwise the :attr:`~.time.tzinfo` attribute of the *time* argument
960 is used.
961
962 For any :class:`.datetime` object *d*,
Brad3fb13632019-09-11 05:19:05 -0400963 ``d == datetime.combine(d.date(), d.time(), d.tzinfo)``. If date is a
Martin Panter16c7cfd2016-04-01 21:48:24 +0000964 :class:`.datetime` object, its time components and :attr:`.tzinfo` attributes
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800965 are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000966
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400967 .. versionchanged:: 3.6
968 Added the *tzinfo* argument.
969
Georg Brandl116aa622007-08-15 14:28:22 +0000970
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500971.. classmethod:: datetime.fromisoformat(date_string)
972
Brad3fb13632019-09-11 05:19:05 -0400973 Return a :class:`.datetime` corresponding to a *date_string* in one of the
974 formats emitted by :meth:`date.isoformat` and :meth:`datetime.isoformat`.
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500975
Brad3fb13632019-09-11 05:19:05 -0400976 Specifically, this function supports strings in the format:
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500977
Brad3fb13632019-09-11 05:19:05 -0400978 .. code-block:: none
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500979
Brad3fb13632019-09-11 05:19:05 -0400980 YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500981
Brad3fb13632019-09-11 05:19:05 -0400982 where ``*`` can match any single character.
983
984 .. caution::
985
986 This does *not* support parsing arbitrary ISO 8601 strings - it is only intended
987 as the inverse operation of :meth:`datetime.isoformat`. A more full-featured
988 ISO 8601 parser, ``dateutil.parser.isoparse`` is available in the third-party package
989 `dateutil <https://dateutil.readthedocs.io/en/stable/parser.html#dateutil.parser.isoparse>`__.
990 This does not support parsing arbitrary ISO 8601 strings - it is only intended
991 as the inverse operation of :meth:`datetime.isoformat`.
992
993 Examples::
994
995 >>> from datetime import datetime
996 >>> datetime.fromisoformat('2011-11-04')
997 datetime.datetime(2011, 11, 4, 0, 0)
998 >>> datetime.fromisoformat('2011-11-04T00:05:23')
999 datetime.datetime(2011, 11, 4, 0, 5, 23)
1000 >>> datetime.fromisoformat('2011-11-04 00:05:23.283')
1001 datetime.datetime(2011, 11, 4, 0, 5, 23, 283000)
1002 >>> datetime.fromisoformat('2011-11-04 00:05:23.283+00:00')
1003 datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc)
1004 >>> datetime.fromisoformat('2011-11-04T00:05:23+04:00') # doctest: +NORMALIZE_WHITESPACE
1005 datetime.datetime(2011, 11, 4, 0, 5, 23,
1006 tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
1007
1008 .. versionadded:: 3.7
Paul Ganssle88c09372019-04-29 09:22:03 -04001009
1010.. classmethod:: datetime.fromisocalendar(year, week, day)
1011
Brad3fb13632019-09-11 05:19:05 -04001012 Return a :class:`.datetime` corresponding to the ISO calendar date specified
Paul Ganssle88c09372019-04-29 09:22:03 -04001013 by year, week and day. The non-date components of the datetime are populated
1014 with their normal default values. This is the inverse of the function
1015 :meth:`datetime.isocalendar`.
1016
1017 .. versionadded:: 3.8
1018
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001019.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +00001020
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001021 Return a :class:`.datetime` corresponding to *date_string*, parsed according to
Brad3fb13632019-09-11 05:19:05 -04001022 *format*.
1023
1024 This is equivalent to::
1025
1026 datetime(*(time.strptime(date_string, format)[0:6]))
1027
1028 :exc:`ValueError` is raised if the date_string and format
Georg Brandl116aa622007-08-15 14:28:22 +00001029 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 -04001030 time tuple. For a complete list of formatting directives, see
1031 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001032
Georg Brandl116aa622007-08-15 14:28:22 +00001033
Georg Brandl116aa622007-08-15 14:28:22 +00001034
1035Class attributes:
1036
Georg Brandl116aa622007-08-15 14:28:22 +00001037.. attribute:: datetime.min
1038
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001039 The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1,
Georg Brandl116aa622007-08-15 14:28:22 +00001040 tzinfo=None)``.
1041
1042
1043.. attribute:: datetime.max
1044
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001045 The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
Georg Brandl116aa622007-08-15 14:28:22 +00001046 59, 999999, tzinfo=None)``.
1047
1048
1049.. attribute:: datetime.resolution
1050
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001051 The smallest possible difference between non-equal :class:`.datetime` objects,
Georg Brandl116aa622007-08-15 14:28:22 +00001052 ``timedelta(microseconds=1)``.
1053
Georg Brandl116aa622007-08-15 14:28:22 +00001054
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001055Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001056
1057.. attribute:: datetime.year
1058
1059 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
1060
1061
1062.. attribute:: datetime.month
1063
1064 Between 1 and 12 inclusive.
1065
1066
1067.. attribute:: datetime.day
1068
1069 Between 1 and the number of days in the given month of the given year.
1070
1071
1072.. attribute:: datetime.hour
1073
1074 In ``range(24)``.
1075
1076
1077.. attribute:: datetime.minute
1078
1079 In ``range(60)``.
1080
1081
1082.. attribute:: datetime.second
1083
1084 In ``range(60)``.
1085
1086
1087.. attribute:: datetime.microsecond
1088
1089 In ``range(1000000)``.
1090
1091
1092.. attribute:: datetime.tzinfo
1093
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001094 The object passed as the *tzinfo* argument to the :class:`.datetime` constructor,
Georg Brandl116aa622007-08-15 14:28:22 +00001095 or ``None`` if none was passed.
1096
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001097
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001098.. attribute:: datetime.fold
1099
Brad3fb13632019-09-11 05:19:05 -04001100 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001101 repeated interval occurs when clocks are rolled back at the end of daylight saving
1102 time or when the UTC offset for the current zone is decreased for political reasons.)
1103 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1104 time representation.
1105
1106 .. versionadded:: 3.6
1107
Georg Brandl116aa622007-08-15 14:28:22 +00001108Supported operations:
1109
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001110+---------------------------------------+--------------------------------+
1111| Operation | Result |
1112+=======================================+================================+
1113| ``datetime2 = datetime1 + timedelta`` | \(1) |
1114+---------------------------------------+--------------------------------+
1115| ``datetime2 = datetime1 - timedelta`` | \(2) |
1116+---------------------------------------+--------------------------------+
1117| ``timedelta = datetime1 - datetime2`` | \(3) |
1118+---------------------------------------+--------------------------------+
1119| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
1120| | :class:`.datetime`. (4) |
1121+---------------------------------------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +00001122
1123(1)
1124 datetime2 is a duration of timedelta removed from datetime1, moving forward in
Brad3fb13632019-09-11 05:19:05 -04001125 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Martin Panter16c7cfd2016-04-01 21:48:24 +00001126 result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and
Senthil Kumarana6bac952011-07-04 11:28:30 -07001127 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
1128 datetime2.year would be smaller than :const:`MINYEAR` or larger than
1129 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
1130 input is an aware object.
Georg Brandl116aa622007-08-15 14:28:22 +00001131
1132(2)
1133 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Martin Panter16c7cfd2016-04-01 21:48:24 +00001134 addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input
Senthil Kumarana6bac952011-07-04 11:28:30 -07001135 datetime, and no time zone adjustments are done even if the input is aware.
Georg Brandl116aa622007-08-15 14:28:22 +00001136
1137(3)
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001138 Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if
Brad3fb13632019-09-11 05:19:05 -04001139 both operands are naive, or if both are aware. If one is aware and the other is
Georg Brandl116aa622007-08-15 14:28:22 +00001140 naive, :exc:`TypeError` is raised.
1141
Martin Panter16c7cfd2016-04-01 21:48:24 +00001142 If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute,
1143 the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Brad3fb13632019-09-11 05:19:05 -04001144 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
Georg Brandl116aa622007-08-15 14:28:22 +00001145 are done in this case.
1146
Martin Panter16c7cfd2016-04-01 21:48:24 +00001147 If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
Brad3fb13632019-09-11 05:19:05 -04001148 as if *a* and *b* were first converted to naive UTC datetimes first. The
Senthil Kumarana6bac952011-07-04 11:28:30 -07001149 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
1150 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl116aa622007-08-15 14:28:22 +00001151
1152(4)
1153 *datetime1* is considered less than *datetime2* when *datetime1* precedes
1154 *datetime2* in time.
1155
Alexander Belopolsky08313822012-06-15 20:19:47 -04001156 If one comparand is naive and the other is aware, :exc:`TypeError`
Brad3fb13632019-09-11 05:19:05 -04001157 is raised if an order comparison is attempted. For equality
Alexander Belopolsky08313822012-06-15 20:19:47 -04001158 comparisons, naive instances are never equal to aware instances.
1159
Martin Panter16c7cfd2016-04-01 21:48:24 +00001160 If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
1161 common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
Brad3fb13632019-09-11 05:19:05 -04001162 compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001163 attributes, the comparands are first adjusted by subtracting their UTC
1164 offsets (obtained from ``self.utcoffset()``).
Georg Brandl116aa622007-08-15 14:28:22 +00001165
Alexander Belopolsky08313822012-06-15 20:19:47 -04001166 .. versionchanged:: 3.3
Brad3fb13632019-09-11 05:19:05 -04001167 Equality comparisons between aware and naive :class:`.datetime`
Éric Araujob0f08952012-06-24 16:22:09 -04001168 instances don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001169
Georg Brandl116aa622007-08-15 14:28:22 +00001170 .. note::
1171
1172 In order to stop comparison from falling back to the default scheme of comparing
1173 object addresses, datetime comparison normally raises :exc:`TypeError` if the
Brad3fb13632019-09-11 05:19:05 -04001174 other comparand isn't also a :class:`.datetime` object. However,
Georg Brandl116aa622007-08-15 14:28:22 +00001175 ``NotImplemented`` is returned instead if the other comparand has a
Brad3fb13632019-09-11 05:19:05 -04001176 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
1177 chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001178 object is compared to an object of a different type, :exc:`TypeError` is raised
Brad3fb13632019-09-11 05:19:05 -04001179 unless the comparison is ``==`` or ``!=``. The latter cases return
Georg Brandl116aa622007-08-15 14:28:22 +00001180 :const:`False` or :const:`True`, respectively.
1181
Georg Brandl116aa622007-08-15 14:28:22 +00001182Instance methods:
1183
Georg Brandl116aa622007-08-15 14:28:22 +00001184.. method:: datetime.date()
1185
1186 Return :class:`date` object with same year, month and day.
1187
1188
1189.. method:: datetime.time()
1190
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001191 Return :class:`.time` object with same hour, minute, second, microsecond and fold.
Brad3fb13632019-09-11 05:19:05 -04001192 :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`.
Georg Brandl116aa622007-08-15 14:28:22 +00001193
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001194 .. versionchanged:: 3.6
1195 The fold value is copied to the returned :class:`.time` object.
1196
Georg Brandl116aa622007-08-15 14:28:22 +00001197
1198.. method:: datetime.timetz()
1199
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001200 Return :class:`.time` object with same hour, minute, second, microsecond, fold, and
Brad3fb13632019-09-11 05:19:05 -04001201 tzinfo attributes. See also method :meth:`time`.
Georg Brandl116aa622007-08-15 14:28:22 +00001202
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001203 .. versionchanged:: 3.6
1204 The fold value is copied to the returned :class:`.time` object.
Georg Brandl116aa622007-08-15 14:28:22 +00001205
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001206
1207.. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \
1208 hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \
1209 tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001210
Senthil Kumarana6bac952011-07-04 11:28:30 -07001211 Return a datetime with the same attributes, except for those attributes given
Brad3fb13632019-09-11 05:19:05 -04001212 new values by whichever keyword arguments are specified. Note that
Senthil Kumarana6bac952011-07-04 11:28:30 -07001213 ``tzinfo=None`` can be specified to create a naive datetime from an aware
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001214 datetime with no conversion of date and time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001215
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001216 .. versionadded:: 3.6
1217 Added the ``fold`` argument.
1218
Georg Brandl116aa622007-08-15 14:28:22 +00001219
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001220.. method:: datetime.astimezone(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001221
Martin Panter16c7cfd2016-04-01 21:48:24 +00001222 Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*,
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001223 adjusting the date and time data so the result is the same UTC time as
Senthil Kumarana6bac952011-07-04 11:28:30 -07001224 *self*, but in *tz*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001225
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001226 If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its
Brad3fb13632019-09-11 05:19:05 -04001227 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If *self*
Alexander Belopolsky877b2322018-06-10 17:02:58 -04001228 is naive, it is presumed to represent time in the system timezone.
Georg Brandl116aa622007-08-15 14:28:22 +00001229
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001230 If called without arguments (or with ``tz=None``) the system local
Brad3fb13632019-09-11 05:19:05 -04001231 timezone is assumed for the target timezone. The ``.tzinfo`` attribute of the converted
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001232 datetime instance will be set to an instance of :class:`timezone`
1233 with the zone name and offset obtained from the OS.
1234
Georg Brandl116aa622007-08-15 14:28:22 +00001235 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001236 adjustment of date or time data is performed. Else the result is local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001237 time in the timezone *tz*, representing the same UTC time as *self*: after
1238 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have
1239 the same date and time data as ``dt - dt.utcoffset()``.
Georg Brandl116aa622007-08-15 14:28:22 +00001240
1241 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Brad3fb13632019-09-11 05:19:05 -04001242 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl116aa622007-08-15 14:28:22 +00001243 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001244 conversion of date and time data, use ``dt.replace(tzinfo=None)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001245
1246 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
1247 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
1248 Ignoring error cases, :meth:`astimezone` acts like::
1249
1250 def astimezone(self, tz):
1251 if self.tzinfo is tz:
1252 return self
1253 # Convert self to UTC, and attach the new time zone object.
1254 utc = (self - self.utcoffset()).replace(tzinfo=tz)
1255 # Convert from UTC to tz's local time.
1256 return tz.fromutc(utc)
1257
Georg Brandlee0be402012-06-26 09:14:40 +02001258 .. versionchanged:: 3.3
1259 *tz* now can be omitted.
1260
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001261 .. versionchanged:: 3.6
1262 The :meth:`astimezone` method can now be called on naive instances that
1263 are presumed to represent system local time.
1264
Georg Brandl116aa622007-08-15 14:28:22 +00001265
1266.. method:: datetime.utcoffset()
1267
Martin Panter16c7cfd2016-04-01 21:48:24 +00001268 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001269 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001270 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1271
1272 .. versionchanged:: 3.7
1273 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001274
1275
1276.. method:: datetime.dst()
1277
Martin Panter16c7cfd2016-04-01 21:48:24 +00001278 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001279 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001280 ``None`` or a :class:`timedelta` object with magnitude less than one day.
1281
1282 .. versionchanged:: 3.7
1283 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001284
1285
1286.. method:: datetime.tzname()
1287
Martin Panter16c7cfd2016-04-01 21:48:24 +00001288 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001289 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
1290 ``None`` or a string object,
1291
1292
1293.. method:: datetime.timetuple()
1294
1295 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
Brad3fb13632019-09-11 05:19:05 -04001296
1297 ``d.timetuple()`` is equivalent to::
1298
1299 time.struct_time((d.year, d.month, d.day,
1300 d.hour, d.minute, d.second,
1301 d.weekday(), yday, dst))
1302
1303 where ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1``
1304 is the day number within the current year starting with ``1`` for January
1305 1st. The :attr:`tm_isdst` flag of the result is set according to the
1306 :meth:`dst` method: :attr:`.tzinfo` is ``None`` or :meth:`dst` returns
1307 ``None``, :attr:`tm_isdst` is set to ``-1``; else if :meth:`dst` returns a
1308 non-zero value, :attr:`tm_isdst` is set to ``1``; else :attr:`tm_isdst` is
1309 set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +00001310
1311
1312.. method:: datetime.utctimetuple()
1313
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001314 If :class:`.datetime` instance *d* is naive, this is the same as
Georg Brandl116aa622007-08-15 14:28:22 +00001315 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
Brad3fb13632019-09-11 05:19:05 -04001316 ``d.dst()`` returns. DST is never in effect for a UTC time.
Georg Brandl116aa622007-08-15 14:28:22 +00001317
1318 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001319 ``d.utcoffset()``, and a :class:`time.struct_time` for the
Brad3fb13632019-09-11 05:19:05 -04001320 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001321 that an :exc:`OverflowError` may be raised if *d*.year was
1322 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +00001323 boundary.
1324
1325
1326.. method:: datetime.toordinal()
1327
Brad3fb13632019-09-11 05:19:05 -04001328 Return the proleptic Gregorian ordinal of the date. The same as
Georg Brandl116aa622007-08-15 14:28:22 +00001329 ``self.date().toordinal()``.
1330
Alexander Belopolskya4415142012-06-08 12:33:09 -04001331.. method:: datetime.timestamp()
1332
Martin Panter16c7cfd2016-04-01 21:48:24 +00001333 Return POSIX timestamp corresponding to the :class:`.datetime`
Brad3fb13632019-09-11 05:19:05 -04001334 instance. The return value is a :class:`float` similar to that
Alexander Belopolskya4415142012-06-08 12:33:09 -04001335 returned by :func:`time.time`.
1336
Martin Panter16c7cfd2016-04-01 21:48:24 +00001337 Naive :class:`.datetime` instances are assumed to represent local
Alexander Belopolskya4415142012-06-08 12:33:09 -04001338 time and this method relies on the platform C :c:func:`mktime`
Brad3fb13632019-09-11 05:19:05 -04001339 function to perform the conversion. Since :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001340 supports wider range of values than :c:func:`mktime` on many
1341 platforms, this method may raise :exc:`OverflowError` for times far
1342 in the past or far in the future.
1343
Martin Panter16c7cfd2016-04-01 21:48:24 +00001344 For aware :class:`.datetime` instances, the return value is computed
Alexander Belopolskya4415142012-06-08 12:33:09 -04001345 as::
1346
1347 (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
1348
1349 .. versionadded:: 3.3
1350
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001351 .. versionchanged:: 3.6
1352 The :meth:`timestamp` method uses the :attr:`.fold` attribute to
1353 disambiguate the times during a repeated interval.
1354
Alexander Belopolskya4415142012-06-08 12:33:09 -04001355 .. note::
1356
1357 There is no method to obtain the POSIX timestamp directly from a
Brad3fb13632019-09-11 05:19:05 -04001358 naive :class:`.datetime` instance representing UTC time. If your
Alexander Belopolskya4415142012-06-08 12:33:09 -04001359 application uses this convention and your system timezone is not
1360 set to UTC, you can obtain the POSIX timestamp by supplying
1361 ``tzinfo=timezone.utc``::
1362
1363 timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
1364
1365 or by calculating the timestamp directly::
1366
1367 timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
Georg Brandl116aa622007-08-15 14:28:22 +00001368
1369.. method:: datetime.weekday()
1370
1371 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1372 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1373
1374
1375.. method:: datetime.isoweekday()
1376
1377 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1378 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1379 :meth:`isocalendar`.
1380
1381
1382.. method:: datetime.isocalendar()
1383
Brad3fb13632019-09-11 05:19:05 -04001384 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
Georg Brandl116aa622007-08-15 14:28:22 +00001385 ``self.date().isocalendar()``.
1386
1387
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001388.. method:: datetime.isoformat(sep='T', timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001389
Brad3fb13632019-09-11 05:19:05 -04001390 Return a string representing the date and time in ISO 8601 format:
1391
1392 - ``YYYY-MM-DDTHH:MM:SS.ffffff``, if :attr:`microsecond` is not 0
1393 - ``YYYY-MM-DDTHH:MM:SS``, if :attr:`microsecond` is 0
Georg Brandl116aa622007-08-15 14:28:22 +00001394
Christophe Nanteuil92878822018-10-06 00:57:02 +02001395 If :meth:`utcoffset` does not return ``None``, a string is
1396 appended, giving the UTC offset:
Brad3fb13632019-09-11 05:19:05 -04001397
1398 - ``YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond`
1399 is not 0
1400 - ``YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` is 0
1401
1402 Examples::
1403
1404 >>> from datetime import datetime, timezone
1405 >>> datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat()
1406 '2019-05-18T15:17:08.132263'
1407 >>> datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat()
1408 '2019-05-18T15:17:00+00:00'
Georg Brandl116aa622007-08-15 14:28:22 +00001409
1410 The optional argument *sep* (default ``'T'``) is a one-character separator,
Brad3fb13632019-09-11 05:19:05 -04001411 placed between the date and time portions of the result. For example::
Georg Brandl116aa622007-08-15 14:28:22 +00001412
1413 >>> from datetime import tzinfo, timedelta, datetime
1414 >>> class TZ(tzinfo):
Brad3fb13632019-09-11 05:19:05 -04001415 ... """A time zone with an arbitrary, constant -06:39 offset."""
1416 ... def utcoffset(self, dt):
1417 ... return timedelta(hours=-6, minutes=-39)
Georg Brandl116aa622007-08-15 14:28:22 +00001418 ...
1419 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1420 '2002-12-25 00:00:00-06:39'
Brad3fb13632019-09-11 05:19:05 -04001421 >>> datetime(2009, 11, 27, microsecond=100, tzinfo=TZ()).isoformat()
1422 '2009-11-27T00:00:00.000100-06:39'
Georg Brandl116aa622007-08-15 14:28:22 +00001423
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001424 The optional argument *timespec* specifies the number of additional
1425 components of the time to include (the default is ``'auto'``).
1426 It can be one of the following:
1427
1428 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1429 same as ``'microseconds'`` otherwise.
Brad3fb13632019-09-11 05:19:05 -04001430 - ``'hours'``: Include the :attr:`hour` in the two-digit ``HH`` format.
1431 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in ``HH:MM`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001432 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
Brad3fb13632019-09-11 05:19:05 -04001433 in ``HH:MM:SS`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001434 - ``'milliseconds'``: Include full time, but truncate fractional second
Brad3fb13632019-09-11 05:19:05 -04001435 part to milliseconds. ``HH:MM:SS.sss`` format.
1436 - ``'microseconds'``: Include full time in ``HH:MM:SS.ffffff`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001437
1438 .. note::
1439
1440 Excluded time components are truncated, not rounded.
1441
Brad3fb13632019-09-11 05:19:05 -04001442 :exc:`ValueError` will be raised on an invalid *timespec* argument::
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001443
1444
1445 >>> from datetime import datetime
Marco Buttu909a6f62017-03-18 17:59:33 +01001446 >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001447 '2002-12-25T00:00'
1448 >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
1449 >>> dt.isoformat(timespec='microseconds')
1450 '2015-01-01T12:30:59.000000'
1451
1452 .. versionadded:: 3.6
1453 Added the *timespec* argument.
1454
Georg Brandl116aa622007-08-15 14:28:22 +00001455
1456.. method:: datetime.__str__()
1457
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001458 For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to
Georg Brandl116aa622007-08-15 14:28:22 +00001459 ``d.isoformat(' ')``.
1460
1461
1462.. method:: datetime.ctime()
1463
Brad3fb13632019-09-11 05:19:05 -04001464 Return a string representing the date and time::
Georg Brandl116aa622007-08-15 14:28:22 +00001465
Brad3fb13632019-09-11 05:19:05 -04001466 >>> from datetime import datetime
1467 >>> datetime(2002, 12, 4, 20, 30, 40).ctime()
1468 'Wed Dec 4 20:30:40 2002'
1469
1470 The output string will *not* include time zone information, regardless
1471 of whether the input is aware or naive.
1472
1473 ``d.ctime()`` is equivalent to::
1474
1475 time.ctime(time.mktime(d.timetuple()))
1476
1477 on platforms where the native C :c:func:`ctime` function
1478 (which :func:`time.ctime` invokes, but which
1479 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
Georg Brandl116aa622007-08-15 14:28:22 +00001480
1481.. method:: datetime.strftime(format)
1482
1483 Return a string representing the date and time, controlled by an explicit format
Brad3fb13632019-09-11 05:19:05 -04001484 string. For a complete list of formatting directives, see
David Wolever569a5fa2013-08-12 16:56:02 -04001485 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001486
Georg Brandl116aa622007-08-15 14:28:22 +00001487
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001488.. method:: datetime.__format__(format)
1489
Brad3fb13632019-09-11 05:19:05 -04001490 Same as :meth:`.datetime.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +00001491 string for a :class:`.datetime` object in :ref:`formatted string
Brad3fb13632019-09-11 05:19:05 -04001492 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001493 complete list of formatting directives, see
1494 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001495
Brad3fb13632019-09-11 05:19:05 -04001496Examples of Usage: :class:`.datetime`
1497^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001498
Brad3fb13632019-09-11 05:19:05 -04001499Examples of working with :class:`~datetime.datetime` objects:
Christian Heimesfe337bf2008-03-23 21:54:12 +00001500
1501.. doctest::
1502
Christian Heimes895627f2007-12-08 17:28:33 +00001503 >>> from datetime import datetime, date, time
Brad3fb13632019-09-11 05:19:05 -04001504
Christian Heimes895627f2007-12-08 17:28:33 +00001505 >>> # Using datetime.combine()
1506 >>> d = date(2005, 7, 14)
1507 >>> t = time(12, 30)
1508 >>> datetime.combine(d, t)
1509 datetime.datetime(2005, 7, 14, 12, 30)
Brad3fb13632019-09-11 05:19:05 -04001510
Christian Heimes895627f2007-12-08 17:28:33 +00001511 >>> # Using datetime.now() or datetime.utcnow()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001512 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001513 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Christian Heimesfe337bf2008-03-23 21:54:12 +00001514 >>> datetime.utcnow() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001515 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
Brad3fb13632019-09-11 05:19:05 -04001516
Christian Heimes895627f2007-12-08 17:28:33 +00001517 >>> # Using datetime.strptime()
1518 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1519 >>> dt
1520 datetime.datetime(2006, 11, 21, 16, 30)
Brad3fb13632019-09-11 05:19:05 -04001521
Christian Heimes895627f2007-12-08 17:28:33 +00001522 >>> # Using datetime.timetuple() to get tuple of all attributes
1523 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001524 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001525 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001526 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001527 2006 # year
1528 11 # month
1529 21 # day
1530 16 # hour
1531 30 # minute
1532 0 # second
1533 1 # weekday (0 = Monday)
1534 325 # number of days since 1st January
1535 -1 # dst - method tzinfo.dst() returned None
Brad3fb13632019-09-11 05:19:05 -04001536
Christian Heimes895627f2007-12-08 17:28:33 +00001537 >>> # Date in ISO format
1538 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001539 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001540 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001541 ...
1542 2006 # ISO year
1543 47 # ISO week
1544 2 # ISO weekday
Brad3fb13632019-09-11 05:19:05 -04001545
1546 >>> # Formatting a datetime
Christian Heimes895627f2007-12-08 17:28:33 +00001547 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1548 'Tuesday, 21. November 2006 04:30PM'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001549 >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
1550 'The day is 21, the month is November, the time is 04:30PM.'
Christian Heimes895627f2007-12-08 17:28:33 +00001551
Brad3fb13632019-09-11 05:19:05 -04001552The example below defines a :class:`tzinfo` subclass capturing time zone
1553information for Kabul, Afghanistan, which used +4 UTC until 1945
1554and then +4:30 UTC thereafter::
Christian Heimes895627f2007-12-08 17:28:33 +00001555
Brad3fb13632019-09-11 05:19:05 -04001556 from datetime import timedelta, datetime, tzinfo, timezone
Georg Brandl48310cd2009-01-03 21:18:54 +00001557
Brad3fb13632019-09-11 05:19:05 -04001558 class KabulTz(tzinfo):
1559 # Kabul used +4 until 1945, when they moved to +4:30
1560 UTC_MOVE_DATE = datetime(1944, 12, 31, 20, tzinfo=timezone.utc)
Christian Heimes895627f2007-12-08 17:28:33 +00001561
Brad3fb13632019-09-11 05:19:05 -04001562 def utcoffset(self, dt):
1563 if dt.year < 1945:
1564 return timedelta(hours=4)
1565 elif (1945, 1, 1, 0, 0) <= dt.timetuple()[:5] < (1945, 1, 1, 0, 30):
1566 # An ambiguous ("imaginary") half-hour range representing
1567 # a 'fold' in time due to the shift from +4 to +4:30.
1568 # If dt falls in the imaginary range, use fold to decide how
1569 # to resolve. See PEP495.
1570 return timedelta(hours=4, minutes=(30 if dt.fold else 0))
1571 else:
1572 return timedelta(hours=4, minutes=30)
1573
1574 def fromutc(self, dt):
1575 # Follow same validations as in datetime.tzinfo
1576 if not isinstance(dt, datetime):
1577 raise TypeError("fromutc() requires a datetime argument")
1578 if dt.tzinfo is not self:
1579 raise ValueError("dt.tzinfo is not self")
1580
1581 # A custom implementation is required for fromutc as
1582 # the input to this function is a datetime with utc values
1583 # but with a tzinfo set to self.
1584 # See datetime.astimezone or fromtimestamp.
1585 if dt.replace(tzinfo=timezone.utc) >= self.UTC_MOVE_DATE:
1586 return dt + timedelta(hours=4, minutes=30)
1587 else:
1588 return dt + timedelta(hours=4)
1589
1590 def dst(self, dt):
1591 # Kabul does not observe daylight saving time.
1592 return timedelta(0)
1593
1594 def tzname(self, dt):
1595 if dt >= self.UTC_MOVE_DATE:
1596 return "+04:30"
1597 return "+04"
1598
1599Usage of ``KabulTz`` from above::
1600
1601 >>> tz1 = KabulTz()
1602
1603 >>> # Datetime before the change
1604 >>> dt1 = datetime(1900, 11, 21, 16, 30, tzinfo=tz1)
1605 >>> print(dt1.utcoffset())
1606 4:00:00
1607
1608 >>> # Datetime after the change
1609 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=tz1)
1610 >>> print(dt2.utcoffset())
1611 4:30:00
1612
1613 >>> # Convert datetime to another time zone
1614 >>> dt3 = dt2.astimezone(timezone.utc)
1615 >>> dt3
1616 datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc)
1617 >>> dt2
1618 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=KabulTz())
1619 >>> dt2.utctimetuple() == dt3.utctimetuple()
1620 True
Georg Brandl116aa622007-08-15 14:28:22 +00001621
1622.. _datetime-time:
1623
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001624:class:`.time` Objects
1625----------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001626
Brad3fb13632019-09-11 05:19:05 -04001627A :class:`time` object represents a (local) time of day, independent of any particular
Georg Brandl116aa622007-08-15 14:28:22 +00001628day, and subject to adjustment via a :class:`tzinfo` object.
1629
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001630.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001631
Brad3fb13632019-09-11 05:19:05 -04001632 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
1633 :class:`tzinfo` subclass. The remaining arguments must be integers in the
Georg Brandl116aa622007-08-15 14:28:22 +00001634 following ranges:
1635
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001636 * ``0 <= hour < 24``,
1637 * ``0 <= minute < 60``,
1638 * ``0 <= second < 60``,
1639 * ``0 <= microsecond < 1000000``,
1640 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +00001641
Brad3fb13632019-09-11 05:19:05 -04001642 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
Georg Brandl116aa622007-08-15 14:28:22 +00001643 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1644
1645Class attributes:
1646
1647
1648.. attribute:: time.min
1649
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001650 The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001651
1652
1653.. attribute:: time.max
1654
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001655 The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001656
1657
1658.. attribute:: time.resolution
1659
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001660 The smallest possible difference between non-equal :class:`.time` objects,
1661 ``timedelta(microseconds=1)``, although note that arithmetic on
1662 :class:`.time` objects is not supported.
Georg Brandl116aa622007-08-15 14:28:22 +00001663
Georg Brandl116aa622007-08-15 14:28:22 +00001664
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001665Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001666
1667.. attribute:: time.hour
1668
1669 In ``range(24)``.
1670
1671
1672.. attribute:: time.minute
1673
1674 In ``range(60)``.
1675
1676
1677.. attribute:: time.second
1678
1679 In ``range(60)``.
1680
1681
1682.. attribute:: time.microsecond
1683
1684 In ``range(1000000)``.
1685
1686
1687.. attribute:: time.tzinfo
1688
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001689 The object passed as the tzinfo argument to the :class:`.time` constructor, or
Georg Brandl116aa622007-08-15 14:28:22 +00001690 ``None`` if none was passed.
1691
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001692
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001693.. attribute:: time.fold
1694
Brad3fb13632019-09-11 05:19:05 -04001695 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001696 repeated interval occurs when clocks are rolled back at the end of daylight saving
1697 time or when the UTC offset for the current zone is decreased for political reasons.)
1698 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1699 time representation.
1700
1701 .. versionadded:: 3.6
1702
Brad3fb13632019-09-11 05:19:05 -04001703:class:`.time` objects support comparison of :class:`.time` to :class:`.time`,
1704where *a* is considered less
1705than *b* when *a* precedes *b* in time. If one comparand is naive and the other
1706is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality
1707comparisons, naive instances are never equal to aware instances.
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001708
Brad3fb13632019-09-11 05:19:05 -04001709If both comparands are aware, and have
1710the same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is
1711ignored and the base times are compared. If both comparands are aware and
1712have different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by
1713subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1714to stop mixed-type comparisons from falling back to the default comparison by
1715object address, when a :class:`.time` object is compared to an object of a
1716different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
1717``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl116aa622007-08-15 14:28:22 +00001718
Brad3fb13632019-09-11 05:19:05 -04001719.. versionchanged:: 3.3
1720 Equality comparisons between aware and naive :class:`~datetime.time` instances
1721 don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001722
Brad3fb13632019-09-11 05:19:05 -04001723In Boolean contexts, a :class:`.time` object is always considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001724
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001725.. versionchanged:: 3.5
1726 Before Python 3.5, a :class:`.time` object was considered to be false if it
Brad3fb13632019-09-11 05:19:05 -04001727 represented midnight in UTC. This behavior was considered obscure and
1728 error-prone and has been removed in Python 3.5. See :issue:`13936` for full
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001729 details.
Georg Brandl116aa622007-08-15 14:28:22 +00001730
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001731
1732Other constructor:
1733
1734.. classmethod:: time.fromisoformat(time_string)
1735
Brad3fb13632019-09-11 05:19:05 -04001736 Return a :class:`.time` corresponding to a *time_string* in one of the
1737 formats emitted by :meth:`time.isoformat`. Specifically, this function supports
1738 strings in the format:
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001739
Brad3fb13632019-09-11 05:19:05 -04001740 .. code-block:: none
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001741
Brad3fb13632019-09-11 05:19:05 -04001742 HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001743
Brad3fb13632019-09-11 05:19:05 -04001744 .. caution::
1745
1746 This does *not* support parsing arbitrary ISO 8601 strings. It is only
1747 intended as the inverse operation of :meth:`time.isoformat`.
1748
1749 Examples::
1750
1751 >>> from datetime import time
1752 >>> time.fromisoformat('04:23:01')
1753 datetime.time(4, 23, 1)
1754 >>> time.fromisoformat('04:23:01.000384')
1755 datetime.time(4, 23, 1, 384)
1756 >>> time.fromisoformat('04:23:01+04:00')
1757 datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
1758
1759 .. versionadded:: 3.7
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001760
1761
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001762Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001763
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001764.. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \
1765 microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001766
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001767 Return a :class:`.time` with the same value, except for those attributes given
Brad3fb13632019-09-11 05:19:05 -04001768 new values by whichever keyword arguments are specified. Note that
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001769 ``tzinfo=None`` can be specified to create a naive :class:`.time` from an
1770 aware :class:`.time`, without conversion of the time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001771
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001772 .. versionadded:: 3.6
1773 Added the ``fold`` argument.
1774
Georg Brandl116aa622007-08-15 14:28:22 +00001775
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001776.. method:: time.isoformat(timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001777
Brad3fb13632019-09-11 05:19:05 -04001778 Return a string representing the time in ISO 8601 format, one of:
1779
1780 - ``HH:MM:SS.ffffff``, if :attr:`microsecond` is not 0
1781 - ``HH:MM:SS``, if :attr:`microsecond` is 0
1782 - ``HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :meth:`utcoffset` does not return ``None``
1783 - ``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 +00001784
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001785 The optional argument *timespec* specifies the number of additional
1786 components of the time to include (the default is ``'auto'``).
1787 It can be one of the following:
1788
1789 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1790 same as ``'microseconds'`` otherwise.
Brad3fb13632019-09-11 05:19:05 -04001791 - ``'hours'``: Include the :attr:`hour` in the two-digit ``HH`` format.
1792 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in ``HH:MM`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001793 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
Brad3fb13632019-09-11 05:19:05 -04001794 in ``HH:MM:SS`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001795 - ``'milliseconds'``: Include full time, but truncate fractional second
Brad3fb13632019-09-11 05:19:05 -04001796 part to milliseconds. ``HH:MM:SS.sss`` format.
1797 - ``'microseconds'``: Include full time in ``HH:MM:SS.ffffff`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001798
1799 .. note::
1800
1801 Excluded time components are truncated, not rounded.
1802
1803 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1804
Brad3fb13632019-09-11 05:19:05 -04001805 Example::
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001806
1807 >>> from datetime import time
Berker Peksag94f89a62016-06-04 21:36:53 -07001808 >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001809 '12:34'
Berker Peksag94f89a62016-06-04 21:36:53 -07001810 >>> dt = time(hour=12, minute=34, second=56, microsecond=0)
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001811 >>> dt.isoformat(timespec='microseconds')
1812 '12:34:56.000000'
1813 >>> dt.isoformat(timespec='auto')
1814 '12:34:56'
1815
1816 .. versionadded:: 3.6
1817 Added the *timespec* argument.
1818
Georg Brandl116aa622007-08-15 14:28:22 +00001819
1820.. method:: time.__str__()
1821
1822 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1823
1824
1825.. method:: time.strftime(format)
1826
David Wolever569a5fa2013-08-12 16:56:02 -04001827 Return a string representing the time, controlled by an explicit format
Brad3fb13632019-09-11 05:19:05 -04001828 string. For a complete list of formatting directives, see
David Woleverbbf4a462013-08-12 17:15:36 -04001829 :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001830
1831
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001832.. method:: time.__format__(format)
1833
Martin Panterd5db1472016-02-08 01:34:09 +00001834 Same as :meth:`.time.strftime`. This makes it possible to specify a format string
Martin Panterbc1ee462016-02-13 00:41:37 +00001835 for a :class:`.time` object in :ref:`formatted string
Brad3fb13632019-09-11 05:19:05 -04001836 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001837 complete list of formatting directives, see
1838 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001839
1840
Georg Brandl116aa622007-08-15 14:28:22 +00001841.. method:: time.utcoffset()
1842
Martin Panter16c7cfd2016-04-01 21:48:24 +00001843 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001844 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001845 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1846
1847 .. versionchanged:: 3.7
1848 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001849
1850
1851.. method:: time.dst()
1852
Martin Panter16c7cfd2016-04-01 21:48:24 +00001853 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001854 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001855 ``None``, or a :class:`timedelta` object with magnitude less than one day.
Georg Brandl116aa622007-08-15 14:28:22 +00001856
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001857 .. versionchanged:: 3.7
1858 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001859
1860.. method:: time.tzname()
1861
Martin Panter16c7cfd2016-04-01 21:48:24 +00001862 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001863 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1864 return ``None`` or a string object.
1865
Brad3fb13632019-09-11 05:19:05 -04001866Examples of Usage: :class:`.time`
1867^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1868
1869Examples of working with a :class:`.time` object::
Georg Brandl48310cd2009-01-03 21:18:54 +00001870
Xiang Zhang6721c7c2016-12-27 12:23:59 +08001871 >>> from datetime import time, tzinfo, timedelta
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001872 >>> class TZ1(tzinfo):
Christian Heimes895627f2007-12-08 17:28:33 +00001873 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001874 ... return timedelta(hours=1)
1875 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001876 ... return timedelta(0)
1877 ... def tzname(self,dt):
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001878 ... return "+01:00"
1879 ... def __repr__(self):
1880 ... return f"{self.__class__.__name__}()"
Christian Heimes895627f2007-12-08 17:28:33 +00001881 ...
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001882 >>> t = time(12, 10, 30, tzinfo=TZ1())
1883 >>> t
1884 datetime.time(12, 10, 30, tzinfo=TZ1())
Christian Heimes895627f2007-12-08 17:28:33 +00001885 >>> t.isoformat()
1886 '12:10:30+01:00'
1887 >>> t.dst()
1888 datetime.timedelta(0)
1889 >>> t.tzname()
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001890 '+01:00'
Christian Heimes895627f2007-12-08 17:28:33 +00001891 >>> t.strftime("%H:%M:%S %Z")
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001892 '12:10:30 +01:00'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001893 >>> 'The {} is {:%H:%M}.'.format("time", t)
1894 'The time is 12:10.'
Christian Heimes895627f2007-12-08 17:28:33 +00001895
Georg Brandl116aa622007-08-15 14:28:22 +00001896
1897.. _datetime-tzinfo:
1898
1899:class:`tzinfo` Objects
1900-----------------------
1901
Martin Panter16c7cfd2016-04-01 21:48:24 +00001902.. class:: tzinfo()
Georg Brandl116aa622007-08-15 14:28:22 +00001903
Martin Panter16c7cfd2016-04-01 21:48:24 +00001904 This is an abstract base class, meaning that this class should not be
Brad3fb13632019-09-11 05:19:05 -04001905 instantiated directly. Define a subclass of :class:`tzinfo` to capture
1906 information about a particular time zone.
Georg Brandl116aa622007-08-15 14:28:22 +00001907
Martin Panter16c7cfd2016-04-01 21:48:24 +00001908 An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1909 constructors for :class:`.datetime` and :class:`.time` objects. The latter objects
1910 view their attributes as being in local time, and the :class:`tzinfo` object
1911 supports methods revealing offset of local time from UTC, the name of the time
1912 zone, and DST offset, all relative to a date or time object passed to them.
Georg Brandl116aa622007-08-15 14:28:22 +00001913
Brad3fb13632019-09-11 05:19:05 -04001914 You need to derive a concrete subclass, and (at least)
1915 supply implementations of the standard :class:`tzinfo` methods needed by the
1916 :class:`.datetime` methods you use. The :mod:`datetime` module provides
1917 :class:`timezone`, a simple concrete subclass of :class:`tzinfo` which can
1918 represent timezones with fixed offset from UTC such as UTC itself or North
1919 American EST and EDT.
1920
Martin Panter16c7cfd2016-04-01 21:48:24 +00001921 Special requirement for pickling: A :class:`tzinfo` subclass must have an
Brad3fb13632019-09-11 05:19:05 -04001922 :meth:`__init__` method that can be called with no arguments, otherwise it can be
1923 pickled but possibly not unpickled again. This is a technical requirement that
Martin Panter16c7cfd2016-04-01 21:48:24 +00001924 may be relaxed in the future.
1925
1926 A concrete subclass of :class:`tzinfo` may need to implement the following
Brad3fb13632019-09-11 05:19:05 -04001927 methods. Exactly which methods are needed depends on the uses made of aware
1928 :mod:`datetime` objects. If in doubt, simply implement all of them.
Georg Brandl116aa622007-08-15 14:28:22 +00001929
1930
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001931.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001932
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001933 Return offset of local time from UTC, as a :class:`timedelta` object that is
Brad3fb13632019-09-11 05:19:05 -04001934 positive east of UTC. If local time is west of UTC, this should be negative.
1935
1936 This represents the *total* offset from UTC; for example, if a
1937 :class:`tzinfo` object represents both time zone and DST adjustments,
1938 :meth:`utcoffset` should return their sum. If the UTC offset isn't known,
1939 return ``None``. Else the value returned must be a :class:`timedelta` object
1940 strictly between ``-timedelta(hours=24)`` and ``timedelta(hours=24)``
1941 (the magnitude of the offset must be less than one day). Most implementations
1942 of :meth:`utcoffset` will probably look like one of these two::
Georg Brandl116aa622007-08-15 14:28:22 +00001943
1944 return CONSTANT # fixed-offset class
1945 return CONSTANT + self.dst(dt) # daylight-aware class
1946
1947 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1948 ``None`` either.
1949
1950 The default implementation of :meth:`utcoffset` raises
1951 :exc:`NotImplementedError`.
1952
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001953 .. versionchanged:: 3.7
1954 The UTC offset is not restricted to a whole number of minutes.
1955
Georg Brandl116aa622007-08-15 14:28:22 +00001956
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001957.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001958
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001959 Return the daylight saving time (DST) adjustment, as a :class:`timedelta`
1960 object or
Brad3fb13632019-09-11 05:19:05 -04001961 ``None`` if DST information isn't known.
1962
1963 Return ``timedelta(0)`` if DST is not in effect.
1964 If DST is in effect, return the offset as a :class:`timedelta` object
Georg Brandl116aa622007-08-15 14:28:22 +00001965 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1966 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1967 no need to consult :meth:`dst` unless you're interested in obtaining DST info
Brad3fb13632019-09-11 05:19:05 -04001968 separately. For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001969 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1970 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1971 DST changes when crossing time zones.
Georg Brandl116aa622007-08-15 14:28:22 +00001972
1973 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1974 daylight times must be consistent in this sense:
1975
1976 ``tz.utcoffset(dt) - tz.dst(dt)``
1977
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001978 must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo ==
Georg Brandl116aa622007-08-15 14:28:22 +00001979 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1980 zone's "standard offset", which should not depend on the date or the time, but
Brad3fb13632019-09-11 05:19:05 -04001981 only on geographic location. The implementation of :meth:`datetime.astimezone`
Georg Brandl116aa622007-08-15 14:28:22 +00001982 relies on this, but cannot detect violations; it's the programmer's
Brad3fb13632019-09-11 05:19:05 -04001983 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
Georg Brandl116aa622007-08-15 14:28:22 +00001984 this, it may be able to override the default implementation of
1985 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
1986
1987 Most implementations of :meth:`dst` will probably look like one of these two::
1988
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001989 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001990 # a fixed-offset class: doesn't account for DST
1991 return timedelta(0)
1992
Brad3fb13632019-09-11 05:19:05 -04001993 or::
Georg Brandl116aa622007-08-15 14:28:22 +00001994
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001995 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001996 # Code to set dston and dstoff to the time zone's DST
1997 # transition times based on the input dt.year, and expressed
Brad3fb13632019-09-11 05:19:05 -04001998 # in standard local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001999
2000 if dston <= dt.replace(tzinfo=None) < dstoff:
2001 return timedelta(hours=1)
2002 else:
2003 return timedelta(0)
2004
2005 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
2006
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002007 .. versionchanged:: 3.7
2008 The DST offset is not restricted to a whole number of minutes.
2009
Georg Brandl116aa622007-08-15 14:28:22 +00002010
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002011.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00002012
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002013 Return the time zone name corresponding to the :class:`.datetime` object *dt*, as
Georg Brandl116aa622007-08-15 14:28:22 +00002014 a string. Nothing about string names is defined by the :mod:`datetime` module,
Brad3fb13632019-09-11 05:19:05 -04002015 and there's no requirement that it mean anything in particular. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00002016 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
Brad3fb13632019-09-11 05:19:05 -04002017 valid replies. Return ``None`` if a string name isn't known. Note that this is
Georg Brandl116aa622007-08-15 14:28:22 +00002018 a method rather than a fixed string primarily because some :class:`tzinfo`
2019 subclasses will wish to return different names depending on the specific value
2020 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
2021 daylight time.
2022
2023 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
2024
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002025
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002026These methods are called by a :class:`.datetime` or :class:`.time` object, in
Brad3fb13632019-09-11 05:19:05 -04002027response to their methods of the same names. A :class:`.datetime` object passes
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002028itself as the argument, and a :class:`.time` object passes ``None`` as the
Brad3fb13632019-09-11 05:19:05 -04002029argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002030accept a *dt* argument of ``None``, or of class :class:`.datetime`.
Georg Brandl116aa622007-08-15 14:28:22 +00002031
2032When ``None`` is passed, it's up to the class designer to decide the best
Brad3fb13632019-09-11 05:19:05 -04002033response. For example, returning ``None`` is appropriate if the class wishes to
2034say that time objects don't participate in the :class:`tzinfo` protocols. It
Georg Brandl116aa622007-08-15 14:28:22 +00002035may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
2036there is no other convention for discovering the standard offset.
2037
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002038When a :class:`.datetime` object is passed in response to a :class:`.datetime`
Brad3fb13632019-09-11 05:19:05 -04002039method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
2040rely on this, unless user code calls :class:`tzinfo` methods directly. The
Georg Brandl116aa622007-08-15 14:28:22 +00002041intent is that the :class:`tzinfo` methods interpret *dt* as being in local
2042time, and not need worry about objects in other timezones.
2043
2044There is one more :class:`tzinfo` method that a subclass may wish to override:
2045
2046
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002047.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00002048
Senthil Kumaran023c6f72011-07-17 19:01:14 +08002049 This is called from the default :class:`datetime.astimezone()`
Brad3fb13632019-09-11 05:19:05 -04002050 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
2051 date and time data are to be viewed as expressing a UTC time. The purpose
Senthil Kumaran023c6f72011-07-17 19:01:14 +08002052 of :meth:`fromutc` is to adjust the date and time data, returning an
Senthil Kumarana6bac952011-07-04 11:28:30 -07002053 equivalent datetime in *self*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00002054
2055 Most :class:`tzinfo` subclasses should be able to inherit the default
Brad3fb13632019-09-11 05:19:05 -04002056 :meth:`fromutc` implementation without problems. It's strong enough to handle
Georg Brandl116aa622007-08-15 14:28:22 +00002057 fixed-offset time zones, and time zones accounting for both standard and
2058 daylight time, and the latter even if the DST transition times differ in
Brad3fb13632019-09-11 05:19:05 -04002059 different years. An example of a time zone the default :meth:`fromutc`
Georg Brandl116aa622007-08-15 14:28:22 +00002060 implementation may not handle correctly in all cases is one where the standard
2061 offset (from UTC) depends on the specific date and time passed, which can happen
2062 for political reasons. The default implementations of :meth:`astimezone` and
2063 :meth:`fromutc` may not produce the result you want if the result is one of the
2064 hours straddling the moment the standard offset changes.
2065
2066 Skipping code for error cases, the default :meth:`fromutc` implementation acts
2067 like::
2068
2069 def fromutc(self, dt):
2070 # raise ValueError error if dt.tzinfo is not self
2071 dtoff = dt.utcoffset()
2072 dtdst = dt.dst()
2073 # raise ValueError if dtoff is None or dtdst is None
2074 delta = dtoff - dtdst # this is self's standard offset
2075 if delta:
2076 dt += delta # convert to standard local time
2077 dtdst = dt.dst()
2078 # raise ValueError if dtdst is None
2079 if dtdst:
2080 return dt + dtdst
2081 else:
2082 return dt
2083
Marco Buttu909a6f62017-03-18 17:59:33 +01002084In the following :download:`tzinfo_examples.py
2085<../includes/tzinfo_examples.py>` file there are some examples of
2086:class:`tzinfo` classes:
Georg Brandl116aa622007-08-15 14:28:22 +00002087
Marco Buttu909a6f62017-03-18 17:59:33 +01002088.. literalinclude:: ../includes/tzinfo_examples.py
Georg Brandl116aa622007-08-15 14:28:22 +00002089
Georg Brandl116aa622007-08-15 14:28:22 +00002090Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
2091subclass accounting for both standard and daylight time, at the DST transition
Brad3fb13632019-09-11 05:19:05 -04002092points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00002093minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
20941:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00002095
2096 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
2097 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
2098 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
2099
2100 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
2101
2102 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
2103
2104When DST starts (the "start" line), the local wall clock leaps from 1:59 to
Brad3fb13632019-09-11 05:19:05 -040021053: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 +00002106``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
Brad3fb13632019-09-11 05:19:05 -04002107begins. For example, at the Spring forward transition of 2016, we get::
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002108
Marco Buttu909a6f62017-03-18 17:59:33 +01002109 >>> from datetime import datetime, timezone
2110 >>> from tzinfo_examples import HOUR, Eastern
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002111 >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
2112 >>> for i in range(4):
2113 ... u = u0 + i*HOUR
2114 ... t = u.astimezone(Eastern)
2115 ... print(u.time(), 'UTC =', t.time(), t.tzname())
2116 ...
2117 05:00:00 UTC = 00:00:00 EST
2118 06:00:00 UTC = 01:00:00 EST
2119 07:00:00 UTC = 03:00:00 EDT
2120 08:00:00 UTC = 04:00:00 EDT
2121
Georg Brandl116aa622007-08-15 14:28:22 +00002122
2123When DST ends (the "end" line), there's a potentially worse problem: there's an
2124hour that can't be spelled unambiguously in local wall time: the last hour of
Brad3fb13632019-09-11 05:19:05 -04002125daylight time. In Eastern, that's times of the form 5:MM UTC on the day
2126daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
Georg Brandl116aa622007-08-15 14:28:22 +00002127to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
2128:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
Brad3fb13632019-09-11 05:19:05 -04002129hours into the same local hour then. In the Eastern example, UTC times of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002130form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times
2131have the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1.
Brad3fb13632019-09-11 05:19:05 -04002132For example, at the Fall back transition of 2016, we get::
Georg Brandl116aa622007-08-15 14:28:22 +00002133
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002134 >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
2135 >>> for i in range(4):
2136 ... u = u0 + i*HOUR
2137 ... t = u.astimezone(Eastern)
2138 ... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
2139 ...
2140 04:00:00 UTC = 00:00:00 EDT 0
2141 05:00:00 UTC = 01:00:00 EDT 0
2142 06:00:00 UTC = 01:00:00 EST 1
2143 07:00:00 UTC = 02:00:00 EST 0
2144
Brad3fb13632019-09-11 05:19:05 -04002145Note that the :class:`.datetime` instances that differ only by the value of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002146:attr:`~datetime.fold` attribute are considered equal in comparisons.
2147
2148Applications that can't bear wall-time ambiguities should explicitly check the
Raymond Hettinger15f44ab2016-08-30 10:47:49 -07002149value of the :attr:`~datetime.fold` attribute or avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002150:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
2151or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
2152only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
2153
Sandro Tosid11d0d62012-04-24 19:46:06 +02002154.. seealso::
2155
wim glenn53f2af12017-06-06 12:54:41 -05002156 `dateutil.tz <https://dateutil.readthedocs.io/en/stable/tz.html>`_
Brad3fb13632019-09-11 05:19:05 -04002157 The :mod:`datetime` module has a basic :class:`timezone` class (for
2158 handling arbitrary fixed offsets from UTC) and its :attr:`timezone.utc`
2159 attribute (a UTC timezone instance).
Sandro Tosid11d0d62012-04-24 19:46:06 +02002160
Brad3fb13632019-09-11 05:19:05 -04002161 *dateutil.tz* library brings the *IANA timezone database*
2162 (also known as the Olson database) to Python, and its usage is
2163 recommended.
Sandro Tosi100b8892012-04-28 11:19:37 +02002164
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002165 `IANA timezone database <https://www.iana.org/time-zones>`_
Brad3fb13632019-09-11 05:19:05 -04002166 The Time Zone Database (often called tz, tzdata or zoneinfo) contains code
2167 and data that represent the history of local time for many representative
Sandro Tosi100b8892012-04-28 11:19:37 +02002168 locations around the globe. It is updated periodically to reflect changes
2169 made by political bodies to time zone boundaries, UTC offsets, and
2170 daylight-saving rules.
Sandro Tosid11d0d62012-04-24 19:46:06 +02002171
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002172
2173.. _datetime-timezone:
2174
2175:class:`timezone` Objects
2176--------------------------
2177
Alexander Belopolsky6d3c9a62011-05-04 10:28:26 -04002178The :class:`timezone` class is a subclass of :class:`tzinfo`, each
2179instance of which represents a timezone defined by a fixed offset from
Brad3fb13632019-09-11 05:19:05 -04002180UTC.
2181
2182Objects of this class cannot be used to represent timezone information in the
2183locations where different offsets are used in different days of the year or
2184where historical changes have been made to civil time.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002185
2186
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002187.. class:: timezone(offset, name=None)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002188
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002189 The *offset* argument must be specified as a :class:`timedelta`
Brad3fb13632019-09-11 05:19:05 -04002190 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002191 be strictly between ``-timedelta(hours=24)`` and
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002192 ``timedelta(hours=24)``, otherwise :exc:`ValueError` is raised.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002193
Brad3fb13632019-09-11 05:19:05 -04002194 The *name* argument is optional. If specified it must be a string that
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002195 will be used as the value returned by the :meth:`datetime.tzname` method.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002196
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07002197 .. versionadded:: 3.2
2198
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002199 .. versionchanged:: 3.7
2200 The UTC offset is not restricted to a whole number of minutes.
2201
2202
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002203.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002204
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002205 Return the fixed value specified when the :class:`timezone` instance is
Brad3fb13632019-09-11 05:19:05 -04002206 constructed.
2207
2208 The *dt* argument is ignored. The return value is a :class:`timedelta`
2209 instance equal to the difference between the local time and UTC.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002210
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002211 .. versionchanged:: 3.7
2212 The UTC offset is not restricted to a whole number of minutes.
2213
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002214.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002215
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002216 Return the fixed value specified when the :class:`timezone` instance
Brad3fb13632019-09-11 05:19:05 -04002217 is constructed.
2218
2219 If *name* is not provided in the constructor, the name returned by
2220 ``tzname(dt)`` is generated from the value of the ``offset`` as follows. If
2221 *offset* is ``timedelta(0)``, the name is "UTC", otherwise it is a string in
2222 the format ``UTC±HH:MM``, where ± is the sign of ``offset``, HH and MM are
2223 two digits of ``offset.hours`` and ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002224
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002225 .. versionchanged:: 3.6
Brad3fb13632019-09-11 05:19:05 -04002226 Name generated from ``offset=timedelta(0)`` is now plain `'UTC'`, not
2227 ``'UTC+00:00'``.
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002228
2229
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002230.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002231
2232 Always returns ``None``.
2233
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002234.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002235
Brad3fb13632019-09-11 05:19:05 -04002236 Return ``dt + offset``. The *dt* argument must be an aware
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002237 :class:`.datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002238
2239Class attributes:
2240
2241.. attribute:: timezone.utc
2242
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002243 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00002244
Georg Brandl116aa622007-08-15 14:28:22 +00002245
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002246.. index::
Serhiy Storchaka913876d2018-10-28 13:41:26 +02002247 single: % (percent); datetime format
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002248
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002249.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00002250
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002251:meth:`strftime` and :meth:`strptime` Behavior
2252----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00002253
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002254:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a
Georg Brandl116aa622007-08-15 14:28:22 +00002255``strftime(format)`` method, to create a string representing the time under the
Brad3fb13632019-09-11 05:19:05 -04002256control of an explicit format string.
Georg Brandl116aa622007-08-15 14:28:22 +00002257
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002258Conversely, the :meth:`datetime.strptime` class method creates a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002259:class:`.datetime` object from a string representing a date and time and a
Brad3fb13632019-09-11 05:19:05 -04002260corresponding format string.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002261
Brad3fb13632019-09-11 05:19:05 -04002262The table below provides a high-level comparison of :meth:`strftime`
2263versus :meth:`strptime`:
Georg Brandl116aa622007-08-15 14:28:22 +00002264
Brad3fb13632019-09-11 05:19:05 -04002265+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2266| | ``strftime`` | ``strptime`` |
2267+================+========================================================+==============================================================================+
2268| Usage | Convert object to a string according to a given format | Parse a string into a :class:`.datetime` object given a corresponding format |
2269+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2270| Type of method | Instance method | Class method |
2271+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2272| Method of | :class:`date`; :class:`.datetime`; :class:`.time` | :class:`.datetime` |
2273+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2274| Signature | ``strftime(format)`` | ``strptime(date_string, format)`` |
2275+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002276
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302277
Brad3fb13632019-09-11 05:19:05 -04002278:meth:`strftime` and :meth:`strptime` Format Codes
2279^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Christian Heimes895627f2007-12-08 17:28:33 +00002280
Brad3fb13632019-09-11 05:19:05 -04002281The following is a list of all the format codes that the 1989 C standard
2282requires, and these work on all platforms with a standard C implementation.
Georg Brandl116aa622007-08-15 14:28:22 +00002283
David Wolever569a5fa2013-08-12 16:56:02 -04002284+-----------+--------------------------------+------------------------+-------+
2285| Directive | Meaning | Example | Notes |
2286+===========+================================+========================+=======+
2287| ``%a`` | Weekday as locale's || Sun, Mon, ..., Sat | \(1) |
2288| | abbreviated name. | (en_US); | |
2289| | || So, Mo, ..., Sa | |
2290| | | (de_DE) | |
2291+-----------+--------------------------------+------------------------+-------+
2292| ``%A`` | Weekday as locale's full name. || Sunday, Monday, ..., | \(1) |
2293| | | Saturday (en_US); | |
2294| | || Sonntag, Montag, ..., | |
2295| | | Samstag (de_DE) | |
2296+-----------+--------------------------------+------------------------+-------+
2297| ``%w`` | Weekday as a decimal number, | 0, 1, ..., 6 | |
2298| | where 0 is Sunday and 6 is | | |
2299| | Saturday. | | |
2300+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002301| ``%d`` | Day of the month as a | 01, 02, ..., 31 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002302| | zero-padded decimal number. | | |
2303+-----------+--------------------------------+------------------------+-------+
2304| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
2305| | name. | (en_US); | |
2306| | || Jan, Feb, ..., Dez | |
2307| | | (de_DE) | |
2308+-----------+--------------------------------+------------------------+-------+
2309| ``%B`` | Month as locale's full name. || January, February, | \(1) |
2310| | | ..., December (en_US);| |
2311| | || Januar, Februar, ..., | |
2312| | | Dezember (de_DE) | |
2313+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002314| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002315| | decimal number. | | |
2316+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002317| ``%y`` | Year without century as a | 00, 01, ..., 99 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002318| | zero-padded decimal number. | | |
2319+-----------+--------------------------------+------------------------+-------+
2320| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
David Wolever5d07e702013-08-14 14:41:48 -04002321| | number. | 2014, ..., 9998, 9999 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002322+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002323| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002324| | zero-padded decimal number. | | |
2325+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002326| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002327| | zero-padded decimal number. | | |
2328+-----------+--------------------------------+------------------------+-------+
2329| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
2330| | AM or PM. || am, pm (de_DE) | \(3) |
2331+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002332| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002333| | decimal number. | | |
2334+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002335| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4), |
2336| | decimal number. | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002337+-----------+--------------------------------+------------------------+-------+
2338| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
2339| | number, zero-padded on the | 999999 | |
2340| | left. | | |
2341+-----------+--------------------------------+------------------------+-------+
Christophe Nanteuil92878822018-10-06 00:57:02 +02002342| ``%z`` | UTC offset in the form | (empty), +0000, | \(6) |
Brad3fb13632019-09-11 05:19:05 -04002343| | ``±HHMM[SS[.ffffff]]`` (empty | -0400, +1030, | |
Christophe Nanteuil92878822018-10-06 00:57:02 +02002344| | string if the object is | +063415, | |
2345| | naive). | -030712.345216 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002346+-----------+--------------------------------+------------------------+-------+
2347| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | |
2348| | if the object is naive). | | |
2349+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002350| ``%j`` | Day of the year as a | 001, 002, ..., 366 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002351| | zero-padded decimal number. | | |
2352+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002353| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7), |
2354| | (Sunday as the first day of | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002355| | the week) as a zero padded | | |
2356| | decimal number. All days in a | | |
2357| | new year preceding the first | | |
2358| | Sunday are considered to be in | | |
2359| | week 0. | | |
2360+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002361| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7), |
2362| | (Monday as the first day of | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002363| | the week) as a decimal number. | | |
2364| | All days in a new year | | |
2365| | preceding the first Monday | | |
2366| | are considered to be in | | |
2367| | week 0. | | |
2368+-----------+--------------------------------+------------------------+-------+
2369| ``%c`` | Locale's appropriate date and || Tue Aug 16 21:30:00 | \(1) |
2370| | time representation. | 1988 (en_US); | |
2371| | || Di 16 Aug 21:30:00 | |
2372| | | 1988 (de_DE) | |
2373+-----------+--------------------------------+------------------------+-------+
2374| ``%x`` | Locale's appropriate date || 08/16/88 (None); | \(1) |
2375| | representation. || 08/16/1988 (en_US); | |
2376| | || 16.08.1988 (de_DE) | |
2377+-----------+--------------------------------+------------------------+-------+
2378| ``%X`` | Locale's appropriate time || 21:30:00 (en_US); | \(1) |
2379| | representation. || 21:30:00 (de_DE) | |
2380+-----------+--------------------------------+------------------------+-------+
2381| ``%%`` | A literal ``'%'`` character. | % | |
2382+-----------+--------------------------------+------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00002383
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002384Several additional directives not required by the C89 standard are included for
Brad3fb13632019-09-11 05:19:05 -04002385convenience. These parameters all correspond to ISO 8601 date values.
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002386
2387+-----------+--------------------------------+------------------------+-------+
2388| Directive | Meaning | Example | Notes |
2389+===========+================================+========================+=======+
2390| ``%G`` | ISO 8601 year with century | 0001, 0002, ..., 2013, | \(8) |
2391| | representing the year that | 2014, ..., 9998, 9999 | |
2392| | contains the greater part of | | |
2393| | the ISO week (``%V``). | | |
2394+-----------+--------------------------------+------------------------+-------+
2395| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
2396| | number where 1 is Monday. | | |
2397+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002398| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8), |
2399| | number with Monday as | | \(9) |
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002400| | the first day of the week. | | |
2401| | Week 01 is the week containing | | |
2402| | Jan 4. | | |
2403+-----------+--------------------------------+------------------------+-------+
2404
Brad3fb13632019-09-11 05:19:05 -04002405These may not be available on all platforms when used with the :meth:`strftime`
2406method. The ISO 8601 year and ISO 8601 week directives are not interchangeable
2407with the year and week number directives above. Calling :meth:`strptime` with
2408incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
2409
2410The full set of format codes supported varies across platforms, because Python
2411calls the platform C library's :func:`strftime` function, and platform
2412variations are common. To see the full set of format codes supported on your
2413platform, consult the :manpage:`strftime(3)` documentation.
2414
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002415.. versionadded:: 3.6
2416 ``%G``, ``%u`` and ``%V`` were added.
2417
Brad3fb13632019-09-11 05:19:05 -04002418Technical Detail
2419^^^^^^^^^^^^^^^^
2420
2421Broadly speaking, ``d.strftime(fmt)`` acts like the :mod:`time` module's
2422``time.strftime(fmt, d.timetuple())`` although not all objects support a
2423:meth:`timetuple` method.
2424
2425For the :meth:`datetime.strptime` class method, the default value is
2426``1900-01-01T00:00:00.000``: any components not specified in the format string
2427will be pulled from the default value. [#]_
2428
2429Using ``datetime.strptime(date_string, format)`` is equivalent to::
2430
2431 datetime(*(time.strptime(date_string, format)[0:6]))
2432
2433except when the format includes sub-second components or timezone offset
2434information, which are supported in ``datetime.strptime`` but are discarded by
2435``time.strptime``.
2436
2437For :class:`.time` objects, the format codes for year, month, and day should not
2438be used, as :class:`time` objects have no such values. If they're used anyway,
2439``1900`` is substituted for the year, and ``1`` for the month and day.
2440
2441For :class:`date` objects, the format codes for hours, minutes, seconds, and
2442microseconds should not be used, as :class:`date` objects have no such
2443values. If they're used anyway, ``0`` is substituted for them.
2444
2445For the same reason, handling of format strings containing Unicode code points
2446that can't be represented in the charset of the current locale is also
2447platform-dependent. On some platforms such code points are preserved intact in
2448the output, while on others ``strftime`` may raise :exc:`UnicodeError` or return
2449an empty string instead.
2450
Christian Heimes895627f2007-12-08 17:28:33 +00002451Notes:
2452
2453(1)
David Wolever569a5fa2013-08-12 16:56:02 -04002454 Because the format depends on the current locale, care should be taken when
2455 making assumptions about the output value. Field orderings will vary (for
2456 example, "month/day/year" versus "day/month/year"), and the output may
2457 contain Unicode characters encoded using the locale's default encoding (for
Georg Brandlad321532013-10-29 08:05:10 +01002458 example, if the current locale is ``ja_JP``, the default encoding could be
David Wolever569a5fa2013-08-12 16:56:02 -04002459 any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale`
2460 to determine the current locale's encoding).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002461
2462(2)
David Wolever569a5fa2013-08-12 16:56:02 -04002463 The :meth:`strptime` method can parse years in the full [1, 9999] range, but
2464 years < 1000 must be zero-filled to 4-digit width.
Alexander Belopolsky085556a2011-01-10 23:28:33 +00002465
2466 .. versionchanged:: 3.2
2467 In previous versions, :meth:`strftime` method was restricted to
2468 years >= 1900.
2469
Alexander Belopolsky5611a1c2011-05-02 14:14:48 -04002470 .. versionchanged:: 3.3
2471 In version 3.2, :meth:`strftime` method was restricted to
2472 years >= 1000.
2473
David Wolever569a5fa2013-08-12 16:56:02 -04002474(3)
2475 When used with the :meth:`strptime` method, the ``%p`` directive only affects
2476 the output hour field if the ``%I`` directive is used to parse the hour.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00002477
David Wolever569a5fa2013-08-12 16:56:02 -04002478(4)
2479 Unlike the :mod:`time` module, the :mod:`datetime` module does not support
2480 leap seconds.
2481
2482(5)
2483 When used with the :meth:`strptime` method, the ``%f`` directive
Brad3fb13632019-09-11 05:19:05 -04002484 accepts from one to six digits and zero pads on the right. ``%f`` is
David Wolever569a5fa2013-08-12 16:56:02 -04002485 an extension to the set of format characters in the C standard (but
2486 implemented separately in datetime objects, and therefore always
2487 available).
2488
2489(6)
2490 For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
2491 strings.
2492
2493 For an aware object:
2494
2495 ``%z``
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002496 :meth:`utcoffset` is transformed into a string of the form
Brad3fb13632019-09-11 05:19:05 -04002497 ``±HHMM[SS[.ffffff]]``, where ``HH`` is a 2-digit string giving the number
2498 of UTC offset hours, ``MM`` is a 2-digit string giving the number of UTC
2499 offset minutes, SS is a 2-digit string giving the number of UTC offset
2500 seconds and ``ffffff`` is a 6-digit string giving the number of UTC
2501 offset microseconds. The ``ffffff`` part is omitted when the offset is a
2502 whole number of seconds and both the ``ffffff`` and the ``SS`` part is
2503 omitted when the offset is a whole number of minutes. For example, if
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002504 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
2505 replaced with the string ``'-0330'``.
2506
2507 .. versionchanged:: 3.7
2508 The UTC offset is not restricted to a whole number of minutes.
David Wolever569a5fa2013-08-12 16:56:02 -04002509
Mario Corchero32318932017-10-26 01:35:41 +01002510 .. versionchanged:: 3.7
2511 When the ``%z`` directive is provided to the :meth:`strptime` method,
2512 the UTC offsets can have a colon as a separator between hours, minutes
2513 and seconds.
2514 For example, ``'+01:00:00'`` will be parsed as an offset of one hour.
2515 In addition, providing ``'Z'`` is identical to ``'+00:00'``.
2516
David Wolever569a5fa2013-08-12 16:56:02 -04002517 ``%Z``
2518 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty
Brad3fb13632019-09-11 05:19:05 -04002519 string. Otherwise ``%Z`` is replaced by the returned value, which must
David Wolever569a5fa2013-08-12 16:56:02 -04002520 be a string.
2521
2522 .. versionchanged:: 3.2
2523 When the ``%z`` directive is provided to the :meth:`strptime` method, an
Brad3fb13632019-09-11 05:19:05 -04002524 aware :class:`.datetime` object will be produced. The ``tzinfo`` of the
David Wolever569a5fa2013-08-12 16:56:02 -04002525 result will be set to a :class:`timezone` instance.
2526
2527(7)
2528 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002529 in calculations when the day of the week and the calendar year (``%Y``)
2530 are specified.
2531
2532(8)
2533 Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the
2534 day of the week and the ISO year (``%G``) are specified in a
2535 :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
Martin Panterf1579822016-05-26 06:03:33 +00002536 interchangeable.
R David Murray9075d8b2012-05-14 22:14:46 -04002537
Mike Gleen6b9c2042019-06-18 19:14:57 +01002538(9)
2539 When used with the :meth:`strptime` method, the leading zero is optional
2540 for formats ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, ``%S``, ``%J``, ``%U``,
2541 ``%W``, and ``%V``. Format ``%y`` does require a leading zero.
2542
R David Murray9075d8b2012-05-14 22:14:46 -04002543.. rubric:: Footnotes
2544
2545.. [#] If, that is, we ignore the effects of Relativity
Brad3fb13632019-09-11 05:19:05 -04002546
2547.. [#] This matches the definition of the "proleptic Gregorian" calendar in
2548 Dershowitz and Reingold's book *Calendrical Calculations*,
2549 where it's the base calendar for all computations. See the book for
2550 algorithms for converting between proleptic Gregorian ordinals and
2551 many other calendar systems.
2552
2553.. [#] See R. H. van Gent's `guide to the mathematics of the ISO 8601 calendar
2554 <https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm>`_
2555 for a good explanation.
2556
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302557.. [#] Passing ``datetime.strptime('Feb 29', '%b %d')`` will fail since ``1900`` is not a leap year.