blob: b1e1b25691d8f149e970b1027097ec6104702ab4 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`datetime` --- Basic date and time types
2=============================================
3
4.. module:: datetime
5 :synopsis: Basic date and time types.
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Tim Peters <tim@zope.com>
8.. sectionauthor:: Tim Peters <tim@zope.com>
9.. sectionauthor:: A.M. Kuchling <amk@amk.ca>
10
Andrew Kuchling2e3743c2014-03-19 16:23:01 -040011**Source code:** :source:`Lib/datetime.py`
12
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040013--------------
14
Christian Heimes5b5e81c2007-12-31 16:14:33 +000015.. XXX what order should the types be discussed in?
Georg Brandl116aa622007-08-15 14:28:22 +000016
Brad3fb13632019-09-11 05:19:05 -040017The :mod:`datetime` module supplies classes for manipulating dates and times.
Georg Brandl116aa622007-08-15 14:28:22 +000018
Brad3fb13632019-09-11 05:19:05 -040019While date and time arithmetic is supported, the focus of the implementation is
20on efficient attribute extraction for output formatting and manipulation.
Georg Brandl116aa622007-08-15 14:28:22 +000021
Brad3fb13632019-09-11 05:19:05 -040022.. seealso::
R David Murray9075d8b2012-05-14 22:14:46 -040023
Brad3fb13632019-09-11 05:19:05 -040024 Module :mod:`calendar`
25 General calendar related functions.
26
27 Module :mod:`time`
28 Time access and conversions.
29
30 Package `dateutil <https://dateutil.readthedocs.io/en/stable/>`_
31 Third-party library with expanded time zone and parsing support.
32
33.. _datetime-naive-aware:
34
35Aware and Naive Objects
36-----------------------
37
38Date and time objects may be categorized as "aware" or "naive."
39
40With sufficient knowledge of applicable algorithmic and political time
41adjustments, such as time zone and daylight saving time information,
42an **aware** object can locate itself relative to other aware objects.
43An aware object represents a specific moment in time that is not open to
44interpretation. [#]_
45
46A **naive** object does not contain enough information to unambiguously locate
47itself relative to other date/time objects. Whether a naive object represents
R David Murray539f2392012-05-14 22:17:23 -040048Coordinated Universal Time (UTC), local time, or time in some other timezone is
49purely up to the program, just like it is up to the program whether a
Brad3fb13632019-09-11 05:19:05 -040050particular number represents metres, miles, or mass. Naive objects are easy to
R David Murray539f2392012-05-14 22:17:23 -040051understand and to work with, at the cost of ignoring some aspects of reality.
Georg Brandl116aa622007-08-15 14:28:22 +000052
R David Murray539f2392012-05-14 22:17:23 -040053For applications requiring aware objects, :class:`.datetime` and :class:`.time`
Martin Panter16c7cfd2016-04-01 21:48:24 +000054objects have an optional time zone information attribute, :attr:`!tzinfo`, that
R David Murray539f2392012-05-14 22:17:23 -040055can be set to an instance of a subclass of the abstract :class:`tzinfo` class.
56These :class:`tzinfo` objects capture information about the offset from UTC
Brad3fb13632019-09-11 05:19:05 -040057time, the time zone name, and whether daylight saving time is in effect.
58
59Only one concrete :class:`tzinfo` class, the :class:`timezone` class, is
60supplied by the :mod:`datetime` module. The :class:`timezone` class can
61represent simple timezones with fixed offsets from UTC, such as UTC itself or
62North American EST and EDT timezones. Supporting timezones at deeper levels of
63detail is up to the application. The rules for time adjustment across the
Alexander Belopolsky4e749a12010-06-14 14:15:50 +000064world are more political than rational, change frequently, and there is no
65standard suitable for every application aside from UTC.
Georg Brandl116aa622007-08-15 14:28:22 +000066
Brad3fb13632019-09-11 05:19:05 -040067Constants
68---------
69
Georg Brandl116aa622007-08-15 14:28:22 +000070The :mod:`datetime` module exports the following constants:
71
Georg Brandl116aa622007-08-15 14:28:22 +000072.. data:: MINYEAR
73
Ezio Melotti35ec7f72011-10-02 12:44:50 +030074 The smallest year number allowed in a :class:`date` or :class:`.datetime` object.
Georg Brandl116aa622007-08-15 14:28:22 +000075 :const:`MINYEAR` is ``1``.
76
77
78.. data:: MAXYEAR
79
Ezio Melotti35ec7f72011-10-02 12:44:50 +030080 The largest year number allowed in a :class:`date` or :class:`.datetime` object.
Georg Brandl116aa622007-08-15 14:28:22 +000081 :const:`MAXYEAR` is ``9999``.
82
Georg Brandl116aa622007-08-15 14:28:22 +000083Available Types
84---------------
85
Georg Brandl116aa622007-08-15 14:28:22 +000086.. class:: date
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000087 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000088
89 An idealized naive date, assuming the current Gregorian calendar always was, and
90 always will be, in effect. Attributes: :attr:`year`, :attr:`month`, and
91 :attr:`day`.
92
93
94.. class:: time
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000095 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000096
97 An idealized time, independent of any particular day, assuming that every day
Brad3fb13632019-09-11 05:19:05 -040098 has exactly 24\*60\*60 seconds. (There is no notion of "leap seconds" here.)
Georg Brandl116aa622007-08-15 14:28:22 +000099 Attributes: :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
Martin Panter16c7cfd2016-04-01 21:48:24 +0000100 and :attr:`.tzinfo`.
Georg Brandl116aa622007-08-15 14:28:22 +0000101
102
103.. class:: datetime
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +0000104 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +0000105
106 A combination of a date and a time. Attributes: :attr:`year`, :attr:`month`,
107 :attr:`day`, :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
Martin Panter16c7cfd2016-04-01 21:48:24 +0000108 and :attr:`.tzinfo`.
Georg Brandl116aa622007-08-15 14:28:22 +0000109
110
111.. class:: timedelta
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +0000112 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +0000113
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300114 A duration expressing the difference between two :class:`date`, :class:`.time`,
115 or :class:`.datetime` instances to microsecond resolution.
Georg Brandl116aa622007-08-15 14:28:22 +0000116
117
118.. class:: tzinfo
Martin Panter16c7cfd2016-04-01 21:48:24 +0000119 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +0000120
Brad3fb13632019-09-11 05:19:05 -0400121 An abstract base class for time zone information objects. These are used by the
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300122 :class:`.datetime` and :class:`.time` classes to provide a customizable notion of
Georg Brandl116aa622007-08-15 14:28:22 +0000123 time adjustment (for example, to account for time zone and/or daylight saving
124 time).
125
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000126.. class:: timezone
Martin Panter16c7cfd2016-04-01 21:48:24 +0000127 :noindex:
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000128
129 A class that implements the :class:`tzinfo` abstract base class as a
130 fixed offset from the UTC.
131
132 .. versionadded:: 3.2
133
Georg Brandl116aa622007-08-15 14:28:22 +0000134Objects of these types are immutable.
135
Georg Brandl116aa622007-08-15 14:28:22 +0000136Subclass relationships::
137
138 object
139 timedelta
140 tzinfo
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000141 timezone
Georg Brandl116aa622007-08-15 14:28:22 +0000142 time
143 date
144 datetime
145
Brad3fb13632019-09-11 05:19:05 -0400146Common Properties
147^^^^^^^^^^^^^^^^^
148
149The :class:`date`, :class:`.datetime`, :class:`.time`, and :class:`timezone` types
150share these common features:
151
152- Objects of these types are immutable.
153- Objects of these types are hashable, meaning that they can be used as
154 dictionary keys.
155- Objects of these types support efficient pickling via the :mod:`pickle` module.
156
157Determining if an Object is Aware or Naive
158^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
159
160Objects of the :class:`date` type are always naive.
161
162An object of type :class:`.time` or :class:`.datetime` may be aware or naive.
163
164A :class:`.datetime` object *d* is aware if both of the following hold:
165
1661. ``d.tzinfo`` is not ``None``
1672. ``d.tzinfo.utcoffset(d)`` does not return ``None``
168
169Otherwise, *d* is naive.
170
171A :class:`.time` object *t* is aware if both of the following hold:
172
1731. ``t.tzinfo`` is not ``None``
1742. ``t.tzinfo.utcoffset(None)`` does not return ``None``.
175
176Otherwise, *t* is naive.
177
178The distinction between aware and naive doesn't apply to :class:`timedelta`
179objects.
Georg Brandl116aa622007-08-15 14:28:22 +0000180
181.. _datetime-timedelta:
182
183:class:`timedelta` Objects
184--------------------------
185
186A :class:`timedelta` object represents a duration, the difference between two
187dates or times.
188
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000189.. class:: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000190
Brad3fb13632019-09-11 05:19:05 -0400191 All arguments are optional and default to ``0``. Arguments may be integers
Georg Brandl116aa622007-08-15 14:28:22 +0000192 or floats, and may be positive or negative.
193
Brad3fb13632019-09-11 05:19:05 -0400194 Only *days*, *seconds* and *microseconds* are stored internally.
195 Arguments are converted to those units:
Georg Brandl116aa622007-08-15 14:28:22 +0000196
197 * A millisecond is converted to 1000 microseconds.
198 * A minute is converted to 60 seconds.
199 * An hour is converted to 3600 seconds.
200 * A week is converted to 7 days.
201
202 and days, seconds and microseconds are then normalized so that the
203 representation is unique, with
204
205 * ``0 <= microseconds < 1000000``
206 * ``0 <= seconds < 3600*24`` (the number of seconds in one day)
207 * ``-999999999 <= days <= 999999999``
208
Brad3fb13632019-09-11 05:19:05 -0400209 The following example illustrates how any arguments besides
210 *days*, *seconds* and *microseconds* are "merged" and normalized into those
211 three resulting attributes::
212
213 >>> from datetime import timedelta
214 >>> delta = timedelta(
215 ... days=50,
216 ... seconds=27,
217 ... microseconds=10,
218 ... milliseconds=29000,
219 ... minutes=5,
220 ... hours=8,
221 ... weeks=2
222 ... )
223 >>> # Only days, seconds, and microseconds remain
224 >>> delta
225 datetime.timedelta(days=64, seconds=29156, microseconds=10)
226
Alexander Belopolsky790d2692013-08-04 14:51:35 -0400227 If any argument is a float and there are fractional microseconds,
228 the fractional microseconds left over from all arguments are
229 combined and their sum is rounded to the nearest microsecond using
Brad3fb13632019-09-11 05:19:05 -0400230 round-half-to-even tiebreaker. If no argument is a float, the
Alexander Belopolsky790d2692013-08-04 14:51:35 -0400231 conversion and normalization processes are exact (no information is
232 lost).
Georg Brandl116aa622007-08-15 14:28:22 +0000233
234 If the normalized value of days lies outside the indicated range,
235 :exc:`OverflowError` is raised.
236
237 Note that normalization of negative values may be surprising at first. For
Brad3fb13632019-09-11 05:19:05 -0400238 example::
Georg Brandl116aa622007-08-15 14:28:22 +0000239
Christian Heimes895627f2007-12-08 17:28:33 +0000240 >>> from datetime import timedelta
Georg Brandl116aa622007-08-15 14:28:22 +0000241 >>> d = timedelta(microseconds=-1)
242 >>> (d.days, d.seconds, d.microseconds)
243 (-1, 86399, 999999)
244
Georg Brandl116aa622007-08-15 14:28:22 +0000245
Brad3fb13632019-09-11 05:19:05 -0400246Class attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000247
248.. attribute:: timedelta.min
249
250 The most negative :class:`timedelta` object, ``timedelta(-999999999)``.
251
252
253.. attribute:: timedelta.max
254
255 The most positive :class:`timedelta` object, ``timedelta(days=999999999,
256 hours=23, minutes=59, seconds=59, microseconds=999999)``.
257
258
259.. attribute:: timedelta.resolution
260
261 The smallest possible difference between non-equal :class:`timedelta` objects,
262 ``timedelta(microseconds=1)``.
263
264Note that, because of normalization, ``timedelta.max`` > ``-timedelta.min``.
265``-timedelta.max`` is not representable as a :class:`timedelta` object.
266
267Instance attributes (read-only):
268
269+------------------+--------------------------------------------+
270| Attribute | Value |
271+==================+============================================+
272| ``days`` | Between -999999999 and 999999999 inclusive |
273+------------------+--------------------------------------------+
274| ``seconds`` | Between 0 and 86399 inclusive |
275+------------------+--------------------------------------------+
276| ``microseconds`` | Between 0 and 999999 inclusive |
277+------------------+--------------------------------------------+
278
279Supported operations:
280
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000281.. XXX this table is too wide!
Georg Brandl116aa622007-08-15 14:28:22 +0000282
283+--------------------------------+-----------------------------------------------+
284| Operation | Result |
285+================================+===============================================+
286| ``t1 = t2 + t3`` | Sum of *t2* and *t3*. Afterwards *t1*-*t2* == |
287| | *t3* and *t1*-*t3* == *t2* are true. (1) |
288+--------------------------------+-----------------------------------------------+
289| ``t1 = t2 - t3`` | Difference of *t2* and *t3*. Afterwards *t1* |
290| | == *t2* - *t3* and *t2* == *t1* + *t3* are |
Farhaan Bukhsh5b6e49a2018-07-05 00:12:05 +0530291| | true. (1)(6) |
Georg Brandl116aa622007-08-15 14:28:22 +0000292+--------------------------------+-----------------------------------------------+
Georg Brandl5c106642007-11-29 17:41:05 +0000293| ``t1 = t2 * i or t1 = i * t2`` | Delta multiplied by an integer. |
Georg Brandl116aa622007-08-15 14:28:22 +0000294| | Afterwards *t1* // i == *t2* is true, |
295| | provided ``i != 0``. |
296+--------------------------------+-----------------------------------------------+
297| | In general, *t1* \* i == *t1* \* (i-1) + *t1* |
298| | is true. (1) |
299+--------------------------------+-----------------------------------------------+
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000300| ``t1 = t2 * f or t1 = f * t2`` | Delta multiplied by a float. The result is |
301| | rounded to the nearest multiple of |
302| | timedelta.resolution using round-half-to-even.|
303+--------------------------------+-----------------------------------------------+
Yasser Af40b4a02019-03-15 23:56:58 -0400304| ``f = t2 / t3`` | Division (3) of overall duration *t2* by |
305| | interval unit *t3*. Returns a :class:`float` |
306| | object. |
Mark Dickinson7c186e22010-04-20 22:32:49 +0000307+--------------------------------+-----------------------------------------------+
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000308| ``t1 = t2 / f or t1 = t2 / i`` | Delta divided by a float or an int. The result|
309| | is rounded to the nearest multiple of |
310| | timedelta.resolution using round-half-to-even.|
311+--------------------------------+-----------------------------------------------+
Mark Dickinson7c186e22010-04-20 22:32:49 +0000312| ``t1 = t2 // i`` or | The floor is computed and the remainder (if |
Brad3fb13632019-09-11 05:19:05 -0400313| ``t1 = t2 // t3`` | any) is thrown away. In the second case, an |
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000314| | integer is returned. (3) |
Mark Dickinson7c186e22010-04-20 22:32:49 +0000315+--------------------------------+-----------------------------------------------+
316| ``t1 = t2 % t3`` | The remainder is computed as a |
317| | :class:`timedelta` object. (3) |
318+--------------------------------+-----------------------------------------------+
319| ``q, r = divmod(t1, t2)`` | Computes the quotient and the remainder: |
320| | ``q = t1 // t2`` (3) and ``r = t1 % t2``. |
321| | q is an integer and r is a :class:`timedelta` |
322| | object. |
Georg Brandl116aa622007-08-15 14:28:22 +0000323+--------------------------------+-----------------------------------------------+
324| ``+t1`` | Returns a :class:`timedelta` object with the |
325| | same value. (2) |
326+--------------------------------+-----------------------------------------------+
Serhiy Storchaka3f819ca2018-10-31 02:26:06 +0200327| ``-t1`` | equivalent to |
328| | :class:`timedelta`\ (-*t1.days*, |
329| | -*t1.seconds*, -*t1.microseconds*), |
330| | and to *t1*\* -1. (1)(4) |
Georg Brandl116aa622007-08-15 14:28:22 +0000331+--------------------------------+-----------------------------------------------+
Brad3fb13632019-09-11 05:19:05 -0400332| ``abs(t)`` | equivalent to +\ *t* when ``t.days >= 0``, |
333| | and to -*t* when ``t.days < 0``. (2) |
Georg Brandl116aa622007-08-15 14:28:22 +0000334+--------------------------------+-----------------------------------------------+
Georg Brandlf55c3152010-07-31 11:40:07 +0000335| ``str(t)`` | Returns a string in the form |
336| | ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D |
337| | is negative for negative ``t``. (5) |
338+--------------------------------+-----------------------------------------------+
Utkarsh Upadhyaycc5a65c2017-07-25 23:51:33 +0200339| ``repr(t)`` | Returns a string representation of the |
340| | :class:`timedelta` object as a constructor |
341| | call with canonical attribute values. |
Georg Brandlf55c3152010-07-31 11:40:07 +0000342+--------------------------------+-----------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000343
Utkarsh Upadhyaycc5a65c2017-07-25 23:51:33 +0200344
Georg Brandl116aa622007-08-15 14:28:22 +0000345Notes:
346
347(1)
Brad3fb13632019-09-11 05:19:05 -0400348 This is exact but may overflow.
Georg Brandl116aa622007-08-15 14:28:22 +0000349
350(2)
Brad3fb13632019-09-11 05:19:05 -0400351 This is exact and cannot overflow.
Georg Brandl116aa622007-08-15 14:28:22 +0000352
353(3)
354 Division by 0 raises :exc:`ZeroDivisionError`.
355
356(4)
357 -*timedelta.max* is not representable as a :class:`timedelta` object.
358
Georg Brandlf55c3152010-07-31 11:40:07 +0000359(5)
Brad3fb13632019-09-11 05:19:05 -0400360 String representations of :class:`timedelta` objects are normalized
361 similarly to their internal representation. This leads to somewhat
362 unusual results for negative timedeltas. For example::
Georg Brandlf55c3152010-07-31 11:40:07 +0000363
Brad3fb13632019-09-11 05:19:05 -0400364 >>> timedelta(hours=-5)
365 datetime.timedelta(days=-1, seconds=68400)
366 >>> print(_)
367 -1 day, 19:00:00
Georg Brandlf55c3152010-07-31 11:40:07 +0000368
Farhaan Bukhsh5b6e49a2018-07-05 00:12:05 +0530369(6)
370 The expression ``t2 - t3`` will always be equal to the expression ``t2 + (-t3)`` except
371 when t3 is equal to ``timedelta.max``; in that case the former will produce a result
372 while the latter will overflow.
373
Brad3fb13632019-09-11 05:19:05 -0400374In addition to the operations listed above, :class:`timedelta` objects support
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300375certain additions and subtractions with :class:`date` and :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +0000376objects (see below).
377
Georg Brandl67b21b72010-08-17 15:07:14 +0000378.. versionchanged:: 3.2
379 Floor division and true division of a :class:`timedelta` object by another
380 :class:`timedelta` object are now supported, as are remainder operations and
Brad3fb13632019-09-11 05:19:05 -0400381 the :func:`divmod` function. True division and multiplication of a
Georg Brandl67b21b72010-08-17 15:07:14 +0000382 :class:`timedelta` object by a :class:`float` object are now supported.
Mark Dickinson7c186e22010-04-20 22:32:49 +0000383
384
Brad3fb13632019-09-11 05:19:05 -0400385Comparisons of :class:`timedelta` objects are supported, with some caveats.
Georg Brandl116aa622007-08-15 14:28:22 +0000386
Brad3fb13632019-09-11 05:19:05 -0400387The comparisons ``==`` or ``!=`` *always* return a :class:`bool`, no matter
388the type of the compared object::
389
390 >>> from datetime import timedelta
391 >>> delta1 = timedelta(seconds=57)
392 >>> delta2 = timedelta(hours=25, seconds=2)
393 >>> delta2 != delta1
394 True
395 >>> delta2 == 5
396 False
397
398For all other comparisons (such as ``<`` and ``>``), when a :class:`timedelta`
399object is compared to an object of a different type, :exc:`TypeError`
400is raised::
401
402 >>> delta2 > delta1
403 True
404 >>> delta2 > 5
405 Traceback (most recent call last):
406 File "<stdin>", line 1, in <module>
407 TypeError: '>' not supported between instances of 'datetime.timedelta' and 'int'
408
409In Boolean contexts, a :class:`timedelta` object is
Georg Brandl116aa622007-08-15 14:28:22 +0000410considered to be true if and only if it isn't equal to ``timedelta(0)``.
411
Antoine Pitroube6859d2009-11-25 23:02:32 +0000412Instance methods:
413
414.. method:: timedelta.total_seconds()
415
416 Return the total number of seconds contained in the duration. Equivalent to
Yasser Af40b4a02019-03-15 23:56:58 -0400417 ``td / timedelta(seconds=1)``. For interval units other than seconds, use the
418 division form directly (e.g. ``td / timedelta(microseconds=1)``).
Mark Dickinson0381e3f2010-05-08 14:35:02 +0000419
420 Note that for very large time intervals (greater than 270 years on
421 most platforms) this method will lose microsecond accuracy.
Antoine Pitroube6859d2009-11-25 23:02:32 +0000422
423 .. versionadded:: 3.2
424
Brad3fb13632019-09-11 05:19:05 -0400425Examples of usage: :class:`timedelta`
426^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Antoine Pitroube6859d2009-11-25 23:02:32 +0000427
Brad3fb13632019-09-11 05:19:05 -0400428An additional example of normalization::
Georg Brandl48310cd2009-01-03 21:18:54 +0000429
Brad3fb13632019-09-11 05:19:05 -0400430 >>> # Components of another_year add up to exactly 365 days
Christian Heimes895627f2007-12-08 17:28:33 +0000431 >>> from datetime import timedelta
432 >>> year = timedelta(days=365)
Georg Brandl48310cd2009-01-03 21:18:54 +0000433 >>> another_year = timedelta(weeks=40, days=84, hours=23,
Brad3fb13632019-09-11 05:19:05 -0400434 ... minutes=50, seconds=600)
Christian Heimes895627f2007-12-08 17:28:33 +0000435 >>> year == another_year
436 True
Brad3fb13632019-09-11 05:19:05 -0400437 >>> year.total_seconds()
438 31536000.0
439
440Examples of :class:`timedelta` arithmetic::
441
442 >>> from datetime import timedelta
443 >>> year = timedelta(days=365)
Christian Heimes895627f2007-12-08 17:28:33 +0000444 >>> ten_years = 10 * year
Brad3fb13632019-09-11 05:19:05 -0400445 >>> ten_years
446 datetime.timedelta(days=3650)
447 >>> ten_years.days // 365
448 10
Christian Heimes895627f2007-12-08 17:28:33 +0000449 >>> nine_years = ten_years - year
Brad3fb13632019-09-11 05:19:05 -0400450 >>> nine_years
451 datetime.timedelta(days=3285)
delirious-lettucec7b3f0f2017-05-18 19:01:00 -0600452 >>> three_years = nine_years // 3
Christian Heimes895627f2007-12-08 17:28:33 +0000453 >>> three_years, three_years.days // 365
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +0200454 (datetime.timedelta(days=1095), 3)
Georg Brandl116aa622007-08-15 14:28:22 +0000455
456.. _datetime-date:
457
458:class:`date` Objects
459---------------------
460
461A :class:`date` object represents a date (year, month and day) in an idealized
462calendar, the current Gregorian calendar indefinitely extended in both
Brad3fb13632019-09-11 05:19:05 -0400463directions.
Georg Brandl116aa622007-08-15 14:28:22 +0000464
Brad3fb13632019-09-11 05:19:05 -0400465January 1 of year 1 is called day number 1, January 2 of year 1 is
466called day number 2, and so on. [#]_
Georg Brandl116aa622007-08-15 14:28:22 +0000467
468.. class:: date(year, month, day)
469
Brad3fb13632019-09-11 05:19:05 -0400470 All arguments are required. Arguments must be integers, in the following
Georg Brandl116aa622007-08-15 14:28:22 +0000471 ranges:
472
473 * ``MINYEAR <= year <= MAXYEAR``
474 * ``1 <= month <= 12``
475 * ``1 <= day <= number of days in the given month and year``
476
477 If an argument outside those ranges is given, :exc:`ValueError` is raised.
478
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000479
Georg Brandl116aa622007-08-15 14:28:22 +0000480Other constructors, all class methods:
481
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000482.. classmethod:: date.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000483
Brad3fb13632019-09-11 05:19:05 -0400484 Return the current local date.
Georg Brandl116aa622007-08-15 14:28:22 +0000485
Brad3fb13632019-09-11 05:19:05 -0400486 This is equivalent to ``date.fromtimestamp(time.time())``.
Georg Brandl116aa622007-08-15 14:28:22 +0000487
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000488.. classmethod:: date.fromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000489
Brad3fb13632019-09-11 05:19:05 -0400490 Return the local date corresponding to the POSIX timestamp, such as is
491 returned by :func:`time.time`.
492
493 This may raise :exc:`OverflowError`, if the timestamp is out
494 of the range of values supported by the platform C :c:func:`localtime`
495 function, and :exc:`OSError` on :c:func:`localtime` failure.
496 It's common for this to be restricted to years from 1970 through 2038. Note
Georg Brandl116aa622007-08-15 14:28:22 +0000497 that on non-POSIX systems that include leap seconds in their notion of a
498 timestamp, leap seconds are ignored by :meth:`fromtimestamp`.
499
Victor Stinner5d272cc2012-03-13 13:35:55 +0100500 .. versionchanged:: 3.3
501 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
502 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100503 :c:func:`localtime` function. Raise :exc:`OSError` instead of
504 :exc:`ValueError` on :c:func:`localtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100505
Georg Brandl116aa622007-08-15 14:28:22 +0000506
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000507.. classmethod:: date.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000508
Brad3fb13632019-09-11 05:19:05 -0400509 Return the date corresponding to the proleptic Gregorian ordinal, where
510 January 1 of year 1 has ordinal 1.
511
512 :exc:`ValueError` is raised unless ``1 <= ordinal <=
513 date.max.toordinal()``. For any date *d*,
514 ``date.fromordinal(d.toordinal()) == d``.
Georg Brandl116aa622007-08-15 14:28:22 +0000515
Georg Brandl116aa622007-08-15 14:28:22 +0000516
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500517.. classmethod:: date.fromisoformat(date_string)
518
Brad3fb13632019-09-11 05:19:05 -0400519 Return a :class:`date` corresponding to a *date_string* given in the format
520 ``YYYY-MM-DD``::
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500521
Brad3fb13632019-09-11 05:19:05 -0400522 >>> from datetime import date
523 >>> date.fromisoformat('2019-12-04')
524 datetime.date(2019, 12, 4)
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500525
Brad3fb13632019-09-11 05:19:05 -0400526 This is the inverse of :meth:`date.isoformat`. It only supports the format
527 ``YYYY-MM-DD``.
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500528
Brad3fb13632019-09-11 05:19:05 -0400529 .. versionadded:: 3.7
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500530
531
Paul Ganssle88c09372019-04-29 09:22:03 -0400532.. classmethod:: date.fromisocalendar(year, week, day)
533
534 Return a :class:`date` corresponding to the ISO calendar date specified by
535 year, week and day. This is the inverse of the function :meth:`date.isocalendar`.
536
537 .. versionadded:: 3.8
538
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500539
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000540Class attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000541
542.. attribute:: date.min
543
544 The earliest representable date, ``date(MINYEAR, 1, 1)``.
545
546
547.. attribute:: date.max
548
549 The latest representable date, ``date(MAXYEAR, 12, 31)``.
550
551
552.. attribute:: date.resolution
553
554 The smallest possible difference between non-equal date objects,
555 ``timedelta(days=1)``.
556
Georg Brandl116aa622007-08-15 14:28:22 +0000557
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000558Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000559
560.. attribute:: date.year
561
562 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
563
564
565.. attribute:: date.month
566
567 Between 1 and 12 inclusive.
568
569
570.. attribute:: date.day
571
572 Between 1 and the number of days in the given month of the given year.
573
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000574
Georg Brandl116aa622007-08-15 14:28:22 +0000575Supported operations:
576
577+-------------------------------+----------------------------------------------+
578| Operation | Result |
579+===============================+==============================================+
580| ``date2 = date1 + timedelta`` | *date2* is ``timedelta.days`` days removed |
Brad3fb13632019-09-11 05:19:05 -0400581| | from *date1*. (1) |
Georg Brandl116aa622007-08-15 14:28:22 +0000582+-------------------------------+----------------------------------------------+
583| ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 + |
584| | timedelta == date1``. (2) |
585+-------------------------------+----------------------------------------------+
586| ``timedelta = date1 - date2`` | \(3) |
587+-------------------------------+----------------------------------------------+
588| ``date1 < date2`` | *date1* is considered less than *date2* when |
589| | *date1* precedes *date2* in time. (4) |
590+-------------------------------+----------------------------------------------+
591
592Notes:
593
594(1)
595 *date2* is moved forward in time if ``timedelta.days > 0``, or backward if
Brad3fb13632019-09-11 05:19:05 -0400596 ``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``.
Georg Brandl116aa622007-08-15 14:28:22 +0000597 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
598 :exc:`OverflowError` is raised if ``date2.year`` would be smaller than
599 :const:`MINYEAR` or larger than :const:`MAXYEAR`.
600
601(2)
Georg Brandl116aa622007-08-15 14:28:22 +0000602 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
603
604(3)
Brad3fb13632019-09-11 05:19:05 -0400605 This is exact, and cannot overflow. timedelta.seconds and
Georg Brandl116aa622007-08-15 14:28:22 +0000606 timedelta.microseconds are 0, and date2 + timedelta == date1 after.
607
608(4)
609 In other words, ``date1 < date2`` if and only if ``date1.toordinal() <
Danish Prakash9c223792018-09-12 02:29:23 +0530610 date2.toordinal()``. Date comparison raises :exc:`TypeError` if
611 the other comparand isn't also a :class:`date` object. However,
612 ``NotImplemented`` is returned instead if the other comparand has a
Brad3fb13632019-09-11 05:19:05 -0400613 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
Georg Brandl116aa622007-08-15 14:28:22 +0000614 chance at implementing mixed-type comparison. If not, when a :class:`date`
615 object is compared to an object of a different type, :exc:`TypeError` is raised
Brad3fb13632019-09-11 05:19:05 -0400616 unless the comparison is ``==`` or ``!=``. The latter cases return
Georg Brandl116aa622007-08-15 14:28:22 +0000617 :const:`False` or :const:`True`, respectively.
618
Brad3fb13632019-09-11 05:19:05 -0400619In Boolean contexts, all :class:`date` objects are considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +0000620
621Instance methods:
622
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400623.. method:: date.replace(year=self.year, month=self.month, day=self.day)
Georg Brandl116aa622007-08-15 14:28:22 +0000624
Senthil Kumarana6bac952011-07-04 11:28:30 -0700625 Return a date with the same value, except for those parameters given new
Brad3fb13632019-09-11 05:19:05 -0400626 values by whichever keyword arguments are specified.
627
628 Example::
629
630 >>> from datetime import date
631 >>> d = date(2002, 12, 31)
632 >>> d.replace(day=26)
633 datetime.date(2002, 12, 26)
Georg Brandl116aa622007-08-15 14:28:22 +0000634
635
636.. method:: date.timetuple()
637
638 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
Brad3fb13632019-09-11 05:19:05 -0400639
640 The hours, minutes and seconds are 0, and the DST flag is -1.
641
642 ``d.timetuple()`` is equivalent to::
643
644 time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1))
645
646 where ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1``
647 is the day number within the current year starting with ``1`` for January 1st.
Georg Brandl116aa622007-08-15 14:28:22 +0000648
649
650.. method:: date.toordinal()
651
652 Return the proleptic Gregorian ordinal of the date, where January 1 of year 1
Brad3fb13632019-09-11 05:19:05 -0400653 has ordinal 1. For any :class:`date` object *d*,
Georg Brandl116aa622007-08-15 14:28:22 +0000654 ``date.fromordinal(d.toordinal()) == d``.
655
656
657.. method:: date.weekday()
658
659 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
660 For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also
661 :meth:`isoweekday`.
662
663
664.. method:: date.isoweekday()
665
666 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
667 For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also
668 :meth:`weekday`, :meth:`isocalendar`.
669
670
671.. method:: date.isocalendar()
672
673 Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
674
Brad3fb13632019-09-11 05:19:05 -0400675 The ISO calendar is a widely used variant of the Gregorian calendar. [#]_
Georg Brandl116aa622007-08-15 14:28:22 +0000676
677 The ISO year consists of 52 or 53 full weeks, and where a week starts on a
Brad3fb13632019-09-11 05:19:05 -0400678 Monday and ends on a Sunday. The first week of an ISO year is the first
Georg Brandl116aa622007-08-15 14:28:22 +0000679 (Gregorian) calendar week of a year containing a Thursday. This is called week
680 number 1, and the ISO year of that Thursday is the same as its Gregorian year.
681
682 For example, 2004 begins on a Thursday, so the first week of ISO year 2004
Brad3fb13632019-09-11 05:19:05 -0400683 begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004::
Georg Brandl116aa622007-08-15 14:28:22 +0000684
Brad3fb13632019-09-11 05:19:05 -0400685 >>> from datetime import date
686 >>> date(2003, 12, 29).isocalendar()
687 (2004, 1, 1)
688 >>> date(2004, 1, 4).isocalendar()
689 (2004, 1, 7)
Georg Brandl116aa622007-08-15 14:28:22 +0000690
691.. method:: date.isoformat()
692
Brad3fb13632019-09-11 05:19:05 -0400693 Return a string representing the date in ISO 8601 format, ``YYYY-MM-DD``::
Georg Brandl116aa622007-08-15 14:28:22 +0000694
Brad3fb13632019-09-11 05:19:05 -0400695 >>> from datetime import date
696 >>> date(2002, 12, 4).isoformat()
697 '2002-12-04'
698
699 This is the inverse of :meth:`date.fromisoformat`.
Georg Brandl116aa622007-08-15 14:28:22 +0000700
701.. method:: date.__str__()
702
703 For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``.
704
705
706.. method:: date.ctime()
707
Brad3fb13632019-09-11 05:19:05 -0400708 Return a string representing the date::
709
710 >>> from datetime import date
711 >>> date(2002, 12, 4).ctime()
712 'Wed Dec 4 00:00:00 2002'
713
714 ``d.ctime()`` is equivalent to::
715
716 time.ctime(time.mktime(d.timetuple()))
717
718 on platforms where the native C
Georg Brandl60203b42010-10-06 10:11:56 +0000719 :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +0000720 :meth:`date.ctime` does not invoke) conforms to the C standard.
721
722
723.. method:: date.strftime(format)
724
725 Return a string representing the date, controlled by an explicit format string.
David Wolever569a5fa2013-08-12 16:56:02 -0400726 Format codes referring to hours, minutes or seconds will see 0 values. For a
727 complete list of formatting directives, see
728 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000729
Georg Brandl116aa622007-08-15 14:28:22 +0000730
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300731.. method:: date.__format__(format)
732
Martin Panterd5db1472016-02-08 01:34:09 +0000733 Same as :meth:`.date.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +0000734 string for a :class:`.date` object in :ref:`formatted string
735 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -0400736 complete list of formatting directives, see
737 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300738
Brad3fb13632019-09-11 05:19:05 -0400739Examples of Usage: :class:`date`
740^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300741
Christian Heimes895627f2007-12-08 17:28:33 +0000742Example of counting days to an event::
743
744 >>> import time
745 >>> from datetime import date
746 >>> today = date.today()
747 >>> today
748 datetime.date(2007, 12, 5)
749 >>> today == date.fromtimestamp(time.time())
750 True
751 >>> my_birthday = date(today.year, 6, 24)
752 >>> if my_birthday < today:
Georg Brandl48310cd2009-01-03 21:18:54 +0000753 ... my_birthday = my_birthday.replace(year=today.year + 1)
Christian Heimes895627f2007-12-08 17:28:33 +0000754 >>> my_birthday
755 datetime.date(2008, 6, 24)
Georg Brandl48310cd2009-01-03 21:18:54 +0000756 >>> time_to_birthday = abs(my_birthday - today)
Christian Heimes895627f2007-12-08 17:28:33 +0000757 >>> time_to_birthday.days
758 202
759
Brad3fb13632019-09-11 05:19:05 -0400760More examples of working with :class:`date`:
Christian Heimesfe337bf2008-03-23 21:54:12 +0000761
762.. doctest::
Christian Heimes895627f2007-12-08 17:28:33 +0000763
764 >>> from datetime import date
765 >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
766 >>> d
767 datetime.date(2002, 3, 11)
Brad3fb13632019-09-11 05:19:05 -0400768
769 >>> # Methods related to formatting string output
770 >>> d.isoformat()
771 '2002-03-11'
772 >>> d.strftime("%d/%m/%y")
773 '11/03/02'
774 >>> d.strftime("%A %d. %B %Y")
775 'Monday 11. March 2002'
776 >>> d.ctime()
777 'Mon Mar 11 00:00:00 2002'
778 >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
779 'The day is 11, the month is March.'
780
781 >>> # Methods for to extracting 'components' under different calendars
Christian Heimes895627f2007-12-08 17:28:33 +0000782 >>> t = d.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000783 >>> for i in t: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000784 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000785 2002 # year
786 3 # month
787 11 # day
788 0
789 0
790 0
791 0 # weekday (0 = Monday)
792 70 # 70th day in the year
793 -1
794 >>> ic = d.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000795 >>> for i in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000796 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000797 2002 # ISO year
798 11 # ISO week number
799 1 # ISO day number ( 1 = Monday )
Brad3fb13632019-09-11 05:19:05 -0400800
801 >>> # A date object is immutable; all operations produce a new object
802 >>> d.replace(year=2005)
803 datetime.date(2005, 3, 11)
Christian Heimes895627f2007-12-08 17:28:33 +0000804
Georg Brandl116aa622007-08-15 14:28:22 +0000805
806.. _datetime-datetime:
807
Benjamin Petersond87dd432015-04-25 14:15:16 -0400808:class:`.datetime` Objects
809--------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000810
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300811A :class:`.datetime` object is a single object containing all the information
Brad3fb13632019-09-11 05:19:05 -0400812from a :class:`date` object and a :class:`.time` object.
813
814Like a :class:`date` object, :class:`.datetime` assumes the current Gregorian
815calendar extended in both directions; like a :class:`.time` object,
816:class:`.datetime` assumes there are exactly 3600\*24 seconds in every day.
Georg Brandl116aa622007-08-15 14:28:22 +0000817
818Constructor:
819
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400820.. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000821
Brad3fb13632019-09-11 05:19:05 -0400822 The *year*, *month* and *day* arguments are required. *tzinfo* may be ``None``, or an
823 instance of a :class:`tzinfo` subclass. The remaining arguments must be integers
Georg Brandl5c106642007-11-29 17:41:05 +0000824 in the following ranges:
Georg Brandl116aa622007-08-15 14:28:22 +0000825
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400826 * ``MINYEAR <= year <= MAXYEAR``,
827 * ``1 <= month <= 12``,
828 * ``1 <= day <= number of days in the given month and year``,
829 * ``0 <= hour < 24``,
830 * ``0 <= minute < 60``,
831 * ``0 <= second < 60``,
832 * ``0 <= microsecond < 1000000``,
833 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +0000834
835 If an argument outside those ranges is given, :exc:`ValueError` is raised.
836
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400837 .. versionadded:: 3.6
838 Added the ``fold`` argument.
839
Georg Brandl116aa622007-08-15 14:28:22 +0000840Other constructors, all class methods:
841
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000842.. classmethod:: datetime.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000843
Brad3fb13632019-09-11 05:19:05 -0400844 Return the current local datetime, with :attr:`.tzinfo` ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000845
Brad3fb13632019-09-11 05:19:05 -0400846 Equivalent to::
847
848 datetime.fromtimestamp(time.time())
849
850 See also :meth:`now`, :meth:`fromtimestamp`.
851
852 This method is functionally equivalent to :meth:`now`, but without a
853 ``tz`` parameter.
Georg Brandl116aa622007-08-15 14:28:22 +0000854
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000855.. classmethod:: datetime.now(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000856
Brad3fb13632019-09-11 05:19:05 -0400857 Return the current local date and time.
858
859 If optional argument *tz* is ``None``
Georg Brandl116aa622007-08-15 14:28:22 +0000860 or not specified, this is like :meth:`today`, but, if possible, supplies more
861 precision than can be gotten from going through a :func:`time.time` timestamp
862 (for example, this may be possible on platforms supplying the C
Georg Brandl60203b42010-10-06 10:11:56 +0000863 :c:func:`gettimeofday` function).
Georg Brandl116aa622007-08-15 14:28:22 +0000864
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100865 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass,
866 and the current date and time are converted to *tz*’s time zone.
Brad3fb13632019-09-11 05:19:05 -0400867
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100868 This function is preferred over :meth:`today` and :meth:`utcnow`.
Georg Brandl116aa622007-08-15 14:28:22 +0000869
870
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000871.. classmethod:: datetime.utcnow()
Georg Brandl116aa622007-08-15 14:28:22 +0000872
Brad3fb13632019-09-11 05:19:05 -0400873 Return the current UTC date and time, with :attr:`.tzinfo` ``None``.
874
875 This is like :meth:`now`, but returns the current UTC date and time, as a naive
876 :class:`.datetime` object. An aware current UTC datetime can be obtained by
877 calling ``datetime.now(timezone.utc)``. See also :meth:`now`.
Georg Brandl116aa622007-08-15 14:28:22 +0000878
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100879 .. warning::
880
881 Because naive ``datetime`` objects are treated by many ``datetime`` methods
882 as local times, it is preferred to use aware datetimes to represent times
883 in UTC. As such, the recommended way to create an object representing the
884 current time in UTC by calling ``datetime.now(timezone.utc)``.
885
886
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000887.. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000888
889 Return the local date and time corresponding to the POSIX timestamp, such as is
890 returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
891 specified, the timestamp is converted to the platform's local date and time, and
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300892 the returned :class:`.datetime` object is naive.
Georg Brandl116aa622007-08-15 14:28:22 +0000893
Martin Panter16c7cfd2016-04-01 21:48:24 +0000894 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
Brad3fb13632019-09-11 05:19:05 -0400895 timestamp is converted to *tz*’s time zone.
896
Victor Stinnerecc6e662012-03-14 00:39:29 +0100897 :meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is out of
Georg Brandl60203b42010-10-06 10:11:56 +0000898 the range of values supported by the platform C :c:func:`localtime` or
Victor Stinnerecc6e662012-03-14 00:39:29 +0100899 :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or
900 :c:func:`gmtime` failure.
901 It's common for this to be restricted to years in
Georg Brandl116aa622007-08-15 14:28:22 +0000902 1970 through 2038. Note that on non-POSIX systems that include leap seconds in
903 their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`,
904 and then it's possible to have two timestamps differing by a second that yield
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100905 identical :class:`.datetime` objects. This method is preferred over
906 :meth:`utcfromtimestamp`.
Georg Brandl116aa622007-08-15 14:28:22 +0000907
Victor Stinner5d272cc2012-03-13 13:35:55 +0100908 .. versionchanged:: 3.3
909 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
910 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100911 :c:func:`localtime` or :c:func:`gmtime` functions. Raise :exc:`OSError`
912 instead of :exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime`
913 failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100914
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400915 .. versionchanged:: 3.6
916 :meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000917
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000918.. classmethod:: datetime.utcfromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000919
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300920 Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with
Brad3fb13632019-09-11 05:19:05 -0400921 :attr:`.tzinfo` ``None``. (The resulting object is naive.)
922
923 This may raise :exc:`OverflowError`, if the timestamp is
Victor Stinnerecc6e662012-03-14 00:39:29 +0100924 out of the range of values supported by the platform C :c:func:`gmtime` function,
925 and :exc:`OSError` on :c:func:`gmtime` failure.
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500926 It's common for this to be restricted to years in 1970 through 2038.
Georg Brandl116aa622007-08-15 14:28:22 +0000927
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500928 To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`::
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400929
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500930 datetime.fromtimestamp(timestamp, timezone.utc)
931
932 On the POSIX compliant platforms, it is equivalent to the following
933 expression::
934
935 datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
936
937 except the latter formula always supports the full years range: between
938 :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400939
Joannah Nanjekye1a53c782019-09-11 14:58:42 +0100940 .. warning::
941
942 Because naive ``datetime`` objects are treated by many ``datetime`` methods
943 as local times, it is preferred to use aware datetimes to represent times
944 in UTC. As such, the recommended way to create an object representing a
945 specific timestamp in UTC by calling
946 ``datetime.fromtimestamp(timestamp, tz=timezone.utc)``.
947
Victor Stinner5d272cc2012-03-13 13:35:55 +0100948 .. versionchanged:: 3.3
949 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
950 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100951 :c:func:`gmtime` function. Raise :exc:`OSError` instead of
952 :exc:`ValueError` on :c:func:`gmtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100953
Georg Brandl116aa622007-08-15 14:28:22 +0000954
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000955.. classmethod:: datetime.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000956
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300957 Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal,
Georg Brandl116aa622007-08-15 14:28:22 +0000958 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
Brad3fb13632019-09-11 05:19:05 -0400959 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and
Martin Panter16c7cfd2016-04-01 21:48:24 +0000960 microsecond of the result are all 0, and :attr:`.tzinfo` is ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000961
962
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400963.. classmethod:: datetime.combine(date, time, tzinfo=self.tzinfo)
Georg Brandl116aa622007-08-15 14:28:22 +0000964
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300965 Return a new :class:`.datetime` object whose date components are equal to the
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400966 given :class:`date` object's, and whose time components
Brad3fb13632019-09-11 05:19:05 -0400967 are equal to the given :class:`.time` object's. If the *tzinfo*
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400968 argument is provided, its value is used to set the :attr:`.tzinfo` attribute
969 of the result, otherwise the :attr:`~.time.tzinfo` attribute of the *time* argument
970 is used.
971
972 For any :class:`.datetime` object *d*,
Brad3fb13632019-09-11 05:19:05 -0400973 ``d == datetime.combine(d.date(), d.time(), d.tzinfo)``. If date is a
Martin Panter16c7cfd2016-04-01 21:48:24 +0000974 :class:`.datetime` object, its time components and :attr:`.tzinfo` attributes
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800975 are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000976
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400977 .. versionchanged:: 3.6
978 Added the *tzinfo* argument.
979
Georg Brandl116aa622007-08-15 14:28:22 +0000980
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500981.. classmethod:: datetime.fromisoformat(date_string)
982
Brad3fb13632019-09-11 05:19:05 -0400983 Return a :class:`.datetime` corresponding to a *date_string* in one of the
984 formats emitted by :meth:`date.isoformat` and :meth:`datetime.isoformat`.
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500985
Brad3fb13632019-09-11 05:19:05 -0400986 Specifically, this function supports strings in the format:
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500987
Brad3fb13632019-09-11 05:19:05 -0400988 .. code-block:: none
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500989
Brad3fb13632019-09-11 05:19:05 -0400990 YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500991
Brad3fb13632019-09-11 05:19:05 -0400992 where ``*`` can match any single character.
993
994 .. caution::
995
996 This does *not* support parsing arbitrary ISO 8601 strings - it is only intended
997 as the inverse operation of :meth:`datetime.isoformat`. A more full-featured
998 ISO 8601 parser, ``dateutil.parser.isoparse`` is available in the third-party package
999 `dateutil <https://dateutil.readthedocs.io/en/stable/parser.html#dateutil.parser.isoparse>`__.
1000 This does not support parsing arbitrary ISO 8601 strings - it is only intended
1001 as the inverse operation of :meth:`datetime.isoformat`.
1002
1003 Examples::
1004
1005 >>> from datetime import datetime
1006 >>> datetime.fromisoformat('2011-11-04')
1007 datetime.datetime(2011, 11, 4, 0, 0)
1008 >>> datetime.fromisoformat('2011-11-04T00:05:23')
1009 datetime.datetime(2011, 11, 4, 0, 5, 23)
1010 >>> datetime.fromisoformat('2011-11-04 00:05:23.283')
1011 datetime.datetime(2011, 11, 4, 0, 5, 23, 283000)
1012 >>> datetime.fromisoformat('2011-11-04 00:05:23.283+00:00')
1013 datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc)
1014 >>> datetime.fromisoformat('2011-11-04T00:05:23+04:00') # doctest: +NORMALIZE_WHITESPACE
1015 datetime.datetime(2011, 11, 4, 0, 5, 23,
1016 tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
1017
1018 .. versionadded:: 3.7
Paul Ganssle88c09372019-04-29 09:22:03 -04001019
1020.. classmethod:: datetime.fromisocalendar(year, week, day)
1021
Brad3fb13632019-09-11 05:19:05 -04001022 Return a :class:`.datetime` corresponding to the ISO calendar date specified
Paul Ganssle88c09372019-04-29 09:22:03 -04001023 by year, week and day. The non-date components of the datetime are populated
1024 with their normal default values. This is the inverse of the function
1025 :meth:`datetime.isocalendar`.
1026
1027 .. versionadded:: 3.8
1028
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001029.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +00001030
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001031 Return a :class:`.datetime` corresponding to *date_string*, parsed according to
Brad3fb13632019-09-11 05:19:05 -04001032 *format*.
1033
1034 This is equivalent to::
1035
1036 datetime(*(time.strptime(date_string, format)[0:6]))
1037
1038 :exc:`ValueError` is raised if the date_string and format
Georg Brandl116aa622007-08-15 14:28:22 +00001039 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 -04001040 time tuple. For a complete list of formatting directives, see
1041 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001042
Georg Brandl116aa622007-08-15 14:28:22 +00001043
Georg Brandl116aa622007-08-15 14:28:22 +00001044
1045Class attributes:
1046
Georg Brandl116aa622007-08-15 14:28:22 +00001047.. attribute:: datetime.min
1048
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001049 The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1,
Georg Brandl116aa622007-08-15 14:28:22 +00001050 tzinfo=None)``.
1051
1052
1053.. attribute:: datetime.max
1054
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001055 The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
Georg Brandl116aa622007-08-15 14:28:22 +00001056 59, 999999, tzinfo=None)``.
1057
1058
1059.. attribute:: datetime.resolution
1060
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001061 The smallest possible difference between non-equal :class:`.datetime` objects,
Georg Brandl116aa622007-08-15 14:28:22 +00001062 ``timedelta(microseconds=1)``.
1063
Georg Brandl116aa622007-08-15 14:28:22 +00001064
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001065Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001066
1067.. attribute:: datetime.year
1068
1069 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
1070
1071
1072.. attribute:: datetime.month
1073
1074 Between 1 and 12 inclusive.
1075
1076
1077.. attribute:: datetime.day
1078
1079 Between 1 and the number of days in the given month of the given year.
1080
1081
1082.. attribute:: datetime.hour
1083
1084 In ``range(24)``.
1085
1086
1087.. attribute:: datetime.minute
1088
1089 In ``range(60)``.
1090
1091
1092.. attribute:: datetime.second
1093
1094 In ``range(60)``.
1095
1096
1097.. attribute:: datetime.microsecond
1098
1099 In ``range(1000000)``.
1100
1101
1102.. attribute:: datetime.tzinfo
1103
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001104 The object passed as the *tzinfo* argument to the :class:`.datetime` constructor,
Georg Brandl116aa622007-08-15 14:28:22 +00001105 or ``None`` if none was passed.
1106
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001107
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001108.. attribute:: datetime.fold
1109
Brad3fb13632019-09-11 05:19:05 -04001110 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001111 repeated interval occurs when clocks are rolled back at the end of daylight saving
1112 time or when the UTC offset for the current zone is decreased for political reasons.)
1113 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1114 time representation.
1115
1116 .. versionadded:: 3.6
1117
Georg Brandl116aa622007-08-15 14:28:22 +00001118Supported operations:
1119
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001120+---------------------------------------+--------------------------------+
1121| Operation | Result |
1122+=======================================+================================+
1123| ``datetime2 = datetime1 + timedelta`` | \(1) |
1124+---------------------------------------+--------------------------------+
1125| ``datetime2 = datetime1 - timedelta`` | \(2) |
1126+---------------------------------------+--------------------------------+
1127| ``timedelta = datetime1 - datetime2`` | \(3) |
1128+---------------------------------------+--------------------------------+
1129| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
1130| | :class:`.datetime`. (4) |
1131+---------------------------------------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +00001132
1133(1)
1134 datetime2 is a duration of timedelta removed from datetime1, moving forward in
Brad3fb13632019-09-11 05:19:05 -04001135 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Martin Panter16c7cfd2016-04-01 21:48:24 +00001136 result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and
Senthil Kumarana6bac952011-07-04 11:28:30 -07001137 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
1138 datetime2.year would be smaller than :const:`MINYEAR` or larger than
1139 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
1140 input is an aware object.
Georg Brandl116aa622007-08-15 14:28:22 +00001141
1142(2)
1143 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Martin Panter16c7cfd2016-04-01 21:48:24 +00001144 addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input
Senthil Kumarana6bac952011-07-04 11:28:30 -07001145 datetime, and no time zone adjustments are done even if the input is aware.
Georg Brandl116aa622007-08-15 14:28:22 +00001146
1147(3)
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001148 Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if
Brad3fb13632019-09-11 05:19:05 -04001149 both operands are naive, or if both are aware. If one is aware and the other is
Georg Brandl116aa622007-08-15 14:28:22 +00001150 naive, :exc:`TypeError` is raised.
1151
Martin Panter16c7cfd2016-04-01 21:48:24 +00001152 If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute,
1153 the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Brad3fb13632019-09-11 05:19:05 -04001154 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
Georg Brandl116aa622007-08-15 14:28:22 +00001155 are done in this case.
1156
Martin Panter16c7cfd2016-04-01 21:48:24 +00001157 If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
Brad3fb13632019-09-11 05:19:05 -04001158 as if *a* and *b* were first converted to naive UTC datetimes first. The
Senthil Kumarana6bac952011-07-04 11:28:30 -07001159 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
1160 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl116aa622007-08-15 14:28:22 +00001161
1162(4)
1163 *datetime1* is considered less than *datetime2* when *datetime1* precedes
1164 *datetime2* in time.
1165
Alexander Belopolsky08313822012-06-15 20:19:47 -04001166 If one comparand is naive and the other is aware, :exc:`TypeError`
Brad3fb13632019-09-11 05:19:05 -04001167 is raised if an order comparison is attempted. For equality
Alexander Belopolsky08313822012-06-15 20:19:47 -04001168 comparisons, naive instances are never equal to aware instances.
1169
Martin Panter16c7cfd2016-04-01 21:48:24 +00001170 If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
1171 common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
Brad3fb13632019-09-11 05:19:05 -04001172 compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001173 attributes, the comparands are first adjusted by subtracting their UTC
1174 offsets (obtained from ``self.utcoffset()``).
Georg Brandl116aa622007-08-15 14:28:22 +00001175
Alexander Belopolsky08313822012-06-15 20:19:47 -04001176 .. versionchanged:: 3.3
Brad3fb13632019-09-11 05:19:05 -04001177 Equality comparisons between aware and naive :class:`.datetime`
Éric Araujob0f08952012-06-24 16:22:09 -04001178 instances don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001179
Georg Brandl116aa622007-08-15 14:28:22 +00001180 .. note::
1181
1182 In order to stop comparison from falling back to the default scheme of comparing
1183 object addresses, datetime comparison normally raises :exc:`TypeError` if the
Brad3fb13632019-09-11 05:19:05 -04001184 other comparand isn't also a :class:`.datetime` object. However,
Georg Brandl116aa622007-08-15 14:28:22 +00001185 ``NotImplemented`` is returned instead if the other comparand has a
Brad3fb13632019-09-11 05:19:05 -04001186 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
1187 chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001188 object is compared to an object of a different type, :exc:`TypeError` is raised
Brad3fb13632019-09-11 05:19:05 -04001189 unless the comparison is ``==`` or ``!=``. The latter cases return
Georg Brandl116aa622007-08-15 14:28:22 +00001190 :const:`False` or :const:`True`, respectively.
1191
Georg Brandl116aa622007-08-15 14:28:22 +00001192Instance methods:
1193
Georg Brandl116aa622007-08-15 14:28:22 +00001194.. method:: datetime.date()
1195
1196 Return :class:`date` object with same year, month and day.
1197
1198
1199.. method:: datetime.time()
1200
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001201 Return :class:`.time` object with same hour, minute, second, microsecond and fold.
Brad3fb13632019-09-11 05:19:05 -04001202 :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`.
Georg Brandl116aa622007-08-15 14:28:22 +00001203
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001204 .. versionchanged:: 3.6
1205 The fold value is copied to the returned :class:`.time` object.
1206
Georg Brandl116aa622007-08-15 14:28:22 +00001207
1208.. method:: datetime.timetz()
1209
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001210 Return :class:`.time` object with same hour, minute, second, microsecond, fold, and
Brad3fb13632019-09-11 05:19:05 -04001211 tzinfo attributes. See also method :meth:`time`.
Georg Brandl116aa622007-08-15 14:28:22 +00001212
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001213 .. versionchanged:: 3.6
1214 The fold value is copied to the returned :class:`.time` object.
Georg Brandl116aa622007-08-15 14:28:22 +00001215
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001216
1217.. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \
1218 hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \
1219 tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001220
Senthil Kumarana6bac952011-07-04 11:28:30 -07001221 Return a datetime with the same attributes, except for those attributes given
Brad3fb13632019-09-11 05:19:05 -04001222 new values by whichever keyword arguments are specified. Note that
Senthil Kumarana6bac952011-07-04 11:28:30 -07001223 ``tzinfo=None`` can be specified to create a naive datetime from an aware
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001224 datetime with no conversion of date and time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001225
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001226 .. versionadded:: 3.6
1227 Added the ``fold`` argument.
1228
Georg Brandl116aa622007-08-15 14:28:22 +00001229
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001230.. method:: datetime.astimezone(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001231
Martin Panter16c7cfd2016-04-01 21:48:24 +00001232 Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*,
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001233 adjusting the date and time data so the result is the same UTC time as
Senthil Kumarana6bac952011-07-04 11:28:30 -07001234 *self*, but in *tz*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001235
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001236 If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its
Brad3fb13632019-09-11 05:19:05 -04001237 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If *self*
Alexander Belopolsky877b2322018-06-10 17:02:58 -04001238 is naive, it is presumed to represent time in the system timezone.
Georg Brandl116aa622007-08-15 14:28:22 +00001239
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001240 If called without arguments (or with ``tz=None``) the system local
Brad3fb13632019-09-11 05:19:05 -04001241 timezone is assumed for the target timezone. The ``.tzinfo`` attribute of the converted
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001242 datetime instance will be set to an instance of :class:`timezone`
1243 with the zone name and offset obtained from the OS.
1244
Georg Brandl116aa622007-08-15 14:28:22 +00001245 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001246 adjustment of date or time data is performed. Else the result is local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001247 time in the timezone *tz*, representing the same UTC time as *self*: after
1248 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have
1249 the same date and time data as ``dt - dt.utcoffset()``.
Georg Brandl116aa622007-08-15 14:28:22 +00001250
1251 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Brad3fb13632019-09-11 05:19:05 -04001252 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl116aa622007-08-15 14:28:22 +00001253 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001254 conversion of date and time data, use ``dt.replace(tzinfo=None)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001255
1256 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
1257 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
1258 Ignoring error cases, :meth:`astimezone` acts like::
1259
1260 def astimezone(self, tz):
1261 if self.tzinfo is tz:
1262 return self
1263 # Convert self to UTC, and attach the new time zone object.
1264 utc = (self - self.utcoffset()).replace(tzinfo=tz)
1265 # Convert from UTC to tz's local time.
1266 return tz.fromutc(utc)
1267
Georg Brandlee0be402012-06-26 09:14:40 +02001268 .. versionchanged:: 3.3
1269 *tz* now can be omitted.
1270
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001271 .. versionchanged:: 3.6
1272 The :meth:`astimezone` method can now be called on naive instances that
1273 are presumed to represent system local time.
1274
Georg Brandl116aa622007-08-15 14:28:22 +00001275
1276.. method:: datetime.utcoffset()
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.utcoffset(self)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001280 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1281
1282 .. versionchanged:: 3.7
1283 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001284
1285
1286.. method:: datetime.dst()
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.dst(self)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001290 ``None`` or a :class:`timedelta` object with magnitude less than one day.
1291
1292 .. versionchanged:: 3.7
1293 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001294
1295
1296.. method:: datetime.tzname()
1297
Martin Panter16c7cfd2016-04-01 21:48:24 +00001298 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001299 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
1300 ``None`` or a string object,
1301
1302
1303.. method:: datetime.timetuple()
1304
1305 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
Brad3fb13632019-09-11 05:19:05 -04001306
1307 ``d.timetuple()`` is equivalent to::
1308
1309 time.struct_time((d.year, d.month, d.day,
1310 d.hour, d.minute, d.second,
1311 d.weekday(), yday, dst))
1312
1313 where ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1``
1314 is the day number within the current year starting with ``1`` for January
1315 1st. The :attr:`tm_isdst` flag of the result is set according to the
1316 :meth:`dst` method: :attr:`.tzinfo` is ``None`` or :meth:`dst` returns
1317 ``None``, :attr:`tm_isdst` is set to ``-1``; else if :meth:`dst` returns a
1318 non-zero value, :attr:`tm_isdst` is set to ``1``; else :attr:`tm_isdst` is
1319 set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +00001320
1321
1322.. method:: datetime.utctimetuple()
1323
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001324 If :class:`.datetime` instance *d* is naive, this is the same as
Georg Brandl116aa622007-08-15 14:28:22 +00001325 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
Brad3fb13632019-09-11 05:19:05 -04001326 ``d.dst()`` returns. DST is never in effect for a UTC time.
Georg Brandl116aa622007-08-15 14:28:22 +00001327
1328 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001329 ``d.utcoffset()``, and a :class:`time.struct_time` for the
Brad3fb13632019-09-11 05:19:05 -04001330 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001331 that an :exc:`OverflowError` may be raised if *d*.year was
1332 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +00001333 boundary.
1334
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001335 .. warning::
1336
1337 Because naive ``datetime`` objects are treated by many ``datetime`` methods
1338 as local times, it is preferred to use aware datetimes to represent times
1339 in UTC; as a result, using ``utcfromtimetuple`` may give misleading
1340 results. If you have a naive ``datetime`` representing UTC, use
1341 ``datetime.replace(tzinfo=timezone.utc)`` to make it aware, at which point
1342 you can use :meth:`.datetime.timetuple`.
Georg Brandl116aa622007-08-15 14:28:22 +00001343
1344.. method:: datetime.toordinal()
1345
Brad3fb13632019-09-11 05:19:05 -04001346 Return the proleptic Gregorian ordinal of the date. The same as
Georg Brandl116aa622007-08-15 14:28:22 +00001347 ``self.date().toordinal()``.
1348
Alexander Belopolskya4415142012-06-08 12:33:09 -04001349.. method:: datetime.timestamp()
1350
Martin Panter16c7cfd2016-04-01 21:48:24 +00001351 Return POSIX timestamp corresponding to the :class:`.datetime`
Brad3fb13632019-09-11 05:19:05 -04001352 instance. The return value is a :class:`float` similar to that
Alexander Belopolskya4415142012-06-08 12:33:09 -04001353 returned by :func:`time.time`.
1354
Martin Panter16c7cfd2016-04-01 21:48:24 +00001355 Naive :class:`.datetime` instances are assumed to represent local
Alexander Belopolskya4415142012-06-08 12:33:09 -04001356 time and this method relies on the platform C :c:func:`mktime`
Brad3fb13632019-09-11 05:19:05 -04001357 function to perform the conversion. Since :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001358 supports wider range of values than :c:func:`mktime` on many
1359 platforms, this method may raise :exc:`OverflowError` for times far
1360 in the past or far in the future.
1361
Martin Panter16c7cfd2016-04-01 21:48:24 +00001362 For aware :class:`.datetime` instances, the return value is computed
Alexander Belopolskya4415142012-06-08 12:33:09 -04001363 as::
1364
1365 (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
1366
1367 .. versionadded:: 3.3
1368
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001369 .. versionchanged:: 3.6
1370 The :meth:`timestamp` method uses the :attr:`.fold` attribute to
1371 disambiguate the times during a repeated interval.
1372
Alexander Belopolskya4415142012-06-08 12:33:09 -04001373 .. note::
1374
1375 There is no method to obtain the POSIX timestamp directly from a
Brad3fb13632019-09-11 05:19:05 -04001376 naive :class:`.datetime` instance representing UTC time. If your
Alexander Belopolskya4415142012-06-08 12:33:09 -04001377 application uses this convention and your system timezone is not
1378 set to UTC, you can obtain the POSIX timestamp by supplying
1379 ``tzinfo=timezone.utc``::
1380
1381 timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
1382
1383 or by calculating the timestamp directly::
1384
1385 timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
Georg Brandl116aa622007-08-15 14:28:22 +00001386
1387.. method:: datetime.weekday()
1388
1389 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1390 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1391
1392
1393.. method:: datetime.isoweekday()
1394
1395 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1396 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1397 :meth:`isocalendar`.
1398
1399
1400.. method:: datetime.isocalendar()
1401
Brad3fb13632019-09-11 05:19:05 -04001402 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
Georg Brandl116aa622007-08-15 14:28:22 +00001403 ``self.date().isocalendar()``.
1404
1405
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001406.. method:: datetime.isoformat(sep='T', timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001407
Brad3fb13632019-09-11 05:19:05 -04001408 Return a string representing the date and time in ISO 8601 format:
1409
1410 - ``YYYY-MM-DDTHH:MM:SS.ffffff``, if :attr:`microsecond` is not 0
1411 - ``YYYY-MM-DDTHH:MM:SS``, if :attr:`microsecond` is 0
Georg Brandl116aa622007-08-15 14:28:22 +00001412
Christophe Nanteuil92878822018-10-06 00:57:02 +02001413 If :meth:`utcoffset` does not return ``None``, a string is
1414 appended, giving the UTC offset:
Brad3fb13632019-09-11 05:19:05 -04001415
1416 - ``YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond`
1417 is not 0
1418 - ``YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` is 0
1419
1420 Examples::
1421
1422 >>> from datetime import datetime, timezone
1423 >>> datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat()
1424 '2019-05-18T15:17:08.132263'
1425 >>> datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat()
1426 '2019-05-18T15:17:00+00:00'
Georg Brandl116aa622007-08-15 14:28:22 +00001427
1428 The optional argument *sep* (default ``'T'``) is a one-character separator,
Brad3fb13632019-09-11 05:19:05 -04001429 placed between the date and time portions of the result. For example::
Georg Brandl116aa622007-08-15 14:28:22 +00001430
1431 >>> from datetime import tzinfo, timedelta, datetime
1432 >>> class TZ(tzinfo):
Brad3fb13632019-09-11 05:19:05 -04001433 ... """A time zone with an arbitrary, constant -06:39 offset."""
1434 ... def utcoffset(self, dt):
1435 ... return timedelta(hours=-6, minutes=-39)
Georg Brandl116aa622007-08-15 14:28:22 +00001436 ...
1437 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1438 '2002-12-25 00:00:00-06:39'
Brad3fb13632019-09-11 05:19:05 -04001439 >>> datetime(2009, 11, 27, microsecond=100, tzinfo=TZ()).isoformat()
1440 '2009-11-27T00:00:00.000100-06:39'
Georg Brandl116aa622007-08-15 14:28:22 +00001441
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001442 The optional argument *timespec* specifies the number of additional
1443 components of the time to include (the default is ``'auto'``).
1444 It can be one of the following:
1445
1446 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1447 same as ``'microseconds'`` otherwise.
Brad3fb13632019-09-11 05:19:05 -04001448 - ``'hours'``: Include the :attr:`hour` in the two-digit ``HH`` format.
1449 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in ``HH:MM`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001450 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
Brad3fb13632019-09-11 05:19:05 -04001451 in ``HH:MM:SS`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001452 - ``'milliseconds'``: Include full time, but truncate fractional second
Brad3fb13632019-09-11 05:19:05 -04001453 part to milliseconds. ``HH:MM:SS.sss`` format.
1454 - ``'microseconds'``: Include full time in ``HH:MM:SS.ffffff`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001455
1456 .. note::
1457
1458 Excluded time components are truncated, not rounded.
1459
Brad3fb13632019-09-11 05:19:05 -04001460 :exc:`ValueError` will be raised on an invalid *timespec* argument::
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001461
1462
1463 >>> from datetime import datetime
Marco Buttu909a6f62017-03-18 17:59:33 +01001464 >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001465 '2002-12-25T00:00'
1466 >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
1467 >>> dt.isoformat(timespec='microseconds')
1468 '2015-01-01T12:30:59.000000'
1469
1470 .. versionadded:: 3.6
1471 Added the *timespec* argument.
1472
Georg Brandl116aa622007-08-15 14:28:22 +00001473
1474.. method:: datetime.__str__()
1475
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001476 For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to
Georg Brandl116aa622007-08-15 14:28:22 +00001477 ``d.isoformat(' ')``.
1478
1479
1480.. method:: datetime.ctime()
1481
Brad3fb13632019-09-11 05:19:05 -04001482 Return a string representing the date and time::
Georg Brandl116aa622007-08-15 14:28:22 +00001483
Brad3fb13632019-09-11 05:19:05 -04001484 >>> from datetime import datetime
1485 >>> datetime(2002, 12, 4, 20, 30, 40).ctime()
1486 'Wed Dec 4 20:30:40 2002'
1487
1488 The output string will *not* include time zone information, regardless
1489 of whether the input is aware or naive.
1490
1491 ``d.ctime()`` is equivalent to::
1492
1493 time.ctime(time.mktime(d.timetuple()))
1494
1495 on platforms where the native C :c:func:`ctime` function
1496 (which :func:`time.ctime` invokes, but which
1497 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
Georg Brandl116aa622007-08-15 14:28:22 +00001498
1499.. method:: datetime.strftime(format)
1500
1501 Return a string representing the date and time, controlled by an explicit format
Brad3fb13632019-09-11 05:19:05 -04001502 string. For a complete list of formatting directives, see
David Wolever569a5fa2013-08-12 16:56:02 -04001503 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001504
Georg Brandl116aa622007-08-15 14:28:22 +00001505
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001506.. method:: datetime.__format__(format)
1507
Brad3fb13632019-09-11 05:19:05 -04001508 Same as :meth:`.datetime.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +00001509 string for a :class:`.datetime` object in :ref:`formatted string
Brad3fb13632019-09-11 05:19:05 -04001510 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001511 complete list of formatting directives, see
1512 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001513
Brad3fb13632019-09-11 05:19:05 -04001514Examples of Usage: :class:`.datetime`
1515^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001516
Brad3fb13632019-09-11 05:19:05 -04001517Examples of working with :class:`~datetime.datetime` objects:
Christian Heimesfe337bf2008-03-23 21:54:12 +00001518
1519.. doctest::
1520
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001521 >>> from datetime import datetime, date, time, timezone
Brad3fb13632019-09-11 05:19:05 -04001522
Christian Heimes895627f2007-12-08 17:28:33 +00001523 >>> # Using datetime.combine()
1524 >>> d = date(2005, 7, 14)
1525 >>> t = time(12, 30)
1526 >>> datetime.combine(d, t)
1527 datetime.datetime(2005, 7, 14, 12, 30)
Brad3fb13632019-09-11 05:19:05 -04001528
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001529 >>> # Using datetime.now()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001530 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001531 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001532 >>> datetime.now(timezone.utc) # doctest: +SKIP
1533 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060, tzinfo=datetime.timezone.utc)
Brad3fb13632019-09-11 05:19:05 -04001534
Christian Heimes895627f2007-12-08 17:28:33 +00001535 >>> # Using datetime.strptime()
1536 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1537 >>> dt
1538 datetime.datetime(2006, 11, 21, 16, 30)
Brad3fb13632019-09-11 05:19:05 -04001539
Christian Heimes895627f2007-12-08 17:28:33 +00001540 >>> # Using datetime.timetuple() to get tuple of all attributes
1541 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001542 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001543 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001544 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001545 2006 # year
1546 11 # month
1547 21 # day
1548 16 # hour
1549 30 # minute
1550 0 # second
1551 1 # weekday (0 = Monday)
1552 325 # number of days since 1st January
1553 -1 # dst - method tzinfo.dst() returned None
Brad3fb13632019-09-11 05:19:05 -04001554
Christian Heimes895627f2007-12-08 17:28:33 +00001555 >>> # Date in ISO format
1556 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001557 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001558 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001559 ...
1560 2006 # ISO year
1561 47 # ISO week
1562 2 # ISO weekday
Brad3fb13632019-09-11 05:19:05 -04001563
1564 >>> # Formatting a datetime
Christian Heimes895627f2007-12-08 17:28:33 +00001565 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1566 'Tuesday, 21. November 2006 04:30PM'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001567 >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
1568 'The day is 21, the month is November, the time is 04:30PM.'
Christian Heimes895627f2007-12-08 17:28:33 +00001569
Brad3fb13632019-09-11 05:19:05 -04001570The example below defines a :class:`tzinfo` subclass capturing time zone
1571information for Kabul, Afghanistan, which used +4 UTC until 1945
1572and then +4:30 UTC thereafter::
Christian Heimes895627f2007-12-08 17:28:33 +00001573
Brad3fb13632019-09-11 05:19:05 -04001574 from datetime import timedelta, datetime, tzinfo, timezone
Georg Brandl48310cd2009-01-03 21:18:54 +00001575
Brad3fb13632019-09-11 05:19:05 -04001576 class KabulTz(tzinfo):
1577 # Kabul used +4 until 1945, when they moved to +4:30
1578 UTC_MOVE_DATE = datetime(1944, 12, 31, 20, tzinfo=timezone.utc)
Christian Heimes895627f2007-12-08 17:28:33 +00001579
Brad3fb13632019-09-11 05:19:05 -04001580 def utcoffset(self, dt):
1581 if dt.year < 1945:
1582 return timedelta(hours=4)
1583 elif (1945, 1, 1, 0, 0) <= dt.timetuple()[:5] < (1945, 1, 1, 0, 30):
1584 # An ambiguous ("imaginary") half-hour range representing
1585 # a 'fold' in time due to the shift from +4 to +4:30.
1586 # If dt falls in the imaginary range, use fold to decide how
1587 # to resolve. See PEP495.
1588 return timedelta(hours=4, minutes=(30 if dt.fold else 0))
1589 else:
1590 return timedelta(hours=4, minutes=30)
1591
1592 def fromutc(self, dt):
1593 # Follow same validations as in datetime.tzinfo
1594 if not isinstance(dt, datetime):
1595 raise TypeError("fromutc() requires a datetime argument")
1596 if dt.tzinfo is not self:
1597 raise ValueError("dt.tzinfo is not self")
1598
1599 # A custom implementation is required for fromutc as
1600 # the input to this function is a datetime with utc values
1601 # but with a tzinfo set to self.
1602 # See datetime.astimezone or fromtimestamp.
1603 if dt.replace(tzinfo=timezone.utc) >= self.UTC_MOVE_DATE:
1604 return dt + timedelta(hours=4, minutes=30)
1605 else:
1606 return dt + timedelta(hours=4)
1607
1608 def dst(self, dt):
1609 # Kabul does not observe daylight saving time.
1610 return timedelta(0)
1611
1612 def tzname(self, dt):
1613 if dt >= self.UTC_MOVE_DATE:
1614 return "+04:30"
1615 return "+04"
1616
1617Usage of ``KabulTz`` from above::
1618
1619 >>> tz1 = KabulTz()
1620
1621 >>> # Datetime before the change
1622 >>> dt1 = datetime(1900, 11, 21, 16, 30, tzinfo=tz1)
1623 >>> print(dt1.utcoffset())
1624 4:00:00
1625
1626 >>> # Datetime after the change
1627 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=tz1)
1628 >>> print(dt2.utcoffset())
1629 4:30:00
1630
1631 >>> # Convert datetime to another time zone
1632 >>> dt3 = dt2.astimezone(timezone.utc)
1633 >>> dt3
1634 datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc)
1635 >>> dt2
1636 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=KabulTz())
Joannah Nanjekye1a53c782019-09-11 14:58:42 +01001637 >>> dt2 == dt3
Brad3fb13632019-09-11 05:19:05 -04001638 True
Georg Brandl116aa622007-08-15 14:28:22 +00001639
1640.. _datetime-time:
1641
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001642:class:`.time` Objects
1643----------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001644
Brad3fb13632019-09-11 05:19:05 -04001645A :class:`time` object represents a (local) time of day, independent of any particular
Georg Brandl116aa622007-08-15 14:28:22 +00001646day, and subject to adjustment via a :class:`tzinfo` object.
1647
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001648.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001649
Brad3fb13632019-09-11 05:19:05 -04001650 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
1651 :class:`tzinfo` subclass. The remaining arguments must be integers in the
Georg Brandl116aa622007-08-15 14:28:22 +00001652 following ranges:
1653
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001654 * ``0 <= hour < 24``,
1655 * ``0 <= minute < 60``,
1656 * ``0 <= second < 60``,
1657 * ``0 <= microsecond < 1000000``,
1658 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +00001659
Brad3fb13632019-09-11 05:19:05 -04001660 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
Georg Brandl116aa622007-08-15 14:28:22 +00001661 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1662
1663Class attributes:
1664
1665
1666.. attribute:: time.min
1667
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001668 The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001669
1670
1671.. attribute:: time.max
1672
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001673 The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001674
1675
1676.. attribute:: time.resolution
1677
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001678 The smallest possible difference between non-equal :class:`.time` objects,
1679 ``timedelta(microseconds=1)``, although note that arithmetic on
1680 :class:`.time` objects is not supported.
Georg Brandl116aa622007-08-15 14:28:22 +00001681
Georg Brandl116aa622007-08-15 14:28:22 +00001682
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001683Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001684
1685.. attribute:: time.hour
1686
1687 In ``range(24)``.
1688
1689
1690.. attribute:: time.minute
1691
1692 In ``range(60)``.
1693
1694
1695.. attribute:: time.second
1696
1697 In ``range(60)``.
1698
1699
1700.. attribute:: time.microsecond
1701
1702 In ``range(1000000)``.
1703
1704
1705.. attribute:: time.tzinfo
1706
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001707 The object passed as the tzinfo argument to the :class:`.time` constructor, or
Georg Brandl116aa622007-08-15 14:28:22 +00001708 ``None`` if none was passed.
1709
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001710
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001711.. attribute:: time.fold
1712
Brad3fb13632019-09-11 05:19:05 -04001713 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001714 repeated interval occurs when clocks are rolled back at the end of daylight saving
1715 time or when the UTC offset for the current zone is decreased for political reasons.)
1716 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1717 time representation.
1718
1719 .. versionadded:: 3.6
1720
Brad3fb13632019-09-11 05:19:05 -04001721:class:`.time` objects support comparison of :class:`.time` to :class:`.time`,
1722where *a* is considered less
1723than *b* when *a* precedes *b* in time. If one comparand is naive and the other
1724is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality
1725comparisons, naive instances are never equal to aware instances.
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001726
Brad3fb13632019-09-11 05:19:05 -04001727If both comparands are aware, and have
1728the same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is
1729ignored and the base times are compared. If both comparands are aware and
1730have different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by
1731subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1732to stop mixed-type comparisons from falling back to the default comparison by
1733object address, when a :class:`.time` object is compared to an object of a
1734different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
1735``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl116aa622007-08-15 14:28:22 +00001736
Brad3fb13632019-09-11 05:19:05 -04001737.. versionchanged:: 3.3
1738 Equality comparisons between aware and naive :class:`~datetime.time` instances
1739 don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001740
Brad3fb13632019-09-11 05:19:05 -04001741In Boolean contexts, a :class:`.time` object is always considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001742
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001743.. versionchanged:: 3.5
1744 Before Python 3.5, a :class:`.time` object was considered to be false if it
Brad3fb13632019-09-11 05:19:05 -04001745 represented midnight in UTC. This behavior was considered obscure and
1746 error-prone and has been removed in Python 3.5. See :issue:`13936` for full
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001747 details.
Georg Brandl116aa622007-08-15 14:28:22 +00001748
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001749
1750Other constructor:
1751
1752.. classmethod:: time.fromisoformat(time_string)
1753
Brad3fb13632019-09-11 05:19:05 -04001754 Return a :class:`.time` corresponding to a *time_string* in one of the
1755 formats emitted by :meth:`time.isoformat`. Specifically, this function supports
1756 strings in the format:
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001757
Brad3fb13632019-09-11 05:19:05 -04001758 .. code-block:: none
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001759
Brad3fb13632019-09-11 05:19:05 -04001760 HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001761
Brad3fb13632019-09-11 05:19:05 -04001762 .. caution::
1763
1764 This does *not* support parsing arbitrary ISO 8601 strings. It is only
1765 intended as the inverse operation of :meth:`time.isoformat`.
1766
1767 Examples::
1768
1769 >>> from datetime import time
1770 >>> time.fromisoformat('04:23:01')
1771 datetime.time(4, 23, 1)
1772 >>> time.fromisoformat('04:23:01.000384')
1773 datetime.time(4, 23, 1, 384)
1774 >>> time.fromisoformat('04:23:01+04:00')
1775 datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
1776
1777 .. versionadded:: 3.7
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001778
1779
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001780Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001781
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001782.. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \
1783 microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001784
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001785 Return a :class:`.time` with the same value, except for those attributes given
Brad3fb13632019-09-11 05:19:05 -04001786 new values by whichever keyword arguments are specified. Note that
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001787 ``tzinfo=None`` can be specified to create a naive :class:`.time` from an
1788 aware :class:`.time`, without conversion of the time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001789
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001790 .. versionadded:: 3.6
1791 Added the ``fold`` argument.
1792
Georg Brandl116aa622007-08-15 14:28:22 +00001793
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001794.. method:: time.isoformat(timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001795
Brad3fb13632019-09-11 05:19:05 -04001796 Return a string representing the time in ISO 8601 format, one of:
1797
1798 - ``HH:MM:SS.ffffff``, if :attr:`microsecond` is not 0
1799 - ``HH:MM:SS``, if :attr:`microsecond` is 0
1800 - ``HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :meth:`utcoffset` does not return ``None``
1801 - ``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 +00001802
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001803 The optional argument *timespec* specifies the number of additional
1804 components of the time to include (the default is ``'auto'``).
1805 It can be one of the following:
1806
1807 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1808 same as ``'microseconds'`` otherwise.
Brad3fb13632019-09-11 05:19:05 -04001809 - ``'hours'``: Include the :attr:`hour` in the two-digit ``HH`` format.
1810 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in ``HH:MM`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001811 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
Brad3fb13632019-09-11 05:19:05 -04001812 in ``HH:MM:SS`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001813 - ``'milliseconds'``: Include full time, but truncate fractional second
Brad3fb13632019-09-11 05:19:05 -04001814 part to milliseconds. ``HH:MM:SS.sss`` format.
1815 - ``'microseconds'``: Include full time in ``HH:MM:SS.ffffff`` format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001816
1817 .. note::
1818
1819 Excluded time components are truncated, not rounded.
1820
1821 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1822
Brad3fb13632019-09-11 05:19:05 -04001823 Example::
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001824
1825 >>> from datetime import time
Berker Peksag94f89a62016-06-04 21:36:53 -07001826 >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001827 '12:34'
Berker Peksag94f89a62016-06-04 21:36:53 -07001828 >>> dt = time(hour=12, minute=34, second=56, microsecond=0)
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001829 >>> dt.isoformat(timespec='microseconds')
1830 '12:34:56.000000'
1831 >>> dt.isoformat(timespec='auto')
1832 '12:34:56'
1833
1834 .. versionadded:: 3.6
1835 Added the *timespec* argument.
1836
Georg Brandl116aa622007-08-15 14:28:22 +00001837
1838.. method:: time.__str__()
1839
1840 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1841
1842
1843.. method:: time.strftime(format)
1844
David Wolever569a5fa2013-08-12 16:56:02 -04001845 Return a string representing the time, controlled by an explicit format
Brad3fb13632019-09-11 05:19:05 -04001846 string. For a complete list of formatting directives, see
David Woleverbbf4a462013-08-12 17:15:36 -04001847 :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001848
1849
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001850.. method:: time.__format__(format)
1851
Martin Panterd5db1472016-02-08 01:34:09 +00001852 Same as :meth:`.time.strftime`. This makes it possible to specify a format string
Martin Panterbc1ee462016-02-13 00:41:37 +00001853 for a :class:`.time` object in :ref:`formatted string
Brad3fb13632019-09-11 05:19:05 -04001854 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001855 complete list of formatting directives, see
1856 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001857
1858
Georg Brandl116aa622007-08-15 14:28:22 +00001859.. method:: time.utcoffset()
1860
Martin Panter16c7cfd2016-04-01 21:48:24 +00001861 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001862 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001863 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1864
1865 .. versionchanged:: 3.7
1866 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001867
1868
1869.. method:: time.dst()
1870
Martin Panter16c7cfd2016-04-01 21:48:24 +00001871 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001872 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001873 ``None``, or a :class:`timedelta` object with magnitude less than one day.
Georg Brandl116aa622007-08-15 14:28:22 +00001874
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001875 .. versionchanged:: 3.7
1876 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001877
1878.. method:: time.tzname()
1879
Martin Panter16c7cfd2016-04-01 21:48:24 +00001880 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001881 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1882 return ``None`` or a string object.
1883
Brad3fb13632019-09-11 05:19:05 -04001884Examples of Usage: :class:`.time`
1885^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1886
1887Examples of working with a :class:`.time` object::
Georg Brandl48310cd2009-01-03 21:18:54 +00001888
Xiang Zhang6721c7c2016-12-27 12:23:59 +08001889 >>> from datetime import time, tzinfo, timedelta
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001890 >>> class TZ1(tzinfo):
Christian Heimes895627f2007-12-08 17:28:33 +00001891 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001892 ... return timedelta(hours=1)
1893 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001894 ... return timedelta(0)
1895 ... def tzname(self,dt):
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001896 ... return "+01:00"
1897 ... def __repr__(self):
1898 ... return f"{self.__class__.__name__}()"
Christian Heimes895627f2007-12-08 17:28:33 +00001899 ...
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001900 >>> t = time(12, 10, 30, tzinfo=TZ1())
1901 >>> t
1902 datetime.time(12, 10, 30, tzinfo=TZ1())
Christian Heimes895627f2007-12-08 17:28:33 +00001903 >>> t.isoformat()
1904 '12:10:30+01:00'
1905 >>> t.dst()
1906 datetime.timedelta(0)
1907 >>> t.tzname()
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001908 '+01:00'
Christian Heimes895627f2007-12-08 17:28:33 +00001909 >>> t.strftime("%H:%M:%S %Z")
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001910 '12:10:30 +01:00'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001911 >>> 'The {} is {:%H:%M}.'.format("time", t)
1912 'The time is 12:10.'
Christian Heimes895627f2007-12-08 17:28:33 +00001913
Georg Brandl116aa622007-08-15 14:28:22 +00001914
1915.. _datetime-tzinfo:
1916
1917:class:`tzinfo` Objects
1918-----------------------
1919
Martin Panter16c7cfd2016-04-01 21:48:24 +00001920.. class:: tzinfo()
Georg Brandl116aa622007-08-15 14:28:22 +00001921
Martin Panter16c7cfd2016-04-01 21:48:24 +00001922 This is an abstract base class, meaning that this class should not be
Brad3fb13632019-09-11 05:19:05 -04001923 instantiated directly. Define a subclass of :class:`tzinfo` to capture
1924 information about a particular time zone.
Georg Brandl116aa622007-08-15 14:28:22 +00001925
Martin Panter16c7cfd2016-04-01 21:48:24 +00001926 An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1927 constructors for :class:`.datetime` and :class:`.time` objects. The latter objects
1928 view their attributes as being in local time, and the :class:`tzinfo` object
1929 supports methods revealing offset of local time from UTC, the name of the time
1930 zone, and DST offset, all relative to a date or time object passed to them.
Georg Brandl116aa622007-08-15 14:28:22 +00001931
Brad3fb13632019-09-11 05:19:05 -04001932 You need to derive a concrete subclass, and (at least)
1933 supply implementations of the standard :class:`tzinfo` methods needed by the
1934 :class:`.datetime` methods you use. The :mod:`datetime` module provides
1935 :class:`timezone`, a simple concrete subclass of :class:`tzinfo` which can
1936 represent timezones with fixed offset from UTC such as UTC itself or North
1937 American EST and EDT.
1938
Martin Panter16c7cfd2016-04-01 21:48:24 +00001939 Special requirement for pickling: A :class:`tzinfo` subclass must have an
Brad3fb13632019-09-11 05:19:05 -04001940 :meth:`__init__` method that can be called with no arguments, otherwise it can be
1941 pickled but possibly not unpickled again. This is a technical requirement that
Martin Panter16c7cfd2016-04-01 21:48:24 +00001942 may be relaxed in the future.
1943
1944 A concrete subclass of :class:`tzinfo` may need to implement the following
Brad3fb13632019-09-11 05:19:05 -04001945 methods. Exactly which methods are needed depends on the uses made of aware
1946 :mod:`datetime` objects. If in doubt, simply implement all of them.
Georg Brandl116aa622007-08-15 14:28:22 +00001947
1948
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001949.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001950
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001951 Return offset of local time from UTC, as a :class:`timedelta` object that is
Brad3fb13632019-09-11 05:19:05 -04001952 positive east of UTC. If local time is west of UTC, this should be negative.
1953
1954 This represents the *total* offset from UTC; for example, if a
1955 :class:`tzinfo` object represents both time zone and DST adjustments,
1956 :meth:`utcoffset` should return their sum. If the UTC offset isn't known,
1957 return ``None``. Else the value returned must be a :class:`timedelta` object
1958 strictly between ``-timedelta(hours=24)`` and ``timedelta(hours=24)``
1959 (the magnitude of the offset must be less than one day). Most implementations
1960 of :meth:`utcoffset` will probably look like one of these two::
Georg Brandl116aa622007-08-15 14:28:22 +00001961
1962 return CONSTANT # fixed-offset class
1963 return CONSTANT + self.dst(dt) # daylight-aware class
1964
1965 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1966 ``None`` either.
1967
1968 The default implementation of :meth:`utcoffset` raises
1969 :exc:`NotImplementedError`.
1970
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001971 .. versionchanged:: 3.7
1972 The UTC offset is not restricted to a whole number of minutes.
1973
Georg Brandl116aa622007-08-15 14:28:22 +00001974
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001975.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001976
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001977 Return the daylight saving time (DST) adjustment, as a :class:`timedelta`
1978 object or
Brad3fb13632019-09-11 05:19:05 -04001979 ``None`` if DST information isn't known.
1980
1981 Return ``timedelta(0)`` if DST is not in effect.
1982 If DST is in effect, return the offset as a :class:`timedelta` object
Georg Brandl116aa622007-08-15 14:28:22 +00001983 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1984 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1985 no need to consult :meth:`dst` unless you're interested in obtaining DST info
Brad3fb13632019-09-11 05:19:05 -04001986 separately. For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001987 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1988 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1989 DST changes when crossing time zones.
Georg Brandl116aa622007-08-15 14:28:22 +00001990
1991 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1992 daylight times must be consistent in this sense:
1993
1994 ``tz.utcoffset(dt) - tz.dst(dt)``
1995
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001996 must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo ==
Georg Brandl116aa622007-08-15 14:28:22 +00001997 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1998 zone's "standard offset", which should not depend on the date or the time, but
Brad3fb13632019-09-11 05:19:05 -04001999 only on geographic location. The implementation of :meth:`datetime.astimezone`
Georg Brandl116aa622007-08-15 14:28:22 +00002000 relies on this, but cannot detect violations; it's the programmer's
Brad3fb13632019-09-11 05:19:05 -04002001 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
Georg Brandl116aa622007-08-15 14:28:22 +00002002 this, it may be able to override the default implementation of
2003 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
2004
2005 Most implementations of :meth:`dst` will probably look like one of these two::
2006
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01002007 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00002008 # a fixed-offset class: doesn't account for DST
2009 return timedelta(0)
2010
Brad3fb13632019-09-11 05:19:05 -04002011 or::
Georg Brandl116aa622007-08-15 14:28:22 +00002012
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01002013 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00002014 # Code to set dston and dstoff to the time zone's DST
2015 # transition times based on the input dt.year, and expressed
Brad3fb13632019-09-11 05:19:05 -04002016 # in standard local time.
Georg Brandl116aa622007-08-15 14:28:22 +00002017
2018 if dston <= dt.replace(tzinfo=None) < dstoff:
2019 return timedelta(hours=1)
2020 else:
2021 return timedelta(0)
2022
2023 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
2024
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002025 .. versionchanged:: 3.7
2026 The DST offset is not restricted to a whole number of minutes.
2027
Georg Brandl116aa622007-08-15 14:28:22 +00002028
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002029.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00002030
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002031 Return the time zone name corresponding to the :class:`.datetime` object *dt*, as
Georg Brandl116aa622007-08-15 14:28:22 +00002032 a string. Nothing about string names is defined by the :mod:`datetime` module,
Brad3fb13632019-09-11 05:19:05 -04002033 and there's no requirement that it mean anything in particular. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00002034 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
Brad3fb13632019-09-11 05:19:05 -04002035 valid replies. Return ``None`` if a string name isn't known. Note that this is
Georg Brandl116aa622007-08-15 14:28:22 +00002036 a method rather than a fixed string primarily because some :class:`tzinfo`
2037 subclasses will wish to return different names depending on the specific value
2038 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
2039 daylight time.
2040
2041 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
2042
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002043
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002044These methods are called by a :class:`.datetime` or :class:`.time` object, in
Brad3fb13632019-09-11 05:19:05 -04002045response to their methods of the same names. A :class:`.datetime` object passes
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002046itself as the argument, and a :class:`.time` object passes ``None`` as the
Brad3fb13632019-09-11 05:19:05 -04002047argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002048accept a *dt* argument of ``None``, or of class :class:`.datetime`.
Georg Brandl116aa622007-08-15 14:28:22 +00002049
2050When ``None`` is passed, it's up to the class designer to decide the best
Brad3fb13632019-09-11 05:19:05 -04002051response. For example, returning ``None`` is appropriate if the class wishes to
2052say that time objects don't participate in the :class:`tzinfo` protocols. It
Georg Brandl116aa622007-08-15 14:28:22 +00002053may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
2054there is no other convention for discovering the standard offset.
2055
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002056When a :class:`.datetime` object is passed in response to a :class:`.datetime`
Brad3fb13632019-09-11 05:19:05 -04002057method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
2058rely on this, unless user code calls :class:`tzinfo` methods directly. The
Georg Brandl116aa622007-08-15 14:28:22 +00002059intent is that the :class:`tzinfo` methods interpret *dt* as being in local
2060time, and not need worry about objects in other timezones.
2061
2062There is one more :class:`tzinfo` method that a subclass may wish to override:
2063
2064
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002065.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00002066
Senthil Kumaran023c6f72011-07-17 19:01:14 +08002067 This is called from the default :class:`datetime.astimezone()`
Brad3fb13632019-09-11 05:19:05 -04002068 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
2069 date and time data are to be viewed as expressing a UTC time. The purpose
Senthil Kumaran023c6f72011-07-17 19:01:14 +08002070 of :meth:`fromutc` is to adjust the date and time data, returning an
Senthil Kumarana6bac952011-07-04 11:28:30 -07002071 equivalent datetime in *self*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00002072
2073 Most :class:`tzinfo` subclasses should be able to inherit the default
Brad3fb13632019-09-11 05:19:05 -04002074 :meth:`fromutc` implementation without problems. It's strong enough to handle
Georg Brandl116aa622007-08-15 14:28:22 +00002075 fixed-offset time zones, and time zones accounting for both standard and
2076 daylight time, and the latter even if the DST transition times differ in
Brad3fb13632019-09-11 05:19:05 -04002077 different years. An example of a time zone the default :meth:`fromutc`
Georg Brandl116aa622007-08-15 14:28:22 +00002078 implementation may not handle correctly in all cases is one where the standard
2079 offset (from UTC) depends on the specific date and time passed, which can happen
2080 for political reasons. The default implementations of :meth:`astimezone` and
2081 :meth:`fromutc` may not produce the result you want if the result is one of the
2082 hours straddling the moment the standard offset changes.
2083
2084 Skipping code for error cases, the default :meth:`fromutc` implementation acts
2085 like::
2086
2087 def fromutc(self, dt):
2088 # raise ValueError error if dt.tzinfo is not self
2089 dtoff = dt.utcoffset()
2090 dtdst = dt.dst()
2091 # raise ValueError if dtoff is None or dtdst is None
2092 delta = dtoff - dtdst # this is self's standard offset
2093 if delta:
2094 dt += delta # convert to standard local time
2095 dtdst = dt.dst()
2096 # raise ValueError if dtdst is None
2097 if dtdst:
2098 return dt + dtdst
2099 else:
2100 return dt
2101
Marco Buttu909a6f62017-03-18 17:59:33 +01002102In the following :download:`tzinfo_examples.py
2103<../includes/tzinfo_examples.py>` file there are some examples of
2104:class:`tzinfo` classes:
Georg Brandl116aa622007-08-15 14:28:22 +00002105
Marco Buttu909a6f62017-03-18 17:59:33 +01002106.. literalinclude:: ../includes/tzinfo_examples.py
Georg Brandl116aa622007-08-15 14:28:22 +00002107
Georg Brandl116aa622007-08-15 14:28:22 +00002108Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
2109subclass accounting for both standard and daylight time, at the DST transition
Brad3fb13632019-09-11 05:19:05 -04002110points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00002111minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
21121:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00002113
2114 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
2115 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
2116 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
2117
2118 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
2119
2120 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
2121
2122When DST starts (the "start" line), the local wall clock leaps from 1:59 to
Brad3fb13632019-09-11 05:19:05 -040021233: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 +00002124``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
Brad3fb13632019-09-11 05:19:05 -04002125begins. For example, at the Spring forward transition of 2016, we get::
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002126
Marco Buttu909a6f62017-03-18 17:59:33 +01002127 >>> from datetime import datetime, timezone
2128 >>> from tzinfo_examples import HOUR, Eastern
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002129 >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
2130 >>> for i in range(4):
2131 ... u = u0 + i*HOUR
2132 ... t = u.astimezone(Eastern)
2133 ... print(u.time(), 'UTC =', t.time(), t.tzname())
2134 ...
2135 05:00:00 UTC = 00:00:00 EST
2136 06:00:00 UTC = 01:00:00 EST
2137 07:00:00 UTC = 03:00:00 EDT
2138 08:00:00 UTC = 04:00:00 EDT
2139
Georg Brandl116aa622007-08-15 14:28:22 +00002140
2141When DST ends (the "end" line), there's a potentially worse problem: there's an
2142hour that can't be spelled unambiguously in local wall time: the last hour of
Brad3fb13632019-09-11 05:19:05 -04002143daylight time. In Eastern, that's times of the form 5:MM UTC on the day
2144daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
Georg Brandl116aa622007-08-15 14:28:22 +00002145to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
2146:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
Brad3fb13632019-09-11 05:19:05 -04002147hours into the same local hour then. In the Eastern example, UTC times of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002148form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times
2149have the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1.
Brad3fb13632019-09-11 05:19:05 -04002150For example, at the Fall back transition of 2016, we get::
Georg Brandl116aa622007-08-15 14:28:22 +00002151
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002152 >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
2153 >>> for i in range(4):
2154 ... u = u0 + i*HOUR
2155 ... t = u.astimezone(Eastern)
2156 ... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
2157 ...
2158 04:00:00 UTC = 00:00:00 EDT 0
2159 05:00:00 UTC = 01:00:00 EDT 0
2160 06:00:00 UTC = 01:00:00 EST 1
2161 07:00:00 UTC = 02:00:00 EST 0
2162
Brad3fb13632019-09-11 05:19:05 -04002163Note that the :class:`.datetime` instances that differ only by the value of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002164:attr:`~datetime.fold` attribute are considered equal in comparisons.
2165
2166Applications that can't bear wall-time ambiguities should explicitly check the
Raymond Hettinger15f44ab2016-08-30 10:47:49 -07002167value of the :attr:`~datetime.fold` attribute or avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002168:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
2169or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
2170only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
2171
Sandro Tosid11d0d62012-04-24 19:46:06 +02002172.. seealso::
2173
wim glenn53f2af12017-06-06 12:54:41 -05002174 `dateutil.tz <https://dateutil.readthedocs.io/en/stable/tz.html>`_
Brad3fb13632019-09-11 05:19:05 -04002175 The :mod:`datetime` module has a basic :class:`timezone` class (for
2176 handling arbitrary fixed offsets from UTC) and its :attr:`timezone.utc`
2177 attribute (a UTC timezone instance).
Sandro Tosid11d0d62012-04-24 19:46:06 +02002178
Brad3fb13632019-09-11 05:19:05 -04002179 *dateutil.tz* library brings the *IANA timezone database*
2180 (also known as the Olson database) to Python, and its usage is
2181 recommended.
Sandro Tosi100b8892012-04-28 11:19:37 +02002182
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002183 `IANA timezone database <https://www.iana.org/time-zones>`_
Brad3fb13632019-09-11 05:19:05 -04002184 The Time Zone Database (often called tz, tzdata or zoneinfo) contains code
2185 and data that represent the history of local time for many representative
Sandro Tosi100b8892012-04-28 11:19:37 +02002186 locations around the globe. It is updated periodically to reflect changes
2187 made by political bodies to time zone boundaries, UTC offsets, and
2188 daylight-saving rules.
Sandro Tosid11d0d62012-04-24 19:46:06 +02002189
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002190
2191.. _datetime-timezone:
2192
2193:class:`timezone` Objects
2194--------------------------
2195
Alexander Belopolsky6d3c9a62011-05-04 10:28:26 -04002196The :class:`timezone` class is a subclass of :class:`tzinfo`, each
2197instance of which represents a timezone defined by a fixed offset from
Brad3fb13632019-09-11 05:19:05 -04002198UTC.
2199
2200Objects of this class cannot be used to represent timezone information in the
2201locations where different offsets are used in different days of the year or
2202where historical changes have been made to civil time.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002203
2204
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04002205.. class:: timezone(offset, name=None)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002206
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002207 The *offset* argument must be specified as a :class:`timedelta`
Brad3fb13632019-09-11 05:19:05 -04002208 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002209 be strictly between ``-timedelta(hours=24)`` and
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002210 ``timedelta(hours=24)``, otherwise :exc:`ValueError` is raised.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002211
Brad3fb13632019-09-11 05:19:05 -04002212 The *name* argument is optional. If specified it must be a string that
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002213 will be used as the value returned by the :meth:`datetime.tzname` method.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002214
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07002215 .. versionadded:: 3.2
2216
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002217 .. versionchanged:: 3.7
2218 The UTC offset is not restricted to a whole number of minutes.
2219
2220
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002221.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002222
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002223 Return the fixed value specified when the :class:`timezone` instance is
Brad3fb13632019-09-11 05:19:05 -04002224 constructed.
2225
2226 The *dt* argument is ignored. The return value is a :class:`timedelta`
2227 instance equal to the difference between the local time and UTC.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002228
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002229 .. versionchanged:: 3.7
2230 The UTC offset is not restricted to a whole number of minutes.
2231
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002232.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002233
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002234 Return the fixed value specified when the :class:`timezone` instance
Brad3fb13632019-09-11 05:19:05 -04002235 is constructed.
2236
2237 If *name* is not provided in the constructor, the name returned by
2238 ``tzname(dt)`` is generated from the value of the ``offset`` as follows. If
2239 *offset* is ``timedelta(0)``, the name is "UTC", otherwise it is a string in
2240 the format ``UTC±HH:MM``, where ± is the sign of ``offset``, HH and MM are
2241 two digits of ``offset.hours`` and ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002242
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002243 .. versionchanged:: 3.6
Brad3fb13632019-09-11 05:19:05 -04002244 Name generated from ``offset=timedelta(0)`` is now plain `'UTC'`, not
2245 ``'UTC+00:00'``.
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002246
2247
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002248.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002249
2250 Always returns ``None``.
2251
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002252.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002253
Brad3fb13632019-09-11 05:19:05 -04002254 Return ``dt + offset``. The *dt* argument must be an aware
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002255 :class:`.datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002256
2257Class attributes:
2258
2259.. attribute:: timezone.utc
2260
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002261 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00002262
Georg Brandl116aa622007-08-15 14:28:22 +00002263
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002264.. index::
Serhiy Storchaka913876d2018-10-28 13:41:26 +02002265 single: % (percent); datetime format
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002266
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002267.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00002268
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002269:meth:`strftime` and :meth:`strptime` Behavior
2270----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00002271
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002272:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a
Georg Brandl116aa622007-08-15 14:28:22 +00002273``strftime(format)`` method, to create a string representing the time under the
Brad3fb13632019-09-11 05:19:05 -04002274control of an explicit format string.
Georg Brandl116aa622007-08-15 14:28:22 +00002275
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002276Conversely, the :meth:`datetime.strptime` class method creates a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002277:class:`.datetime` object from a string representing a date and time and a
Brad3fb13632019-09-11 05:19:05 -04002278corresponding format string.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002279
Brad3fb13632019-09-11 05:19:05 -04002280The table below provides a high-level comparison of :meth:`strftime`
2281versus :meth:`strptime`:
Georg Brandl116aa622007-08-15 14:28:22 +00002282
Brad3fb13632019-09-11 05:19:05 -04002283+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2284| | ``strftime`` | ``strptime`` |
2285+================+========================================================+==============================================================================+
2286| Usage | Convert object to a string according to a given format | Parse a string into a :class:`.datetime` object given a corresponding format |
2287+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2288| Type of method | Instance method | Class method |
2289+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2290| Method of | :class:`date`; :class:`.datetime`; :class:`.time` | :class:`.datetime` |
2291+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
2292| Signature | ``strftime(format)`` | ``strptime(date_string, format)`` |
2293+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002294
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302295
Brad3fb13632019-09-11 05:19:05 -04002296:meth:`strftime` and :meth:`strptime` Format Codes
2297^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Christian Heimes895627f2007-12-08 17:28:33 +00002298
Brad3fb13632019-09-11 05:19:05 -04002299The following is a list of all the format codes that the 1989 C standard
2300requires, and these work on all platforms with a standard C implementation.
Georg Brandl116aa622007-08-15 14:28:22 +00002301
David Wolever569a5fa2013-08-12 16:56:02 -04002302+-----------+--------------------------------+------------------------+-------+
2303| Directive | Meaning | Example | Notes |
2304+===========+================================+========================+=======+
2305| ``%a`` | Weekday as locale's || Sun, Mon, ..., Sat | \(1) |
2306| | abbreviated name. | (en_US); | |
2307| | || So, Mo, ..., Sa | |
2308| | | (de_DE) | |
2309+-----------+--------------------------------+------------------------+-------+
2310| ``%A`` | Weekday as locale's full name. || Sunday, Monday, ..., | \(1) |
2311| | | Saturday (en_US); | |
2312| | || Sonntag, Montag, ..., | |
2313| | | Samstag (de_DE) | |
2314+-----------+--------------------------------+------------------------+-------+
2315| ``%w`` | Weekday as a decimal number, | 0, 1, ..., 6 | |
2316| | where 0 is Sunday and 6 is | | |
2317| | Saturday. | | |
2318+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002319| ``%d`` | Day of the month as a | 01, 02, ..., 31 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002320| | zero-padded decimal number. | | |
2321+-----------+--------------------------------+------------------------+-------+
2322| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
2323| | name. | (en_US); | |
2324| | || Jan, Feb, ..., Dez | |
2325| | | (de_DE) | |
2326+-----------+--------------------------------+------------------------+-------+
2327| ``%B`` | Month as locale's full name. || January, February, | \(1) |
2328| | | ..., December (en_US);| |
2329| | || Januar, Februar, ..., | |
2330| | | Dezember (de_DE) | |
2331+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002332| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002333| | decimal number. | | |
2334+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002335| ``%y`` | Year without century as a | 00, 01, ..., 99 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002336| | zero-padded decimal number. | | |
2337+-----------+--------------------------------+------------------------+-------+
2338| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
David Wolever5d07e702013-08-14 14:41:48 -04002339| | number. | 2014, ..., 9998, 9999 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002340+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002341| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002342| | zero-padded decimal number. | | |
2343+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002344| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002345| | zero-padded decimal number. | | |
2346+-----------+--------------------------------+------------------------+-------+
2347| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
2348| | AM or PM. || am, pm (de_DE) | \(3) |
2349+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002350| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002351| | decimal number. | | |
2352+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002353| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4), |
2354| | decimal number. | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002355+-----------+--------------------------------+------------------------+-------+
2356| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
2357| | number, zero-padded on the | 999999 | |
2358| | left. | | |
2359+-----------+--------------------------------+------------------------+-------+
Christophe Nanteuil92878822018-10-06 00:57:02 +02002360| ``%z`` | UTC offset in the form | (empty), +0000, | \(6) |
Brad3fb13632019-09-11 05:19:05 -04002361| | ``±HHMM[SS[.ffffff]]`` (empty | -0400, +1030, | |
Christophe Nanteuil92878822018-10-06 00:57:02 +02002362| | string if the object is | +063415, | |
2363| | naive). | -030712.345216 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002364+-----------+--------------------------------+------------------------+-------+
2365| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | |
2366| | if the object is naive). | | |
2367+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002368| ``%j`` | Day of the year as a | 001, 002, ..., 366 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002369| | zero-padded decimal number. | | |
2370+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002371| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7), |
2372| | (Sunday as the first day of | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002373| | the week) as a zero padded | | |
2374| | decimal number. All days in a | | |
2375| | new year preceding the first | | |
2376| | Sunday are considered to be in | | |
2377| | week 0. | | |
2378+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002379| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7), |
2380| | (Monday as the first day of | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002381| | the week) as a decimal number. | | |
2382| | All days in a new year | | |
2383| | preceding the first Monday | | |
2384| | are considered to be in | | |
2385| | week 0. | | |
2386+-----------+--------------------------------+------------------------+-------+
2387| ``%c`` | Locale's appropriate date and || Tue Aug 16 21:30:00 | \(1) |
2388| | time representation. | 1988 (en_US); | |
2389| | || Di 16 Aug 21:30:00 | |
2390| | | 1988 (de_DE) | |
2391+-----------+--------------------------------+------------------------+-------+
2392| ``%x`` | Locale's appropriate date || 08/16/88 (None); | \(1) |
2393| | representation. || 08/16/1988 (en_US); | |
2394| | || 16.08.1988 (de_DE) | |
2395+-----------+--------------------------------+------------------------+-------+
2396| ``%X`` | Locale's appropriate time || 21:30:00 (en_US); | \(1) |
2397| | representation. || 21:30:00 (de_DE) | |
2398+-----------+--------------------------------+------------------------+-------+
2399| ``%%`` | A literal ``'%'`` character. | % | |
2400+-----------+--------------------------------+------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00002401
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002402Several additional directives not required by the C89 standard are included for
Brad3fb13632019-09-11 05:19:05 -04002403convenience. These parameters all correspond to ISO 8601 date values.
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002404
2405+-----------+--------------------------------+------------------------+-------+
2406| Directive | Meaning | Example | Notes |
2407+===========+================================+========================+=======+
2408| ``%G`` | ISO 8601 year with century | 0001, 0002, ..., 2013, | \(8) |
2409| | representing the year that | 2014, ..., 9998, 9999 | |
2410| | contains the greater part of | | |
2411| | the ISO week (``%V``). | | |
2412+-----------+--------------------------------+------------------------+-------+
2413| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
2414| | number where 1 is Monday. | | |
2415+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002416| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8), |
2417| | number with Monday as | | \(9) |
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002418| | the first day of the week. | | |
2419| | Week 01 is the week containing | | |
2420| | Jan 4. | | |
2421+-----------+--------------------------------+------------------------+-------+
2422
Brad3fb13632019-09-11 05:19:05 -04002423These may not be available on all platforms when used with the :meth:`strftime`
2424method. The ISO 8601 year and ISO 8601 week directives are not interchangeable
2425with the year and week number directives above. Calling :meth:`strptime` with
2426incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
2427
2428The full set of format codes supported varies across platforms, because Python
2429calls the platform C library's :func:`strftime` function, and platform
2430variations are common. To see the full set of format codes supported on your
2431platform, consult the :manpage:`strftime(3)` documentation.
2432
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002433.. versionadded:: 3.6
2434 ``%G``, ``%u`` and ``%V`` were added.
2435
Brad3fb13632019-09-11 05:19:05 -04002436Technical Detail
2437^^^^^^^^^^^^^^^^
2438
2439Broadly speaking, ``d.strftime(fmt)`` acts like the :mod:`time` module's
2440``time.strftime(fmt, d.timetuple())`` although not all objects support a
2441:meth:`timetuple` method.
2442
2443For the :meth:`datetime.strptime` class method, the default value is
2444``1900-01-01T00:00:00.000``: any components not specified in the format string
2445will be pulled from the default value. [#]_
2446
2447Using ``datetime.strptime(date_string, format)`` is equivalent to::
2448
2449 datetime(*(time.strptime(date_string, format)[0:6]))
2450
2451except when the format includes sub-second components or timezone offset
2452information, which are supported in ``datetime.strptime`` but are discarded by
2453``time.strptime``.
2454
2455For :class:`.time` objects, the format codes for year, month, and day should not
2456be used, as :class:`time` objects have no such values. If they're used anyway,
2457``1900`` is substituted for the year, and ``1`` for the month and day.
2458
2459For :class:`date` objects, the format codes for hours, minutes, seconds, and
2460microseconds should not be used, as :class:`date` objects have no such
2461values. If they're used anyway, ``0`` is substituted for them.
2462
2463For the same reason, handling of format strings containing Unicode code points
2464that can't be represented in the charset of the current locale is also
2465platform-dependent. On some platforms such code points are preserved intact in
2466the output, while on others ``strftime`` may raise :exc:`UnicodeError` or return
2467an empty string instead.
2468
Christian Heimes895627f2007-12-08 17:28:33 +00002469Notes:
2470
2471(1)
David Wolever569a5fa2013-08-12 16:56:02 -04002472 Because the format depends on the current locale, care should be taken when
2473 making assumptions about the output value. Field orderings will vary (for
2474 example, "month/day/year" versus "day/month/year"), and the output may
2475 contain Unicode characters encoded using the locale's default encoding (for
Georg Brandlad321532013-10-29 08:05:10 +01002476 example, if the current locale is ``ja_JP``, the default encoding could be
David Wolever569a5fa2013-08-12 16:56:02 -04002477 any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale`
2478 to determine the current locale's encoding).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002479
2480(2)
David Wolever569a5fa2013-08-12 16:56:02 -04002481 The :meth:`strptime` method can parse years in the full [1, 9999] range, but
2482 years < 1000 must be zero-filled to 4-digit width.
Alexander Belopolsky085556a2011-01-10 23:28:33 +00002483
2484 .. versionchanged:: 3.2
2485 In previous versions, :meth:`strftime` method was restricted to
2486 years >= 1900.
2487
Alexander Belopolsky5611a1c2011-05-02 14:14:48 -04002488 .. versionchanged:: 3.3
2489 In version 3.2, :meth:`strftime` method was restricted to
2490 years >= 1000.
2491
David Wolever569a5fa2013-08-12 16:56:02 -04002492(3)
2493 When used with the :meth:`strptime` method, the ``%p`` directive only affects
2494 the output hour field if the ``%I`` directive is used to parse the hour.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00002495
David Wolever569a5fa2013-08-12 16:56:02 -04002496(4)
2497 Unlike the :mod:`time` module, the :mod:`datetime` module does not support
2498 leap seconds.
2499
2500(5)
2501 When used with the :meth:`strptime` method, the ``%f`` directive
Brad3fb13632019-09-11 05:19:05 -04002502 accepts from one to six digits and zero pads on the right. ``%f`` is
David Wolever569a5fa2013-08-12 16:56:02 -04002503 an extension to the set of format characters in the C standard (but
2504 implemented separately in datetime objects, and therefore always
2505 available).
2506
2507(6)
2508 For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
2509 strings.
2510
2511 For an aware object:
2512
2513 ``%z``
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002514 :meth:`utcoffset` is transformed into a string of the form
Brad3fb13632019-09-11 05:19:05 -04002515 ``±HHMM[SS[.ffffff]]``, where ``HH`` is a 2-digit string giving the number
2516 of UTC offset hours, ``MM`` is a 2-digit string giving the number of UTC
2517 offset minutes, SS is a 2-digit string giving the number of UTC offset
2518 seconds and ``ffffff`` is a 6-digit string giving the number of UTC
2519 offset microseconds. The ``ffffff`` part is omitted when the offset is a
2520 whole number of seconds and both the ``ffffff`` and the ``SS`` part is
2521 omitted when the offset is a whole number of minutes. For example, if
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002522 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
2523 replaced with the string ``'-0330'``.
2524
2525 .. versionchanged:: 3.7
2526 The UTC offset is not restricted to a whole number of minutes.
David Wolever569a5fa2013-08-12 16:56:02 -04002527
Mario Corchero32318932017-10-26 01:35:41 +01002528 .. versionchanged:: 3.7
2529 When the ``%z`` directive is provided to the :meth:`strptime` method,
2530 the UTC offsets can have a colon as a separator between hours, minutes
2531 and seconds.
2532 For example, ``'+01:00:00'`` will be parsed as an offset of one hour.
2533 In addition, providing ``'Z'`` is identical to ``'+00:00'``.
2534
David Wolever569a5fa2013-08-12 16:56:02 -04002535 ``%Z``
2536 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty
Brad3fb13632019-09-11 05:19:05 -04002537 string. Otherwise ``%Z`` is replaced by the returned value, which must
David Wolever569a5fa2013-08-12 16:56:02 -04002538 be a string.
2539
2540 .. versionchanged:: 3.2
2541 When the ``%z`` directive is provided to the :meth:`strptime` method, an
Brad3fb13632019-09-11 05:19:05 -04002542 aware :class:`.datetime` object will be produced. The ``tzinfo`` of the
David Wolever569a5fa2013-08-12 16:56:02 -04002543 result will be set to a :class:`timezone` instance.
2544
2545(7)
2546 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002547 in calculations when the day of the week and the calendar year (``%Y``)
2548 are specified.
2549
2550(8)
2551 Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the
2552 day of the week and the ISO year (``%G``) are specified in a
2553 :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
Martin Panterf1579822016-05-26 06:03:33 +00002554 interchangeable.
R David Murray9075d8b2012-05-14 22:14:46 -04002555
Mike Gleen6b9c2042019-06-18 19:14:57 +01002556(9)
2557 When used with the :meth:`strptime` method, the leading zero is optional
2558 for formats ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, ``%S``, ``%J``, ``%U``,
2559 ``%W``, and ``%V``. Format ``%y`` does require a leading zero.
2560
R David Murray9075d8b2012-05-14 22:14:46 -04002561.. rubric:: Footnotes
2562
2563.. [#] If, that is, we ignore the effects of Relativity
Brad3fb13632019-09-11 05:19:05 -04002564
2565.. [#] This matches the definition of the "proleptic Gregorian" calendar in
2566 Dershowitz and Reingold's book *Calendrical Calculations*,
2567 where it's the base calendar for all computations. See the book for
2568 algorithms for converting between proleptic Gregorian ordinals and
2569 many other calendar systems.
2570
2571.. [#] See R. H. van Gent's `guide to the mathematics of the ISO 8601 calendar
2572 <https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm>`_
2573 for a good explanation.
2574
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302575.. [#] Passing ``datetime.strptime('Feb 29', '%b %d')`` will fail since ``1900`` is not a leap year.