blob: 50f1b9e74949f0beb3bea09ec8d200329fe493c6 [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
Georg Brandl116aa622007-08-15 14:28:22 +000017The :mod:`datetime` module supplies classes for manipulating dates and times in
18both simple and complex ways. While date and time arithmetic is supported, the
Senthil Kumarana6bac952011-07-04 11:28:30 -070019focus of the implementation is on efficient attribute extraction for output
R David Murray539f2392012-05-14 22:17:23 -040020formatting and manipulation. For related functionality, see also the
21:mod:`time` and :mod:`calendar` modules.
Georg Brandl116aa622007-08-15 14:28:22 +000022
R David Murray9075d8b2012-05-14 22:14:46 -040023There are two kinds of date and time objects: "naive" and "aware".
Georg Brandl116aa622007-08-15 14:28:22 +000024
R David Murray9075d8b2012-05-14 22:14:46 -040025An aware object has sufficient knowledge of applicable algorithmic and
26political time adjustments, such as time zone and daylight saving time
27information, to locate itself relative to other aware objects. An aware object
28is used to represent a specific moment in time that is not open to
29interpretation [#]_.
30
31A naive object does not contain enough information to unambiguously locate
32itself relative to other date/time objects. Whether a naive object represents
R David Murray539f2392012-05-14 22:17:23 -040033Coordinated Universal Time (UTC), local time, or time in some other timezone is
34purely up to the program, just like it is up to the program whether a
35particular number represents metres, miles, or mass. Naive objects are easy to
36understand and to work with, at the cost of ignoring some aspects of reality.
Georg Brandl116aa622007-08-15 14:28:22 +000037
R David Murray539f2392012-05-14 22:17:23 -040038For applications requiring aware objects, :class:`.datetime` and :class:`.time`
Martin Panter16c7cfd2016-04-01 21:48:24 +000039objects have an optional time zone information attribute, :attr:`!tzinfo`, that
R David Murray539f2392012-05-14 22:17:23 -040040can be set to an instance of a subclass of the abstract :class:`tzinfo` class.
41These :class:`tzinfo` objects capture information about the offset from UTC
42time, the time zone name, and whether Daylight Saving Time is in effect. Note
43that only one concrete :class:`tzinfo` class, the :class:`timezone` class, is
44supplied by the :mod:`datetime` module. The :class:`timezone` class can
45represent simple timezones with fixed offset from UTC, such as UTC itself or
46North American EST and EDT timezones. Supporting timezones at deeper levels of
47detail is up to the application. The rules for time adjustment across the
Alexander Belopolsky4e749a12010-06-14 14:15:50 +000048world are more political than rational, change frequently, and there is no
49standard suitable for every application aside from UTC.
Georg Brandl116aa622007-08-15 14:28:22 +000050
51The :mod:`datetime` module exports the following constants:
52
Georg Brandl116aa622007-08-15 14:28:22 +000053.. data:: MINYEAR
54
Ezio Melotti35ec7f72011-10-02 12:44:50 +030055 The smallest year number allowed in a :class:`date` or :class:`.datetime` object.
Georg Brandl116aa622007-08-15 14:28:22 +000056 :const:`MINYEAR` is ``1``.
57
58
59.. data:: MAXYEAR
60
Ezio Melotti35ec7f72011-10-02 12:44:50 +030061 The largest year number allowed in a :class:`date` or :class:`.datetime` object.
Georg Brandl116aa622007-08-15 14:28:22 +000062 :const:`MAXYEAR` is ``9999``.
63
64
65.. seealso::
66
67 Module :mod:`calendar`
68 General calendar related functions.
69
70 Module :mod:`time`
71 Time access and conversions.
72
73
74Available Types
75---------------
76
Georg Brandl116aa622007-08-15 14:28:22 +000077.. class:: date
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000078 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000079
80 An idealized naive date, assuming the current Gregorian calendar always was, and
81 always will be, in effect. Attributes: :attr:`year`, :attr:`month`, and
82 :attr:`day`.
83
84
85.. class:: time
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000086 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000087
88 An idealized time, independent of any particular day, assuming that every day
89 has exactly 24\*60\*60 seconds (there is no notion of "leap seconds" here).
90 Attributes: :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
Martin Panter16c7cfd2016-04-01 21:48:24 +000091 and :attr:`.tzinfo`.
Georg Brandl116aa622007-08-15 14:28:22 +000092
93
94.. class:: datetime
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000095 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000096
97 A combination of a date and a time. Attributes: :attr:`year`, :attr:`month`,
98 :attr:`day`, :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
Martin Panter16c7cfd2016-04-01 21:48:24 +000099 and :attr:`.tzinfo`.
Georg Brandl116aa622007-08-15 14:28:22 +0000100
101
102.. class:: timedelta
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +0000103 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +0000104
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300105 A duration expressing the difference between two :class:`date`, :class:`.time`,
106 or :class:`.datetime` instances to microsecond resolution.
Georg Brandl116aa622007-08-15 14:28:22 +0000107
108
109.. class:: tzinfo
Martin Panter16c7cfd2016-04-01 21:48:24 +0000110 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +0000111
112 An abstract base class for time zone information objects. These are used by the
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300113 :class:`.datetime` and :class:`.time` classes to provide a customizable notion of
Georg Brandl116aa622007-08-15 14:28:22 +0000114 time adjustment (for example, to account for time zone and/or daylight saving
115 time).
116
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000117.. class:: timezone
Martin Panter16c7cfd2016-04-01 21:48:24 +0000118 :noindex:
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000119
120 A class that implements the :class:`tzinfo` abstract base class as a
121 fixed offset from the UTC.
122
123 .. versionadded:: 3.2
124
125
Georg Brandl116aa622007-08-15 14:28:22 +0000126Objects of these types are immutable.
127
128Objects of the :class:`date` type are always naive.
129
R David Murray9075d8b2012-05-14 22:14:46 -0400130An object of type :class:`.time` or :class:`.datetime` may be naive or aware.
131A :class:`.datetime` object *d* is aware if ``d.tzinfo`` is not ``None`` and
132``d.tzinfo.utcoffset(d)`` does not return ``None``. If ``d.tzinfo`` is
133``None``, or if ``d.tzinfo`` is not ``None`` but ``d.tzinfo.utcoffset(d)``
134returns ``None``, *d* is naive. A :class:`.time` object *t* is aware
135if ``t.tzinfo`` is not ``None`` and ``t.tzinfo.utcoffset(None)`` does not return
136``None``. Otherwise, *t* is naive.
Georg Brandl116aa622007-08-15 14:28:22 +0000137
138The distinction between naive and aware doesn't apply to :class:`timedelta`
139objects.
140
141Subclass relationships::
142
143 object
144 timedelta
145 tzinfo
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000146 timezone
Georg Brandl116aa622007-08-15 14:28:22 +0000147 time
148 date
149 datetime
150
151
152.. _datetime-timedelta:
153
154:class:`timedelta` Objects
155--------------------------
156
157A :class:`timedelta` object represents a duration, the difference between two
158dates or times.
159
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000160.. class:: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000161
Georg Brandl5c106642007-11-29 17:41:05 +0000162 All arguments are optional and default to ``0``. Arguments may be integers
Georg Brandl116aa622007-08-15 14:28:22 +0000163 or floats, and may be positive or negative.
164
165 Only *days*, *seconds* and *microseconds* are stored internally. Arguments are
166 converted to those units:
167
168 * A millisecond is converted to 1000 microseconds.
169 * A minute is converted to 60 seconds.
170 * An hour is converted to 3600 seconds.
171 * A week is converted to 7 days.
172
173 and days, seconds and microseconds are then normalized so that the
174 representation is unique, with
175
176 * ``0 <= microseconds < 1000000``
177 * ``0 <= seconds < 3600*24`` (the number of seconds in one day)
178 * ``-999999999 <= days <= 999999999``
179
Alexander Belopolsky790d2692013-08-04 14:51:35 -0400180 If any argument is a float and there are fractional microseconds,
181 the fractional microseconds left over from all arguments are
182 combined and their sum is rounded to the nearest microsecond using
183 round-half-to-even tiebreaker. If no argument is a float, the
184 conversion and normalization processes are exact (no information is
185 lost).
Georg Brandl116aa622007-08-15 14:28:22 +0000186
187 If the normalized value of days lies outside the indicated range,
188 :exc:`OverflowError` is raised.
189
190 Note that normalization of negative values may be surprising at first. For
Christian Heimesfe337bf2008-03-23 21:54:12 +0000191 example,
Georg Brandl116aa622007-08-15 14:28:22 +0000192
Christian Heimes895627f2007-12-08 17:28:33 +0000193 >>> from datetime import timedelta
Georg Brandl116aa622007-08-15 14:28:22 +0000194 >>> d = timedelta(microseconds=-1)
195 >>> (d.days, d.seconds, d.microseconds)
196 (-1, 86399, 999999)
197
Georg Brandl116aa622007-08-15 14:28:22 +0000198
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000199Class attributes are:
Georg Brandl116aa622007-08-15 14:28:22 +0000200
201.. attribute:: timedelta.min
202
203 The most negative :class:`timedelta` object, ``timedelta(-999999999)``.
204
205
206.. attribute:: timedelta.max
207
208 The most positive :class:`timedelta` object, ``timedelta(days=999999999,
209 hours=23, minutes=59, seconds=59, microseconds=999999)``.
210
211
212.. attribute:: timedelta.resolution
213
214 The smallest possible difference between non-equal :class:`timedelta` objects,
215 ``timedelta(microseconds=1)``.
216
217Note that, because of normalization, ``timedelta.max`` > ``-timedelta.min``.
218``-timedelta.max`` is not representable as a :class:`timedelta` object.
219
220Instance attributes (read-only):
221
222+------------------+--------------------------------------------+
223| Attribute | Value |
224+==================+============================================+
225| ``days`` | Between -999999999 and 999999999 inclusive |
226+------------------+--------------------------------------------+
227| ``seconds`` | Between 0 and 86399 inclusive |
228+------------------+--------------------------------------------+
229| ``microseconds`` | Between 0 and 999999 inclusive |
230+------------------+--------------------------------------------+
231
232Supported operations:
233
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000234.. XXX this table is too wide!
Georg Brandl116aa622007-08-15 14:28:22 +0000235
236+--------------------------------+-----------------------------------------------+
237| Operation | Result |
238+================================+===============================================+
239| ``t1 = t2 + t3`` | Sum of *t2* and *t3*. Afterwards *t1*-*t2* == |
240| | *t3* and *t1*-*t3* == *t2* are true. (1) |
241+--------------------------------+-----------------------------------------------+
242| ``t1 = t2 - t3`` | Difference of *t2* and *t3*. Afterwards *t1* |
243| | == *t2* - *t3* and *t2* == *t1* + *t3* are |
Farhaan Bukhsh5b6e49a2018-07-05 00:12:05 +0530244| | true. (1)(6) |
Georg Brandl116aa622007-08-15 14:28:22 +0000245+--------------------------------+-----------------------------------------------+
Georg Brandl5c106642007-11-29 17:41:05 +0000246| ``t1 = t2 * i or t1 = i * t2`` | Delta multiplied by an integer. |
Georg Brandl116aa622007-08-15 14:28:22 +0000247| | Afterwards *t1* // i == *t2* is true, |
248| | provided ``i != 0``. |
249+--------------------------------+-----------------------------------------------+
250| | In general, *t1* \* i == *t1* \* (i-1) + *t1* |
251| | is true. (1) |
252+--------------------------------+-----------------------------------------------+
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000253| ``t1 = t2 * f or t1 = f * t2`` | Delta multiplied by a float. The result is |
254| | rounded to the nearest multiple of |
255| | timedelta.resolution using round-half-to-even.|
256+--------------------------------+-----------------------------------------------+
Yasser Af40b4a02019-03-15 23:56:58 -0400257| ``f = t2 / t3`` | Division (3) of overall duration *t2* by |
258| | interval unit *t3*. Returns a :class:`float` |
259| | object. |
Mark Dickinson7c186e22010-04-20 22:32:49 +0000260+--------------------------------+-----------------------------------------------+
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000261| ``t1 = t2 / f or t1 = t2 / i`` | Delta divided by a float or an int. The result|
262| | is rounded to the nearest multiple of |
263| | timedelta.resolution using round-half-to-even.|
264+--------------------------------+-----------------------------------------------+
Mark Dickinson7c186e22010-04-20 22:32:49 +0000265| ``t1 = t2 // i`` or | The floor is computed and the remainder (if |
266| ``t1 = t2 // t3`` | any) is thrown away. In the second case, an |
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000267| | integer is returned. (3) |
Mark Dickinson7c186e22010-04-20 22:32:49 +0000268+--------------------------------+-----------------------------------------------+
269| ``t1 = t2 % t3`` | The remainder is computed as a |
270| | :class:`timedelta` object. (3) |
271+--------------------------------+-----------------------------------------------+
272| ``q, r = divmod(t1, t2)`` | Computes the quotient and the remainder: |
273| | ``q = t1 // t2`` (3) and ``r = t1 % t2``. |
274| | q is an integer and r is a :class:`timedelta` |
275| | object. |
Georg Brandl116aa622007-08-15 14:28:22 +0000276+--------------------------------+-----------------------------------------------+
277| ``+t1`` | Returns a :class:`timedelta` object with the |
278| | same value. (2) |
279+--------------------------------+-----------------------------------------------+
Serhiy Storchaka3f819ca2018-10-31 02:26:06 +0200280| ``-t1`` | equivalent to |
281| | :class:`timedelta`\ (-*t1.days*, |
282| | -*t1.seconds*, -*t1.microseconds*), |
283| | and to *t1*\* -1. (1)(4) |
Georg Brandl116aa622007-08-15 14:28:22 +0000284+--------------------------------+-----------------------------------------------+
Georg Brandl495f7b52009-10-27 15:28:25 +0000285| ``abs(t)`` | equivalent to +\ *t* when ``t.days >= 0``, and|
Georg Brandl116aa622007-08-15 14:28:22 +0000286| | to -*t* when ``t.days < 0``. (2) |
287+--------------------------------+-----------------------------------------------+
Georg Brandlf55c3152010-07-31 11:40:07 +0000288| ``str(t)`` | Returns a string in the form |
289| | ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D |
290| | is negative for negative ``t``. (5) |
291+--------------------------------+-----------------------------------------------+
Utkarsh Upadhyaycc5a65c2017-07-25 23:51:33 +0200292| ``repr(t)`` | Returns a string representation of the |
293| | :class:`timedelta` object as a constructor |
294| | call with canonical attribute values. |
Georg Brandlf55c3152010-07-31 11:40:07 +0000295+--------------------------------+-----------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000296
Utkarsh Upadhyaycc5a65c2017-07-25 23:51:33 +0200297
Georg Brandl116aa622007-08-15 14:28:22 +0000298Notes:
299
300(1)
301 This is exact, but may overflow.
302
303(2)
304 This is exact, and cannot overflow.
305
306(3)
307 Division by 0 raises :exc:`ZeroDivisionError`.
308
309(4)
310 -*timedelta.max* is not representable as a :class:`timedelta` object.
311
Georg Brandlf55c3152010-07-31 11:40:07 +0000312(5)
313 String representations of :class:`timedelta` objects are normalized
314 similarly to their internal representation. This leads to somewhat
315 unusual results for negative timedeltas. For example:
316
317 >>> timedelta(hours=-5)
Utkarsh Upadhyay8e453182017-07-28 14:42:56 +0200318 datetime.timedelta(days=-1, seconds=68400)
Georg Brandlf55c3152010-07-31 11:40:07 +0000319 >>> print(_)
320 -1 day, 19:00:00
321
Farhaan Bukhsh5b6e49a2018-07-05 00:12:05 +0530322(6)
323 The expression ``t2 - t3`` will always be equal to the expression ``t2 + (-t3)`` except
324 when t3 is equal to ``timedelta.max``; in that case the former will produce a result
325 while the latter will overflow.
326
Georg Brandl116aa622007-08-15 14:28:22 +0000327In addition to the operations listed above :class:`timedelta` objects support
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300328certain additions and subtractions with :class:`date` and :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +0000329objects (see below).
330
Georg Brandl67b21b72010-08-17 15:07:14 +0000331.. versionchanged:: 3.2
332 Floor division and true division of a :class:`timedelta` object by another
333 :class:`timedelta` object are now supported, as are remainder operations and
334 the :func:`divmod` function. True division and multiplication of a
335 :class:`timedelta` object by a :class:`float` object are now supported.
Mark Dickinson7c186e22010-04-20 22:32:49 +0000336
337
Georg Brandl116aa622007-08-15 14:28:22 +0000338Comparisons of :class:`timedelta` objects are supported with the
339:class:`timedelta` object representing the smaller duration considered to be the
340smaller timedelta. In order to stop mixed-type comparisons from falling back to
341the default comparison by object address, when a :class:`timedelta` object is
342compared to an object of a different type, :exc:`TypeError` is raised unless the
343comparison is ``==`` or ``!=``. The latter cases return :const:`False` or
344:const:`True`, respectively.
345
Guido van Rossum2cc30da2007-11-02 23:46:40 +0000346:class:`timedelta` objects are :term:`hashable` (usable as dictionary keys), support
Georg Brandl116aa622007-08-15 14:28:22 +0000347efficient pickling, and in Boolean contexts, a :class:`timedelta` object is
348considered to be true if and only if it isn't equal to ``timedelta(0)``.
349
Antoine Pitroube6859d2009-11-25 23:02:32 +0000350Instance methods:
351
352.. method:: timedelta.total_seconds()
353
354 Return the total number of seconds contained in the duration. Equivalent to
Yasser Af40b4a02019-03-15 23:56:58 -0400355 ``td / timedelta(seconds=1)``. For interval units other than seconds, use the
356 division form directly (e.g. ``td / timedelta(microseconds=1)``).
Mark Dickinson0381e3f2010-05-08 14:35:02 +0000357
358 Note that for very large time intervals (greater than 270 years on
359 most platforms) this method will lose microsecond accuracy.
Antoine Pitroube6859d2009-11-25 23:02:32 +0000360
361 .. versionadded:: 3.2
362
363
Christian Heimesfe337bf2008-03-23 21:54:12 +0000364Example usage:
Georg Brandl48310cd2009-01-03 21:18:54 +0000365
Christian Heimes895627f2007-12-08 17:28:33 +0000366 >>> from datetime import timedelta
367 >>> year = timedelta(days=365)
Georg Brandl48310cd2009-01-03 21:18:54 +0000368 >>> another_year = timedelta(weeks=40, days=84, hours=23,
Christian Heimes895627f2007-12-08 17:28:33 +0000369 ... minutes=50, seconds=600) # adds up to 365 days
Antoine Pitroube6859d2009-11-25 23:02:32 +0000370 >>> year.total_seconds()
371 31536000.0
Christian Heimes895627f2007-12-08 17:28:33 +0000372 >>> year == another_year
373 True
374 >>> ten_years = 10 * year
375 >>> ten_years, ten_years.days // 365
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +0200376 (datetime.timedelta(days=3650), 10)
Christian Heimes895627f2007-12-08 17:28:33 +0000377 >>> nine_years = ten_years - year
378 >>> nine_years, nine_years.days // 365
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +0200379 (datetime.timedelta(days=3285), 9)
delirious-lettucec7b3f0f2017-05-18 19:01:00 -0600380 >>> three_years = nine_years // 3
Christian Heimes895627f2007-12-08 17:28:33 +0000381 >>> three_years, three_years.days // 365
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +0200382 (datetime.timedelta(days=1095), 3)
Christian Heimes895627f2007-12-08 17:28:33 +0000383 >>> abs(three_years - ten_years) == 2 * three_years + year
384 True
385
Georg Brandl116aa622007-08-15 14:28:22 +0000386
387.. _datetime-date:
388
389:class:`date` Objects
390---------------------
391
392A :class:`date` object represents a date (year, month and day) in an idealized
393calendar, the current Gregorian calendar indefinitely extended in both
394directions. January 1 of year 1 is called day number 1, January 2 of year 1 is
395called day number 2, and so on. This matches the definition of the "proleptic
396Gregorian" calendar in Dershowitz and Reingold's book Calendrical Calculations,
397where it's the base calendar for all computations. See the book for algorithms
398for converting between proleptic Gregorian ordinals and many other calendar
399systems.
400
401
402.. class:: date(year, month, day)
403
Jürgen Gmachc5218fc2019-08-24 21:48:55 +0200404 All arguments are required. Arguments must be integers in the following
Georg Brandl116aa622007-08-15 14:28:22 +0000405 ranges:
406
407 * ``MINYEAR <= year <= MAXYEAR``
408 * ``1 <= month <= 12``
409 * ``1 <= day <= number of days in the given month and year``
410
411 If an argument outside those ranges is given, :exc:`ValueError` is raised.
412
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000413
Georg Brandl116aa622007-08-15 14:28:22 +0000414Other constructors, all class methods:
415
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000416.. classmethod:: date.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000417
418 Return the current local date. This is equivalent to
419 ``date.fromtimestamp(time.time())``.
420
421
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000422.. classmethod:: date.fromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000423
424 Return the local date corresponding to the POSIX timestamp, such as is returned
Victor Stinner5d272cc2012-03-13 13:35:55 +0100425 by :func:`time.time`. This may raise :exc:`OverflowError`, if the timestamp is out
Victor Stinnerecc6e662012-03-14 00:39:29 +0100426 of the range of values supported by the platform C :c:func:`localtime` function,
427 and :exc:`OSError` on :c:func:`localtime` failure.
Georg Brandl116aa622007-08-15 14:28:22 +0000428 It's common for this to be restricted to years from 1970 through 2038. Note
429 that on non-POSIX systems that include leap seconds in their notion of a
430 timestamp, leap seconds are ignored by :meth:`fromtimestamp`.
431
Victor Stinner5d272cc2012-03-13 13:35:55 +0100432 .. versionchanged:: 3.3
433 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
434 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100435 :c:func:`localtime` function. Raise :exc:`OSError` instead of
436 :exc:`ValueError` on :c:func:`localtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100437
Georg Brandl116aa622007-08-15 14:28:22 +0000438
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000439.. classmethod:: date.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000440
441 Return the date corresponding to the proleptic Gregorian ordinal, where January
442 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 <= ordinal <=
443 date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) ==
444 d``.
445
Georg Brandl116aa622007-08-15 14:28:22 +0000446
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500447.. classmethod:: date.fromisoformat(date_string)
448
449 Return a :class:`date` corresponding to a *date_string* in the format emitted
450 by :meth:`date.isoformat`. Specifically, this function supports strings in
451 the format(s) ``YYYY-MM-DD``.
452
453 .. caution::
454
455 This does not support parsing arbitrary ISO 8601 strings - it is only intended
456 as the inverse operation of :meth:`date.isoformat`.
457
458 .. versionadded:: 3.7
459
460
Paul Ganssle88c09372019-04-29 09:22:03 -0400461.. classmethod:: date.fromisocalendar(year, week, day)
462
463 Return a :class:`date` corresponding to the ISO calendar date specified by
464 year, week and day. This is the inverse of the function :meth:`date.isocalendar`.
465
466 .. versionadded:: 3.8
467
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500468
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000469Class attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000470
471.. attribute:: date.min
472
473 The earliest representable date, ``date(MINYEAR, 1, 1)``.
474
475
476.. attribute:: date.max
477
478 The latest representable date, ``date(MAXYEAR, 12, 31)``.
479
480
481.. attribute:: date.resolution
482
483 The smallest possible difference between non-equal date objects,
484 ``timedelta(days=1)``.
485
Georg Brandl116aa622007-08-15 14:28:22 +0000486
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000487Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000488
489.. attribute:: date.year
490
491 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
492
493
494.. attribute:: date.month
495
496 Between 1 and 12 inclusive.
497
498
499.. attribute:: date.day
500
501 Between 1 and the number of days in the given month of the given year.
502
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000503
Georg Brandl116aa622007-08-15 14:28:22 +0000504Supported operations:
505
506+-------------------------------+----------------------------------------------+
507| Operation | Result |
508+===============================+==============================================+
509| ``date2 = date1 + timedelta`` | *date2* is ``timedelta.days`` days removed |
510| | from *date1*. (1) |
511+-------------------------------+----------------------------------------------+
512| ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 + |
513| | timedelta == date1``. (2) |
514+-------------------------------+----------------------------------------------+
515| ``timedelta = date1 - date2`` | \(3) |
516+-------------------------------+----------------------------------------------+
517| ``date1 < date2`` | *date1* is considered less than *date2* when |
518| | *date1* precedes *date2* in time. (4) |
519+-------------------------------+----------------------------------------------+
520
521Notes:
522
523(1)
524 *date2* is moved forward in time if ``timedelta.days > 0``, or backward if
525 ``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``.
526 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
527 :exc:`OverflowError` is raised if ``date2.year`` would be smaller than
528 :const:`MINYEAR` or larger than :const:`MAXYEAR`.
529
530(2)
Georg Brandl116aa622007-08-15 14:28:22 +0000531 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
532
533(3)
534 This is exact, and cannot overflow. timedelta.seconds and
535 timedelta.microseconds are 0, and date2 + timedelta == date1 after.
536
537(4)
538 In other words, ``date1 < date2`` if and only if ``date1.toordinal() <
Danish Prakash9c223792018-09-12 02:29:23 +0530539 date2.toordinal()``. Date comparison raises :exc:`TypeError` if
540 the other comparand isn't also a :class:`date` object. However,
541 ``NotImplemented`` is returned instead if the other comparand has a
Georg Brandl116aa622007-08-15 14:28:22 +0000542 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
543 chance at implementing mixed-type comparison. If not, when a :class:`date`
544 object is compared to an object of a different type, :exc:`TypeError` is raised
545 unless the comparison is ``==`` or ``!=``. The latter cases return
546 :const:`False` or :const:`True`, respectively.
547
548Dates can be used as dictionary keys. In Boolean contexts, all :class:`date`
549objects are considered to be true.
550
551Instance methods:
552
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400553.. method:: date.replace(year=self.year, month=self.month, day=self.day)
Georg Brandl116aa622007-08-15 14:28:22 +0000554
Senthil Kumarana6bac952011-07-04 11:28:30 -0700555 Return a date with the same value, except for those parameters given new
556 values by whichever keyword arguments are specified. For example, if ``d ==
557 date(2002, 12, 31)``, then ``d.replace(day=26) == date(2002, 12, 26)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000558
559
560.. method:: date.timetuple()
561
562 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
563 The hours, minutes and seconds are 0, and the DST flag is -1. ``d.timetuple()``
564 is equivalent to ``time.struct_time((d.year, d.month, d.day, 0, 0, 0,
Alexander Belopolsky64912482010-06-08 18:59:20 +0000565 d.weekday(), yday, -1))``, where ``yday = d.toordinal() - date(d.year, 1,
566 1).toordinal() + 1`` is the day number within the current year starting with
567 ``1`` for January 1st.
Georg Brandl116aa622007-08-15 14:28:22 +0000568
569
570.. method:: date.toordinal()
571
572 Return the proleptic Gregorian ordinal of the date, where January 1 of year 1
573 has ordinal 1. For any :class:`date` object *d*,
574 ``date.fromordinal(d.toordinal()) == d``.
575
576
577.. method:: date.weekday()
578
579 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
580 For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also
581 :meth:`isoweekday`.
582
583
584.. method:: date.isoweekday()
585
586 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
587 For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also
588 :meth:`weekday`, :meth:`isocalendar`.
589
590
591.. method:: date.isocalendar()
592
593 Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
594
595 The ISO calendar is a widely used variant of the Gregorian calendar. See
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300596 https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm for a good
Mark Dickinsonf964ac22009-11-03 16:29:10 +0000597 explanation.
Georg Brandl116aa622007-08-15 14:28:22 +0000598
599 The ISO year consists of 52 or 53 full weeks, and where a week starts on a
600 Monday and ends on a Sunday. The first week of an ISO year is the first
601 (Gregorian) calendar week of a year containing a Thursday. This is called week
602 number 1, and the ISO year of that Thursday is the same as its Gregorian year.
603
604 For example, 2004 begins on a Thursday, so the first week of ISO year 2004
605 begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004, so that
606 ``date(2003, 12, 29).isocalendar() == (2004, 1, 1)`` and ``date(2004, 1,
607 4).isocalendar() == (2004, 1, 7)``.
608
609
610.. method:: date.isoformat()
611
612 Return a string representing the date in ISO 8601 format, 'YYYY-MM-DD'. For
613 example, ``date(2002, 12, 4).isoformat() == '2002-12-04'``.
614
615
616.. method:: date.__str__()
617
618 For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``.
619
620
621.. method:: date.ctime()
622
623 Return a string representing the date, for example ``date(2002, 12,
624 4).ctime() == 'Wed Dec 4 00:00:00 2002'``. ``d.ctime()`` is equivalent to
625 ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the native C
Georg Brandl60203b42010-10-06 10:11:56 +0000626 :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +0000627 :meth:`date.ctime` does not invoke) conforms to the C standard.
628
629
630.. method:: date.strftime(format)
631
632 Return a string representing the date, controlled by an explicit format string.
David Wolever569a5fa2013-08-12 16:56:02 -0400633 Format codes referring to hours, minutes or seconds will see 0 values. For a
634 complete list of formatting directives, see
635 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000636
Georg Brandl116aa622007-08-15 14:28:22 +0000637
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300638.. method:: date.__format__(format)
639
Martin Panterd5db1472016-02-08 01:34:09 +0000640 Same as :meth:`.date.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +0000641 string for a :class:`.date` object in :ref:`formatted string
642 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -0400643 complete list of formatting directives, see
644 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300645
646
Christian Heimes895627f2007-12-08 17:28:33 +0000647Example of counting days to an event::
648
649 >>> import time
650 >>> from datetime import date
651 >>> today = date.today()
652 >>> today
653 datetime.date(2007, 12, 5)
654 >>> today == date.fromtimestamp(time.time())
655 True
656 >>> my_birthday = date(today.year, 6, 24)
657 >>> if my_birthday < today:
Georg Brandl48310cd2009-01-03 21:18:54 +0000658 ... my_birthday = my_birthday.replace(year=today.year + 1)
Christian Heimes895627f2007-12-08 17:28:33 +0000659 >>> my_birthday
660 datetime.date(2008, 6, 24)
Georg Brandl48310cd2009-01-03 21:18:54 +0000661 >>> time_to_birthday = abs(my_birthday - today)
Christian Heimes895627f2007-12-08 17:28:33 +0000662 >>> time_to_birthday.days
663 202
664
Christian Heimesfe337bf2008-03-23 21:54:12 +0000665Example of working with :class:`date`:
666
667.. doctest::
Christian Heimes895627f2007-12-08 17:28:33 +0000668
669 >>> from datetime import date
670 >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
671 >>> d
672 datetime.date(2002, 3, 11)
673 >>> t = d.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000674 >>> for i in t: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000675 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000676 2002 # year
677 3 # month
678 11 # day
679 0
680 0
681 0
682 0 # weekday (0 = Monday)
683 70 # 70th day in the year
684 -1
685 >>> ic = d.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000686 >>> for i in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000687 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000688 2002 # ISO year
689 11 # ISO week number
690 1 # ISO day number ( 1 = Monday )
691 >>> d.isoformat()
692 '2002-03-11'
693 >>> d.strftime("%d/%m/%y")
694 '11/03/02'
695 >>> d.strftime("%A %d. %B %Y")
696 'Monday 11. March 2002'
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300697 >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
698 'The day is 11, the month is March.'
Christian Heimes895627f2007-12-08 17:28:33 +0000699
Georg Brandl116aa622007-08-15 14:28:22 +0000700
701.. _datetime-datetime:
702
Benjamin Petersond87dd432015-04-25 14:15:16 -0400703:class:`.datetime` Objects
704--------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000705
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300706A :class:`.datetime` object is a single object containing all the information
707from a :class:`date` object and a :class:`.time` object. Like a :class:`date`
708object, :class:`.datetime` assumes the current Gregorian calendar extended in
709both directions; like a time object, :class:`.datetime` assumes there are exactly
Georg Brandl116aa622007-08-15 14:28:22 +00007103600\*24 seconds in every day.
711
712Constructor:
713
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400714.. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000715
716 The year, month and day arguments are required. *tzinfo* may be ``None``, or an
Jürgen Gmachc5218fc2019-08-24 21:48:55 +0200717 instance of a :class:`tzinfo` subclass. The remaining arguments must be integers
Georg Brandl5c106642007-11-29 17:41:05 +0000718 in the following ranges:
Georg Brandl116aa622007-08-15 14:28:22 +0000719
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400720 * ``MINYEAR <= year <= MAXYEAR``,
721 * ``1 <= month <= 12``,
722 * ``1 <= day <= number of days in the given month and year``,
723 * ``0 <= hour < 24``,
724 * ``0 <= minute < 60``,
725 * ``0 <= second < 60``,
726 * ``0 <= microsecond < 1000000``,
727 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +0000728
729 If an argument outside those ranges is given, :exc:`ValueError` is raised.
730
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400731 .. versionadded:: 3.6
732 Added the ``fold`` argument.
733
Georg Brandl116aa622007-08-15 14:28:22 +0000734Other constructors, all class methods:
735
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000736.. classmethod:: datetime.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000737
Martin Panter16c7cfd2016-04-01 21:48:24 +0000738 Return the current local datetime, with :attr:`.tzinfo` ``None``. This is
Georg Brandl116aa622007-08-15 14:28:22 +0000739 equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`,
740 :meth:`fromtimestamp`.
741
742
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000743.. classmethod:: datetime.now(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000744
745 Return the current local date and time. If optional argument *tz* is ``None``
746 or not specified, this is like :meth:`today`, but, if possible, supplies more
747 precision than can be gotten from going through a :func:`time.time` timestamp
748 (for example, this may be possible on platforms supplying the C
Georg Brandl60203b42010-10-06 10:11:56 +0000749 :c:func:`gettimeofday` function).
Georg Brandl116aa622007-08-15 14:28:22 +0000750
Martin Panter16c7cfd2016-04-01 21:48:24 +0000751 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
752 current date and time are converted to *tz*’s time zone. In this case the
Georg Brandl116aa622007-08-15 14:28:22 +0000753 result is equivalent to ``tz.fromutc(datetime.utcnow().replace(tzinfo=tz))``.
754 See also :meth:`today`, :meth:`utcnow`.
755
756
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000757.. classmethod:: datetime.utcnow()
Georg Brandl116aa622007-08-15 14:28:22 +0000758
Martin Panter16c7cfd2016-04-01 21:48:24 +0000759 Return the current UTC date and time, with :attr:`.tzinfo` ``None``. This is like
Georg Brandl116aa622007-08-15 14:28:22 +0000760 :meth:`now`, but returns the current UTC date and time, as a naive
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300761 :class:`.datetime` object. An aware current UTC datetime can be obtained by
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000762 calling ``datetime.now(timezone.utc)``. See also :meth:`now`.
Georg Brandl116aa622007-08-15 14:28:22 +0000763
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000764.. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000765
766 Return the local date and time corresponding to the POSIX timestamp, such as is
767 returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
768 specified, the timestamp is converted to the platform's local date and time, and
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300769 the returned :class:`.datetime` object is naive.
Georg Brandl116aa622007-08-15 14:28:22 +0000770
Martin Panter16c7cfd2016-04-01 21:48:24 +0000771 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
772 timestamp is converted to *tz*’s time zone. In this case the result is
Georg Brandl116aa622007-08-15 14:28:22 +0000773 equivalent to
774 ``tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))``.
775
Victor Stinnerecc6e662012-03-14 00:39:29 +0100776 :meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is out of
Georg Brandl60203b42010-10-06 10:11:56 +0000777 the range of values supported by the platform C :c:func:`localtime` or
Victor Stinnerecc6e662012-03-14 00:39:29 +0100778 :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or
779 :c:func:`gmtime` failure.
780 It's common for this to be restricted to years in
Georg Brandl116aa622007-08-15 14:28:22 +0000781 1970 through 2038. Note that on non-POSIX systems that include leap seconds in
782 their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`,
783 and then it's possible to have two timestamps differing by a second that yield
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300784 identical :class:`.datetime` objects. See also :meth:`utcfromtimestamp`.
Georg Brandl116aa622007-08-15 14:28:22 +0000785
Victor Stinner5d272cc2012-03-13 13:35:55 +0100786 .. versionchanged:: 3.3
787 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
788 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100789 :c:func:`localtime` or :c:func:`gmtime` functions. Raise :exc:`OSError`
790 instead of :exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime`
791 failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100792
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400793 .. versionchanged:: 3.6
794 :meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000795
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000796.. classmethod:: datetime.utcfromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000797
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300798 Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with
Martin Panter16c7cfd2016-04-01 21:48:24 +0000799 :attr:`.tzinfo` ``None``. This may raise :exc:`OverflowError`, if the timestamp is
Victor Stinnerecc6e662012-03-14 00:39:29 +0100800 out of the range of values supported by the platform C :c:func:`gmtime` function,
801 and :exc:`OSError` on :c:func:`gmtime` failure.
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500802 It's common for this to be restricted to years in 1970 through 2038.
Georg Brandl116aa622007-08-15 14:28:22 +0000803
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500804 To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`::
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400805
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500806 datetime.fromtimestamp(timestamp, timezone.utc)
807
808 On the POSIX compliant platforms, it is equivalent to the following
809 expression::
810
811 datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
812
813 except the latter formula always supports the full years range: between
814 :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400815
Victor Stinner5d272cc2012-03-13 13:35:55 +0100816 .. versionchanged:: 3.3
817 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
818 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100819 :c:func:`gmtime` function. Raise :exc:`OSError` instead of
820 :exc:`ValueError` on :c:func:`gmtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100821
Georg Brandl116aa622007-08-15 14:28:22 +0000822
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000823.. classmethod:: datetime.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000824
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300825 Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal,
Georg Brandl116aa622007-08-15 14:28:22 +0000826 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
827 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and
Martin Panter16c7cfd2016-04-01 21:48:24 +0000828 microsecond of the result are all 0, and :attr:`.tzinfo` is ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000829
830
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400831.. classmethod:: datetime.combine(date, time, tzinfo=self.tzinfo)
Georg Brandl116aa622007-08-15 14:28:22 +0000832
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300833 Return a new :class:`.datetime` object whose date components are equal to the
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400834 given :class:`date` object's, and whose time components
835 are equal to the given :class:`.time` object's. If the *tzinfo*
836 argument is provided, its value is used to set the :attr:`.tzinfo` attribute
837 of the result, otherwise the :attr:`~.time.tzinfo` attribute of the *time* argument
838 is used.
839
840 For any :class:`.datetime` object *d*,
841 ``d == datetime.combine(d.date(), d.time(), d.tzinfo)``. If date is a
Martin Panter16c7cfd2016-04-01 21:48:24 +0000842 :class:`.datetime` object, its time components and :attr:`.tzinfo` attributes
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800843 are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000844
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400845 .. versionchanged:: 3.6
846 Added the *tzinfo* argument.
847
Georg Brandl116aa622007-08-15 14:28:22 +0000848
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500849.. classmethod:: datetime.fromisoformat(date_string)
850
851 Return a :class:`datetime` corresponding to a *date_string* in one of the
852 formats emitted by :meth:`date.isoformat` and :meth:`datetime.isoformat`.
853 Specifically, this function supports strings in the format(s)
Christophe Nanteuil92878822018-10-06 00:57:02 +0200854 ``YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]``,
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500855 where ``*`` can match any single character.
856
857 .. caution::
858
859 This does not support parsing arbitrary ISO 8601 strings - it is only intended
Paul Ganssle59725f32019-08-29 10:47:48 -0400860 as the inverse operation of :meth:`datetime.isoformat`. A more full-featured
861 ISO 8601 parser, ``dateutil.parser.isoparse`` is available in the third-party package
862 `dateutil <https://dateutil.readthedocs.io/en/stable/parser.html#dateutil.parser.isoparse>`_.
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500863
864 .. versionadded:: 3.7
865
Paul Ganssle88c09372019-04-29 09:22:03 -0400866
867.. classmethod:: datetime.fromisocalendar(year, week, day)
868
869 Return a :class:`datetime` corresponding to the ISO calendar date specified
870 by year, week and day. The non-date components of the datetime are populated
871 with their normal default values. This is the inverse of the function
872 :meth:`datetime.isocalendar`.
873
874 .. versionadded:: 3.8
875
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000876.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +0000877
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300878 Return a :class:`.datetime` corresponding to *date_string*, parsed according to
Georg Brandl116aa622007-08-15 14:28:22 +0000879 *format*. This is equivalent to ``datetime(*(time.strptime(date_string,
880 format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
881 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 -0400882 time tuple. For a complete list of formatting directives, see
883 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000884
Georg Brandl116aa622007-08-15 14:28:22 +0000885
Georg Brandl116aa622007-08-15 14:28:22 +0000886
887Class attributes:
888
Georg Brandl116aa622007-08-15 14:28:22 +0000889.. attribute:: datetime.min
890
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300891 The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1,
Georg Brandl116aa622007-08-15 14:28:22 +0000892 tzinfo=None)``.
893
894
895.. attribute:: datetime.max
896
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300897 The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
Georg Brandl116aa622007-08-15 14:28:22 +0000898 59, 999999, tzinfo=None)``.
899
900
901.. attribute:: datetime.resolution
902
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300903 The smallest possible difference between non-equal :class:`.datetime` objects,
Georg Brandl116aa622007-08-15 14:28:22 +0000904 ``timedelta(microseconds=1)``.
905
Georg Brandl116aa622007-08-15 14:28:22 +0000906
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000907Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000908
909.. attribute:: datetime.year
910
911 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
912
913
914.. attribute:: datetime.month
915
916 Between 1 and 12 inclusive.
917
918
919.. attribute:: datetime.day
920
921 Between 1 and the number of days in the given month of the given year.
922
923
924.. attribute:: datetime.hour
925
926 In ``range(24)``.
927
928
929.. attribute:: datetime.minute
930
931 In ``range(60)``.
932
933
934.. attribute:: datetime.second
935
936 In ``range(60)``.
937
938
939.. attribute:: datetime.microsecond
940
941 In ``range(1000000)``.
942
943
944.. attribute:: datetime.tzinfo
945
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300946 The object passed as the *tzinfo* argument to the :class:`.datetime` constructor,
Georg Brandl116aa622007-08-15 14:28:22 +0000947 or ``None`` if none was passed.
948
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000949
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400950.. attribute:: datetime.fold
951
952 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
953 repeated interval occurs when clocks are rolled back at the end of daylight saving
954 time or when the UTC offset for the current zone is decreased for political reasons.)
955 The value 0 (1) represents the earlier (later) of the two moments with the same wall
956 time representation.
957
958 .. versionadded:: 3.6
959
Georg Brandl116aa622007-08-15 14:28:22 +0000960Supported operations:
961
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300962+---------------------------------------+--------------------------------+
963| Operation | Result |
964+=======================================+================================+
965| ``datetime2 = datetime1 + timedelta`` | \(1) |
966+---------------------------------------+--------------------------------+
967| ``datetime2 = datetime1 - timedelta`` | \(2) |
968+---------------------------------------+--------------------------------+
969| ``timedelta = datetime1 - datetime2`` | \(3) |
970+---------------------------------------+--------------------------------+
971| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
972| | :class:`.datetime`. (4) |
973+---------------------------------------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000974
975(1)
976 datetime2 is a duration of timedelta removed from datetime1, moving forward in
977 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Martin Panter16c7cfd2016-04-01 21:48:24 +0000978 result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and
Senthil Kumarana6bac952011-07-04 11:28:30 -0700979 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
980 datetime2.year would be smaller than :const:`MINYEAR` or larger than
981 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
982 input is an aware object.
Georg Brandl116aa622007-08-15 14:28:22 +0000983
984(2)
985 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Martin Panter16c7cfd2016-04-01 21:48:24 +0000986 addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input
Senthil Kumarana6bac952011-07-04 11:28:30 -0700987 datetime, and no time zone adjustments are done even if the input is aware.
Georg Brandl116aa622007-08-15 14:28:22 +0000988
989(3)
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300990 Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if
Georg Brandl116aa622007-08-15 14:28:22 +0000991 both operands are naive, or if both are aware. If one is aware and the other is
992 naive, :exc:`TypeError` is raised.
993
Martin Panter16c7cfd2016-04-01 21:48:24 +0000994 If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute,
995 the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Georg Brandl116aa622007-08-15 14:28:22 +0000996 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
997 are done in this case.
998
Martin Panter16c7cfd2016-04-01 21:48:24 +0000999 If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
Senthil Kumarana6bac952011-07-04 11:28:30 -07001000 as if *a* and *b* were first converted to naive UTC datetimes first. The
1001 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
1002 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl116aa622007-08-15 14:28:22 +00001003
1004(4)
1005 *datetime1* is considered less than *datetime2* when *datetime1* precedes
1006 *datetime2* in time.
1007
Alexander Belopolsky08313822012-06-15 20:19:47 -04001008 If one comparand is naive and the other is aware, :exc:`TypeError`
1009 is raised if an order comparison is attempted. For equality
1010 comparisons, naive instances are never equal to aware instances.
1011
Martin Panter16c7cfd2016-04-01 21:48:24 +00001012 If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
1013 common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
1014 compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001015 attributes, the comparands are first adjusted by subtracting their UTC
1016 offsets (obtained from ``self.utcoffset()``).
Georg Brandl116aa622007-08-15 14:28:22 +00001017
Alexander Belopolsky08313822012-06-15 20:19:47 -04001018 .. versionchanged:: 3.3
Martin Panter16c7cfd2016-04-01 21:48:24 +00001019 Equality comparisons between naive and aware :class:`.datetime`
Éric Araujob0f08952012-06-24 16:22:09 -04001020 instances don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001021
Georg Brandl116aa622007-08-15 14:28:22 +00001022 .. note::
1023
1024 In order to stop comparison from falling back to the default scheme of comparing
1025 object addresses, datetime comparison normally raises :exc:`TypeError` if the
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001026 other comparand isn't also a :class:`.datetime` object. However,
Georg Brandl116aa622007-08-15 14:28:22 +00001027 ``NotImplemented`` is returned instead if the other comparand has a
1028 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001029 chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001030 object is compared to an object of a different type, :exc:`TypeError` is raised
1031 unless the comparison is ``==`` or ``!=``. The latter cases return
1032 :const:`False` or :const:`True`, respectively.
1033
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001034:class:`.datetime` objects can be used as dictionary keys. In Boolean contexts,
1035all :class:`.datetime` objects are considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001036
1037Instance methods:
1038
Georg Brandl116aa622007-08-15 14:28:22 +00001039.. method:: datetime.date()
1040
1041 Return :class:`date` object with same year, month and day.
1042
1043
1044.. method:: datetime.time()
1045
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001046 Return :class:`.time` object with same hour, minute, second, microsecond and fold.
Martin Panter16c7cfd2016-04-01 21:48:24 +00001047 :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`.
Georg Brandl116aa622007-08-15 14:28:22 +00001048
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001049 .. versionchanged:: 3.6
1050 The fold value is copied to the returned :class:`.time` object.
1051
Georg Brandl116aa622007-08-15 14:28:22 +00001052
1053.. method:: datetime.timetz()
1054
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001055 Return :class:`.time` object with same hour, minute, second, microsecond, fold, and
Senthil Kumarana6bac952011-07-04 11:28:30 -07001056 tzinfo attributes. See also method :meth:`time`.
Georg Brandl116aa622007-08-15 14:28:22 +00001057
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001058 .. versionchanged:: 3.6
1059 The fold value is copied to the returned :class:`.time` object.
Georg Brandl116aa622007-08-15 14:28:22 +00001060
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001061
1062.. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \
1063 hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \
1064 tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001065
Senthil Kumarana6bac952011-07-04 11:28:30 -07001066 Return a datetime with the same attributes, except for those attributes given
1067 new values by whichever keyword arguments are specified. Note that
1068 ``tzinfo=None`` can be specified to create a naive datetime from an aware
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001069 datetime with no conversion of date and time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001070
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001071 .. versionadded:: 3.6
1072 Added the ``fold`` argument.
1073
Georg Brandl116aa622007-08-15 14:28:22 +00001074
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001075.. method:: datetime.astimezone(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001076
Martin Panter16c7cfd2016-04-01 21:48:24 +00001077 Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*,
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001078 adjusting the date and time data so the result is the same UTC time as
Senthil Kumarana6bac952011-07-04 11:28:30 -07001079 *self*, but in *tz*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001080
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001081 If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001082 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If *self*
Alexander Belopolsky877b2322018-06-10 17:02:58 -04001083 is naive, it is presumed to represent time in the system timezone.
Georg Brandl116aa622007-08-15 14:28:22 +00001084
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001085 If called without arguments (or with ``tz=None``) the system local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001086 timezone is assumed for the target timezone. The ``.tzinfo`` attribute of the converted
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001087 datetime instance will be set to an instance of :class:`timezone`
1088 with the zone name and offset obtained from the OS.
1089
Georg Brandl116aa622007-08-15 14:28:22 +00001090 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001091 adjustment of date or time data is performed. Else the result is local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001092 time in the timezone *tz*, representing the same UTC time as *self*: after
1093 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have
1094 the same date and time data as ``dt - dt.utcoffset()``.
Georg Brandl116aa622007-08-15 14:28:22 +00001095
1096 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001097 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl116aa622007-08-15 14:28:22 +00001098 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001099 conversion of date and time data, use ``dt.replace(tzinfo=None)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001100
1101 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
1102 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
1103 Ignoring error cases, :meth:`astimezone` acts like::
1104
1105 def astimezone(self, tz):
1106 if self.tzinfo is tz:
1107 return self
1108 # Convert self to UTC, and attach the new time zone object.
1109 utc = (self - self.utcoffset()).replace(tzinfo=tz)
1110 # Convert from UTC to tz's local time.
1111 return tz.fromutc(utc)
1112
Georg Brandlee0be402012-06-26 09:14:40 +02001113 .. versionchanged:: 3.3
1114 *tz* now can be omitted.
1115
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001116 .. versionchanged:: 3.6
1117 The :meth:`astimezone` method can now be called on naive instances that
1118 are presumed to represent system local time.
1119
Georg Brandl116aa622007-08-15 14:28:22 +00001120
1121.. method:: datetime.utcoffset()
1122
Martin Panter16c7cfd2016-04-01 21:48:24 +00001123 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001124 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001125 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1126
1127 .. versionchanged:: 3.7
1128 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001129
1130
1131.. method:: datetime.dst()
1132
Martin Panter16c7cfd2016-04-01 21:48:24 +00001133 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001134 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001135 ``None`` or a :class:`timedelta` object with magnitude less than one day.
1136
1137 .. versionchanged:: 3.7
1138 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001139
1140
1141.. method:: datetime.tzname()
1142
Martin Panter16c7cfd2016-04-01 21:48:24 +00001143 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001144 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
1145 ``None`` or a string object,
1146
1147
1148.. method:: datetime.timetuple()
1149
1150 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
1151 ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day,
Alexander Belopolsky64912482010-06-08 18:59:20 +00001152 d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday =
1153 d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within
1154 the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag
Martin Panter16c7cfd2016-04-01 21:48:24 +00001155 of the result is set according to the :meth:`dst` method: :attr:`.tzinfo` is
Georg Brandl682d7e02010-10-06 10:26:05 +00001156 ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``;
Alexander Belopolsky64912482010-06-08 18:59:20 +00001157 else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``;
Alexander Belopolskyda62f2f2010-06-09 17:11:01 +00001158 else :attr:`tm_isdst` is set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +00001159
1160
1161.. method:: datetime.utctimetuple()
1162
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001163 If :class:`.datetime` instance *d* is naive, this is the same as
Georg Brandl116aa622007-08-15 14:28:22 +00001164 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
1165 ``d.dst()`` returns. DST is never in effect for a UTC time.
1166
1167 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001168 ``d.utcoffset()``, and a :class:`time.struct_time` for the
1169 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
1170 that an :exc:`OverflowError` may be raised if *d*.year was
1171 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +00001172 boundary.
1173
1174
1175.. method:: datetime.toordinal()
1176
1177 Return the proleptic Gregorian ordinal of the date. The same as
1178 ``self.date().toordinal()``.
1179
Alexander Belopolskya4415142012-06-08 12:33:09 -04001180.. method:: datetime.timestamp()
1181
Martin Panter16c7cfd2016-04-01 21:48:24 +00001182 Return POSIX timestamp corresponding to the :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001183 instance. The return value is a :class:`float` similar to that
1184 returned by :func:`time.time`.
1185
Martin Panter16c7cfd2016-04-01 21:48:24 +00001186 Naive :class:`.datetime` instances are assumed to represent local
Alexander Belopolskya4415142012-06-08 12:33:09 -04001187 time and this method relies on the platform C :c:func:`mktime`
Martin Panter16c7cfd2016-04-01 21:48:24 +00001188 function to perform the conversion. Since :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001189 supports wider range of values than :c:func:`mktime` on many
1190 platforms, this method may raise :exc:`OverflowError` for times far
1191 in the past or far in the future.
1192
Martin Panter16c7cfd2016-04-01 21:48:24 +00001193 For aware :class:`.datetime` instances, the return value is computed
Alexander Belopolskya4415142012-06-08 12:33:09 -04001194 as::
1195
1196 (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
1197
1198 .. versionadded:: 3.3
1199
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001200 .. versionchanged:: 3.6
1201 The :meth:`timestamp` method uses the :attr:`.fold` attribute to
1202 disambiguate the times during a repeated interval.
1203
Alexander Belopolskya4415142012-06-08 12:33:09 -04001204 .. note::
1205
1206 There is no method to obtain the POSIX timestamp directly from a
Martin Panter16c7cfd2016-04-01 21:48:24 +00001207 naive :class:`.datetime` instance representing UTC time. If your
Alexander Belopolskya4415142012-06-08 12:33:09 -04001208 application uses this convention and your system timezone is not
1209 set to UTC, you can obtain the POSIX timestamp by supplying
1210 ``tzinfo=timezone.utc``::
1211
1212 timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
1213
1214 or by calculating the timestamp directly::
1215
1216 timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
Georg Brandl116aa622007-08-15 14:28:22 +00001217
1218.. method:: datetime.weekday()
1219
1220 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1221 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1222
1223
1224.. method:: datetime.isoweekday()
1225
1226 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1227 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1228 :meth:`isocalendar`.
1229
1230
1231.. method:: datetime.isocalendar()
1232
1233 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
1234 ``self.date().isocalendar()``.
1235
1236
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001237.. method:: datetime.isoformat(sep='T', timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001238
1239 Return a string representing the date and time in ISO 8601 format,
Christophe Nanteuil92878822018-10-06 00:57:02 +02001240 YYYY-MM-DDTHH:MM:SS.ffffff or, if :attr:`microsecond` is 0,
Georg Brandl116aa622007-08-15 14:28:22 +00001241 YYYY-MM-DDTHH:MM:SS
1242
Christophe Nanteuil92878822018-10-06 00:57:02 +02001243 If :meth:`utcoffset` does not return ``None``, a string is
1244 appended, giving the UTC offset:
1245 YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]] or, if :attr:`microsecond`
1246 is 0 YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]].
Georg Brandl116aa622007-08-15 14:28:22 +00001247
1248 The optional argument *sep* (default ``'T'``) is a one-character separator,
Christian Heimesfe337bf2008-03-23 21:54:12 +00001249 placed between the date and time portions of the result. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00001250
1251 >>> from datetime import tzinfo, timedelta, datetime
1252 >>> class TZ(tzinfo):
1253 ... def utcoffset(self, dt): return timedelta(minutes=-399)
1254 ...
1255 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1256 '2002-12-25 00:00:00-06:39'
1257
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001258 The optional argument *timespec* specifies the number of additional
1259 components of the time to include (the default is ``'auto'``).
1260 It can be one of the following:
1261
1262 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1263 same as ``'microseconds'`` otherwise.
1264 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
1265 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
1266 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
1267 in HH:MM:SS format.
1268 - ``'milliseconds'``: Include full time, but truncate fractional second
1269 part to milliseconds. HH:MM:SS.sss format.
Christophe Nanteuil92878822018-10-06 00:57:02 +02001270 - ``'microseconds'``: Include full time in HH:MM:SS.ffffff format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001271
1272 .. note::
1273
1274 Excluded time components are truncated, not rounded.
1275
1276 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1277
1278
1279 >>> from datetime import datetime
Marco Buttu909a6f62017-03-18 17:59:33 +01001280 >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001281 '2002-12-25T00:00'
1282 >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
1283 >>> dt.isoformat(timespec='microseconds')
1284 '2015-01-01T12:30:59.000000'
1285
1286 .. versionadded:: 3.6
1287 Added the *timespec* argument.
1288
Georg Brandl116aa622007-08-15 14:28:22 +00001289
1290.. method:: datetime.__str__()
1291
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001292 For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to
Georg Brandl116aa622007-08-15 14:28:22 +00001293 ``d.isoformat(' ')``.
1294
1295
1296.. method:: datetime.ctime()
1297
1298 Return a string representing the date and time, for example ``datetime(2002, 12,
1299 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:40 2002'``. ``d.ctime()`` is
1300 equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the
Georg Brandl60203b42010-10-06 10:11:56 +00001301 native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +00001302 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
1303
1304
1305.. method:: datetime.strftime(format)
1306
1307 Return a string representing the date and time, controlled by an explicit format
David Wolever569a5fa2013-08-12 16:56:02 -04001308 string. For a complete list of formatting directives, see
1309 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001310
Georg Brandl116aa622007-08-15 14:28:22 +00001311
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001312.. method:: datetime.__format__(format)
1313
Martin Panterd5db1472016-02-08 01:34:09 +00001314 Same as :meth:`.datetime.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +00001315 string for a :class:`.datetime` object in :ref:`formatted string
1316 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001317 complete list of formatting directives, see
1318 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001319
1320
Christian Heimesfe337bf2008-03-23 21:54:12 +00001321Examples of working with datetime objects:
1322
1323.. doctest::
1324
Christian Heimes895627f2007-12-08 17:28:33 +00001325 >>> from datetime import datetime, date, time
1326 >>> # Using datetime.combine()
1327 >>> d = date(2005, 7, 14)
1328 >>> t = time(12, 30)
1329 >>> datetime.combine(d, t)
1330 datetime.datetime(2005, 7, 14, 12, 30)
1331 >>> # Using datetime.now() or datetime.utcnow()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001332 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001333 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Christian Heimesfe337bf2008-03-23 21:54:12 +00001334 >>> datetime.utcnow() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001335 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
1336 >>> # Using datetime.strptime()
1337 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1338 >>> dt
1339 datetime.datetime(2006, 11, 21, 16, 30)
1340 >>> # Using datetime.timetuple() to get tuple of all attributes
1341 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001342 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001343 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001344 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001345 2006 # year
1346 11 # month
1347 21 # day
1348 16 # hour
1349 30 # minute
1350 0 # second
1351 1 # weekday (0 = Monday)
1352 325 # number of days since 1st January
1353 -1 # dst - method tzinfo.dst() returned None
1354 >>> # Date in ISO format
1355 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001356 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001357 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001358 ...
1359 2006 # ISO year
1360 47 # ISO week
1361 2 # ISO weekday
1362 >>> # Formatting datetime
1363 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1364 'Tuesday, 21. November 2006 04:30PM'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001365 >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
1366 'The day is 21, the month is November, the time is 04:30PM.'
Christian Heimes895627f2007-12-08 17:28:33 +00001367
Christian Heimesfe337bf2008-03-23 21:54:12 +00001368Using datetime with tzinfo:
Christian Heimes895627f2007-12-08 17:28:33 +00001369
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001370 >>> from datetime import timedelta, datetime, tzinfo, timezone
1371 >>> class KabulTz(tzinfo):
1372 ... # Kabul used +4 until 1945, when they moved to +4:30
1373 ... UTC_MOVE_DATE = datetime(1944, 12, 31, 20, tzinfo=timezone.utc)
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001374 ... def utcoffset(self, dt):
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001375 ... if dt.year < 1945:
1376 ... return timedelta(hours=4)
1377 ... elif (1945, 1, 1, 0, 0) <= dt.timetuple()[:5] < (1945, 1, 1, 0, 30):
1378 ... # If dt falls in the imaginary range, use fold to decide how
1379 ... # to resolve. See PEP495
1380 ... return timedelta(hours=4, minutes=(30 if dt.fold else 0))
Christian Heimes895627f2007-12-08 17:28:33 +00001381 ... else:
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001382 ... return timedelta(hours=4, minutes=30)
Georg Brandl48310cd2009-01-03 21:18:54 +00001383 ...
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001384 ... def fromutc(self, dt):
1385 ... # A custom implementation is required for fromutc as
1386 ... # the input to this function is a datetime with utc values
1387 ... # but with a tzinfo set to self
1388 ... # See datetime.astimezone or fromtimestamp
1389 ...
1390 ... # Follow same validations as in datetime.tzinfo
1391 ... if not isinstance(dt, datetime):
1392 ... raise TypeError("fromutc() requires a datetime argument")
1393 ... if dt.tzinfo is not self:
1394 ... raise ValueError("dt.tzinfo is not self")
1395 ...
1396 ... if dt.replace(tzinfo=timezone.utc) >= self.UTC_MOVE_DATE:
1397 ... return dt + timedelta(hours=4, minutes=30)
Christian Heimes895627f2007-12-08 17:28:33 +00001398 ... else:
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001399 ... return dt + timedelta(hours=4)
Georg Brandl48310cd2009-01-03 21:18:54 +00001400 ...
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001401 ... def dst(self, dt):
1402 ... return timedelta(0)
1403 ...
1404 ... def tzname(self, dt):
1405 ... if dt >= self.UTC_MOVE_DATE:
1406 ... return "+04:30"
1407 ... else:
1408 ... return "+04"
1409 ...
1410 ... def __repr__(self):
1411 ... return f"{self.__class__.__name__}()"
1412 ...
1413 >>> tz1 = KabulTz()
1414 >>> # Datetime before the change
1415 >>> dt1 = datetime(1900, 11, 21, 16, 30, tzinfo=tz1)
1416 >>> print(dt1.utcoffset())
1417 4:00:00
1418 >>> # Datetime after the change
1419 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=tz1)
1420 >>> print(dt2.utcoffset())
1421 4:30:00
Christian Heimes895627f2007-12-08 17:28:33 +00001422 >>> # Convert datetime to another time zone
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001423 >>> dt3 = dt2.astimezone(timezone.utc)
1424 >>> dt3
1425 datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc)
1426 >>> dt2
1427 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=KabulTz())
Christian Heimes895627f2007-12-08 17:28:33 +00001428 >>> dt2.utctimetuple() == dt3.utctimetuple()
1429 True
Georg Brandl48310cd2009-01-03 21:18:54 +00001430
Christian Heimes895627f2007-12-08 17:28:33 +00001431
Georg Brandl116aa622007-08-15 14:28:22 +00001432
1433.. _datetime-time:
1434
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001435:class:`.time` Objects
1436----------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001437
1438A time object represents a (local) time of day, independent of any particular
1439day, and subject to adjustment via a :class:`tzinfo` object.
1440
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001441.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001442
1443 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
Jürgen Gmachc5218fc2019-08-24 21:48:55 +02001444 :class:`tzinfo` subclass. The remaining arguments must be integers in the
Georg Brandl116aa622007-08-15 14:28:22 +00001445 following ranges:
1446
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001447 * ``0 <= hour < 24``,
1448 * ``0 <= minute < 60``,
1449 * ``0 <= second < 60``,
1450 * ``0 <= microsecond < 1000000``,
1451 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +00001452
1453 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
1454 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1455
1456Class attributes:
1457
1458
1459.. attribute:: time.min
1460
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001461 The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001462
1463
1464.. attribute:: time.max
1465
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001466 The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001467
1468
1469.. attribute:: time.resolution
1470
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001471 The smallest possible difference between non-equal :class:`.time` objects,
1472 ``timedelta(microseconds=1)``, although note that arithmetic on
1473 :class:`.time` objects is not supported.
Georg Brandl116aa622007-08-15 14:28:22 +00001474
Georg Brandl116aa622007-08-15 14:28:22 +00001475
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001476Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001477
1478.. attribute:: time.hour
1479
1480 In ``range(24)``.
1481
1482
1483.. attribute:: time.minute
1484
1485 In ``range(60)``.
1486
1487
1488.. attribute:: time.second
1489
1490 In ``range(60)``.
1491
1492
1493.. attribute:: time.microsecond
1494
1495 In ``range(1000000)``.
1496
1497
1498.. attribute:: time.tzinfo
1499
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001500 The object passed as the tzinfo argument to the :class:`.time` constructor, or
Georg Brandl116aa622007-08-15 14:28:22 +00001501 ``None`` if none was passed.
1502
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001503
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001504.. attribute:: time.fold
1505
1506 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
1507 repeated interval occurs when clocks are rolled back at the end of daylight saving
1508 time or when the UTC offset for the current zone is decreased for political reasons.)
1509 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1510 time representation.
1511
1512 .. versionadded:: 3.6
1513
1514
Georg Brandl116aa622007-08-15 14:28:22 +00001515Supported operations:
1516
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001517* comparison of :class:`.time` to :class:`.time`, where *a* is considered less
Georg Brandl116aa622007-08-15 14:28:22 +00001518 than *b* when *a* precedes *b* in time. If one comparand is naive and the other
Alexander Belopolsky08313822012-06-15 20:19:47 -04001519 is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality
1520 comparisons, naive instances are never equal to aware instances.
1521
1522 If both comparands are aware, and have
Martin Panter16c7cfd2016-04-01 21:48:24 +00001523 the same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is
Senthil Kumarana6bac952011-07-04 11:28:30 -07001524 ignored and the base times are compared. If both comparands are aware and
Martin Panter16c7cfd2016-04-01 21:48:24 +00001525 have different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by
Senthil Kumarana6bac952011-07-04 11:28:30 -07001526 subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1527 to stop mixed-type comparisons from falling back to the default comparison by
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001528 object address, when a :class:`.time` object is compared to an object of a
Senthil Kumaran3aac1792011-07-04 11:43:51 -07001529 different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
Senthil Kumarana6bac952011-07-04 11:28:30 -07001530 ``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl116aa622007-08-15 14:28:22 +00001531
Alexander Belopolsky08313822012-06-15 20:19:47 -04001532 .. versionchanged:: 3.3
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001533 Equality comparisons between naive and aware :class:`~datetime.time` instances
Éric Araujob0f08952012-06-24 16:22:09 -04001534 don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001535
Georg Brandl116aa622007-08-15 14:28:22 +00001536* hash, use as dict key
1537
1538* efficient pickling
1539
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001540In boolean contexts, a :class:`.time` object is always considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001541
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001542.. versionchanged:: 3.5
1543 Before Python 3.5, a :class:`.time` object was considered to be false if it
1544 represented midnight in UTC. This behavior was considered obscure and
1545 error-prone and has been removed in Python 3.5. See :issue:`13936` for full
1546 details.
Georg Brandl116aa622007-08-15 14:28:22 +00001547
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001548
1549Other constructor:
1550
1551.. classmethod:: time.fromisoformat(time_string)
1552
1553 Return a :class:`time` corresponding to a *time_string* in one of the
1554 formats emitted by :meth:`time.isoformat`. Specifically, this function supports
Christophe Nanteuil92878822018-10-06 00:57:02 +02001555 strings in the format(s) ``HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]``.
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001556
1557 .. caution::
1558
1559 This does not support parsing arbitrary ISO 8601 strings - it is only intended
1560 as the inverse operation of :meth:`time.isoformat`.
1561
1562 .. versionadded:: 3.7
1563
1564
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001565Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001566
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001567.. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \
1568 microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001569
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001570 Return a :class:`.time` with the same value, except for those attributes given
Senthil Kumarana6bac952011-07-04 11:28:30 -07001571 new values by whichever keyword arguments are specified. Note that
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001572 ``tzinfo=None`` can be specified to create a naive :class:`.time` from an
1573 aware :class:`.time`, without conversion of the time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001574
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001575 .. versionadded:: 3.6
1576 Added the ``fold`` argument.
1577
Georg Brandl116aa622007-08-15 14:28:22 +00001578
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001579.. method:: time.isoformat(timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001580
Christophe Nanteuil92878822018-10-06 00:57:02 +02001581 Return a string representing the time in ISO 8601 format, HH:MM:SS.ffffff or, if
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001582 :attr:`microsecond` is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a
Christophe Nanteuil92878822018-10-06 00:57:02 +02001583 string is appended, giving the UTC offset: HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]
1584 or, if self.microsecond is 0, HH:MM:SS+HH:MM[:SS[.ffffff]].
Georg Brandl116aa622007-08-15 14:28:22 +00001585
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001586 The optional argument *timespec* specifies the number of additional
1587 components of the time to include (the default is ``'auto'``).
1588 It can be one of the following:
1589
1590 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1591 same as ``'microseconds'`` otherwise.
1592 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
1593 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
1594 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
1595 in HH:MM:SS format.
1596 - ``'milliseconds'``: Include full time, but truncate fractional second
1597 part to milliseconds. HH:MM:SS.sss format.
Christophe Nanteuil92878822018-10-06 00:57:02 +02001598 - ``'microseconds'``: Include full time in HH:MM:SS.ffffff format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001599
1600 .. note::
1601
1602 Excluded time components are truncated, not rounded.
1603
1604 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1605
1606
1607 >>> from datetime import time
Berker Peksag94f89a62016-06-04 21:36:53 -07001608 >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001609 '12:34'
Berker Peksag94f89a62016-06-04 21:36:53 -07001610 >>> dt = time(hour=12, minute=34, second=56, microsecond=0)
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001611 >>> dt.isoformat(timespec='microseconds')
1612 '12:34:56.000000'
1613 >>> dt.isoformat(timespec='auto')
1614 '12:34:56'
1615
1616 .. versionadded:: 3.6
1617 Added the *timespec* argument.
1618
Georg Brandl116aa622007-08-15 14:28:22 +00001619
1620.. method:: time.__str__()
1621
1622 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1623
1624
1625.. method:: time.strftime(format)
1626
David Wolever569a5fa2013-08-12 16:56:02 -04001627 Return a string representing the time, controlled by an explicit format
1628 string. For a complete list of formatting directives, see
David Woleverbbf4a462013-08-12 17:15:36 -04001629 :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001630
1631
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001632.. method:: time.__format__(format)
1633
Martin Panterd5db1472016-02-08 01:34:09 +00001634 Same as :meth:`.time.strftime`. This makes it possible to specify a format string
Martin Panterbc1ee462016-02-13 00:41:37 +00001635 for a :class:`.time` object in :ref:`formatted string
1636 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001637 complete list of formatting directives, see
1638 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001639
1640
Georg Brandl116aa622007-08-15 14:28:22 +00001641.. method:: time.utcoffset()
1642
Martin Panter16c7cfd2016-04-01 21:48:24 +00001643 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001644 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001645 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1646
1647 .. versionchanged:: 3.7
1648 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001649
1650
1651.. method:: time.dst()
1652
Martin Panter16c7cfd2016-04-01 21:48:24 +00001653 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001654 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001655 ``None``, or a :class:`timedelta` object with magnitude less than one day.
Georg Brandl116aa622007-08-15 14:28:22 +00001656
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001657 .. versionchanged:: 3.7
1658 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001659
1660.. method:: time.tzname()
1661
Martin Panter16c7cfd2016-04-01 21:48:24 +00001662 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001663 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1664 return ``None`` or a string object.
1665
Christian Heimesfe337bf2008-03-23 21:54:12 +00001666Example:
Georg Brandl48310cd2009-01-03 21:18:54 +00001667
Xiang Zhang6721c7c2016-12-27 12:23:59 +08001668 >>> from datetime import time, tzinfo, timedelta
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001669 >>> class TZ1(tzinfo):
Christian Heimes895627f2007-12-08 17:28:33 +00001670 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001671 ... return timedelta(hours=1)
1672 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001673 ... return timedelta(0)
1674 ... def tzname(self,dt):
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001675 ... return "+01:00"
1676 ... def __repr__(self):
1677 ... return f"{self.__class__.__name__}()"
Christian Heimes895627f2007-12-08 17:28:33 +00001678 ...
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001679 >>> t = time(12, 10, 30, tzinfo=TZ1())
1680 >>> t
1681 datetime.time(12, 10, 30, tzinfo=TZ1())
Christian Heimes895627f2007-12-08 17:28:33 +00001682 >>> t.isoformat()
1683 '12:10:30+01:00'
1684 >>> t.dst()
1685 datetime.timedelta(0)
1686 >>> t.tzname()
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001687 '+01:00'
Christian Heimes895627f2007-12-08 17:28:33 +00001688 >>> t.strftime("%H:%M:%S %Z")
Mario Corcherof0b5ae42019-06-04 16:18:11 +01001689 '12:10:30 +01:00'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001690 >>> 'The {} is {:%H:%M}.'.format("time", t)
1691 'The time is 12:10.'
Christian Heimes895627f2007-12-08 17:28:33 +00001692
Georg Brandl116aa622007-08-15 14:28:22 +00001693
1694.. _datetime-tzinfo:
1695
1696:class:`tzinfo` Objects
1697-----------------------
1698
Martin Panter16c7cfd2016-04-01 21:48:24 +00001699.. class:: tzinfo()
Georg Brandl116aa622007-08-15 14:28:22 +00001700
Martin Panter16c7cfd2016-04-01 21:48:24 +00001701 This is an abstract base class, meaning that this class should not be
1702 instantiated directly. You need to derive a concrete subclass, and (at least)
1703 supply implementations of the standard :class:`tzinfo` methods needed by the
1704 :class:`.datetime` methods you use. The :mod:`datetime` module supplies
1705 a simple concrete subclass of :class:`tzinfo`, :class:`timezone`, which can represent
1706 timezones with fixed offset from UTC such as UTC itself or North American EST and
1707 EDT.
Georg Brandl116aa622007-08-15 14:28:22 +00001708
Martin Panter16c7cfd2016-04-01 21:48:24 +00001709 An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1710 constructors for :class:`.datetime` and :class:`.time` objects. The latter objects
1711 view their attributes as being in local time, and the :class:`tzinfo` object
1712 supports methods revealing offset of local time from UTC, the name of the time
1713 zone, and DST offset, all relative to a date or time object passed to them.
Georg Brandl116aa622007-08-15 14:28:22 +00001714
Martin Panter16c7cfd2016-04-01 21:48:24 +00001715 Special requirement for pickling: A :class:`tzinfo` subclass must have an
1716 :meth:`__init__` method that can be called with no arguments, else it can be
1717 pickled but possibly not unpickled again. This is a technical requirement that
1718 may be relaxed in the future.
1719
1720 A concrete subclass of :class:`tzinfo` may need to implement the following
1721 methods. Exactly which methods are needed depends on the uses made of aware
1722 :mod:`datetime` objects. If in doubt, simply implement all of them.
Georg Brandl116aa622007-08-15 14:28:22 +00001723
1724
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001725.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001726
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001727 Return offset of local time from UTC, as a :class:`timedelta` object that is
1728 positive east of UTC. If local time is
Georg Brandl116aa622007-08-15 14:28:22 +00001729 west of UTC, this should be negative. Note that this is intended to be the
1730 total offset from UTC; for example, if a :class:`tzinfo` object represents both
1731 time zone and DST adjustments, :meth:`utcoffset` should return their sum. If
1732 the UTC offset isn't known, return ``None``. Else the value returned must be a
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001733 :class:`timedelta` object strictly between ``-timedelta(hours=24)`` and
1734 ``timedelta(hours=24)`` (the magnitude of the offset must be less
Georg Brandl116aa622007-08-15 14:28:22 +00001735 than one day). Most implementations of :meth:`utcoffset` will probably look
1736 like one of these two::
1737
1738 return CONSTANT # fixed-offset class
1739 return CONSTANT + self.dst(dt) # daylight-aware class
1740
1741 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1742 ``None`` either.
1743
1744 The default implementation of :meth:`utcoffset` raises
1745 :exc:`NotImplementedError`.
1746
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001747 .. versionchanged:: 3.7
1748 The UTC offset is not restricted to a whole number of minutes.
1749
Georg Brandl116aa622007-08-15 14:28:22 +00001750
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001751.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001752
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001753 Return the daylight saving time (DST) adjustment, as a :class:`timedelta`
1754 object or
Georg Brandl116aa622007-08-15 14:28:22 +00001755 ``None`` if DST information isn't known. Return ``timedelta(0)`` if DST is not
1756 in effect. If DST is in effect, return the offset as a :class:`timedelta` object
1757 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1758 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1759 no need to consult :meth:`dst` unless you're interested in obtaining DST info
Martin Panter16c7cfd2016-04-01 21:48:24 +00001760 separately. For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001761 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1762 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1763 DST changes when crossing time zones.
Georg Brandl116aa622007-08-15 14:28:22 +00001764
1765 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1766 daylight times must be consistent in this sense:
1767
1768 ``tz.utcoffset(dt) - tz.dst(dt)``
1769
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001770 must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo ==
Georg Brandl116aa622007-08-15 14:28:22 +00001771 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1772 zone's "standard offset", which should not depend on the date or the time, but
1773 only on geographic location. The implementation of :meth:`datetime.astimezone`
1774 relies on this, but cannot detect violations; it's the programmer's
1775 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
1776 this, it may be able to override the default implementation of
1777 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
1778
1779 Most implementations of :meth:`dst` will probably look like one of these two::
1780
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001781 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001782 # a fixed-offset class: doesn't account for DST
1783 return timedelta(0)
1784
1785 or ::
1786
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001787 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001788 # Code to set dston and dstoff to the time zone's DST
1789 # transition times based on the input dt.year, and expressed
1790 # in standard local time. Then
1791
1792 if dston <= dt.replace(tzinfo=None) < dstoff:
1793 return timedelta(hours=1)
1794 else:
1795 return timedelta(0)
1796
1797 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
1798
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001799 .. versionchanged:: 3.7
1800 The DST offset is not restricted to a whole number of minutes.
1801
Georg Brandl116aa622007-08-15 14:28:22 +00001802
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001803.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001804
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001805 Return the time zone name corresponding to the :class:`.datetime` object *dt*, as
Georg Brandl116aa622007-08-15 14:28:22 +00001806 a string. Nothing about string names is defined by the :mod:`datetime` module,
1807 and there's no requirement that it mean anything in particular. For example,
1808 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
1809 valid replies. Return ``None`` if a string name isn't known. Note that this is
1810 a method rather than a fixed string primarily because some :class:`tzinfo`
1811 subclasses will wish to return different names depending on the specific value
1812 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
1813 daylight time.
1814
1815 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
1816
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001817
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001818These methods are called by a :class:`.datetime` or :class:`.time` object, in
1819response to their methods of the same names. A :class:`.datetime` object passes
1820itself as the argument, and a :class:`.time` object passes ``None`` as the
Georg Brandl116aa622007-08-15 14:28:22 +00001821argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001822accept a *dt* argument of ``None``, or of class :class:`.datetime`.
Georg Brandl116aa622007-08-15 14:28:22 +00001823
1824When ``None`` is passed, it's up to the class designer to decide the best
1825response. For example, returning ``None`` is appropriate if the class wishes to
1826say that time objects don't participate in the :class:`tzinfo` protocols. It
1827may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
1828there is no other convention for discovering the standard offset.
1829
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001830When a :class:`.datetime` object is passed in response to a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001831method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
1832rely on this, unless user code calls :class:`tzinfo` methods directly. The
1833intent is that the :class:`tzinfo` methods interpret *dt* as being in local
1834time, and not need worry about objects in other timezones.
1835
1836There is one more :class:`tzinfo` method that a subclass may wish to override:
1837
1838
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001839.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001840
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001841 This is called from the default :class:`datetime.astimezone()`
1842 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
1843 date and time data are to be viewed as expressing a UTC time. The purpose
1844 of :meth:`fromutc` is to adjust the date and time data, returning an
Senthil Kumarana6bac952011-07-04 11:28:30 -07001845 equivalent datetime in *self*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001846
1847 Most :class:`tzinfo` subclasses should be able to inherit the default
1848 :meth:`fromutc` implementation without problems. It's strong enough to handle
1849 fixed-offset time zones, and time zones accounting for both standard and
1850 daylight time, and the latter even if the DST transition times differ in
1851 different years. An example of a time zone the default :meth:`fromutc`
1852 implementation may not handle correctly in all cases is one where the standard
1853 offset (from UTC) depends on the specific date and time passed, which can happen
1854 for political reasons. The default implementations of :meth:`astimezone` and
1855 :meth:`fromutc` may not produce the result you want if the result is one of the
1856 hours straddling the moment the standard offset changes.
1857
1858 Skipping code for error cases, the default :meth:`fromutc` implementation acts
1859 like::
1860
1861 def fromutc(self, dt):
1862 # raise ValueError error if dt.tzinfo is not self
1863 dtoff = dt.utcoffset()
1864 dtdst = dt.dst()
1865 # raise ValueError if dtoff is None or dtdst is None
1866 delta = dtoff - dtdst # this is self's standard offset
1867 if delta:
1868 dt += delta # convert to standard local time
1869 dtdst = dt.dst()
1870 # raise ValueError if dtdst is None
1871 if dtdst:
1872 return dt + dtdst
1873 else:
1874 return dt
1875
Marco Buttu909a6f62017-03-18 17:59:33 +01001876In the following :download:`tzinfo_examples.py
1877<../includes/tzinfo_examples.py>` file there are some examples of
1878:class:`tzinfo` classes:
Georg Brandl116aa622007-08-15 14:28:22 +00001879
Marco Buttu909a6f62017-03-18 17:59:33 +01001880.. literalinclude:: ../includes/tzinfo_examples.py
Georg Brandl116aa622007-08-15 14:28:22 +00001881
Georg Brandl116aa622007-08-15 14:28:22 +00001882Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
1883subclass accounting for both standard and daylight time, at the DST transition
1884points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00001885minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
18861:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00001887
1888 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
1889 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
1890 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
1891
1892 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
1893
1894 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
1895
1896When DST starts (the "start" line), the local wall clock leaps from 1:59 to
18973:00. A wall time of the form 2:MM doesn't really make sense on that day, so
1898``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001899begins. For example, at the Spring forward transition of 2016, we get
1900
Marco Buttu909a6f62017-03-18 17:59:33 +01001901 >>> from datetime import datetime, timezone
1902 >>> from tzinfo_examples import HOUR, Eastern
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001903 >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
1904 >>> for i in range(4):
1905 ... u = u0 + i*HOUR
1906 ... t = u.astimezone(Eastern)
1907 ... print(u.time(), 'UTC =', t.time(), t.tzname())
1908 ...
1909 05:00:00 UTC = 00:00:00 EST
1910 06:00:00 UTC = 01:00:00 EST
1911 07:00:00 UTC = 03:00:00 EDT
1912 08:00:00 UTC = 04:00:00 EDT
1913
Georg Brandl116aa622007-08-15 14:28:22 +00001914
1915When DST ends (the "end" line), there's a potentially worse problem: there's an
1916hour that can't be spelled unambiguously in local wall time: the last hour of
1917daylight time. In Eastern, that's times of the form 5:MM UTC on the day
1918daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
1919to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
1920:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
1921hours into the same local hour then. In the Eastern example, UTC times of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001922form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times
1923have the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1.
1924For example, at the Fall back transition of 2016, we get
Georg Brandl116aa622007-08-15 14:28:22 +00001925
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001926 >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
1927 >>> for i in range(4):
1928 ... u = u0 + i*HOUR
1929 ... t = u.astimezone(Eastern)
1930 ... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
1931 ...
1932 04:00:00 UTC = 00:00:00 EDT 0
1933 05:00:00 UTC = 01:00:00 EDT 0
1934 06:00:00 UTC = 01:00:00 EST 1
1935 07:00:00 UTC = 02:00:00 EST 0
1936
1937Note that the :class:`datetime` instances that differ only by the value of the
1938:attr:`~datetime.fold` attribute are considered equal in comparisons.
1939
1940Applications that can't bear wall-time ambiguities should explicitly check the
Raymond Hettinger15f44ab2016-08-30 10:47:49 -07001941value of the :attr:`~datetime.fold` attribute or avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001942:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
1943or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
1944only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
1945
Sandro Tosid11d0d62012-04-24 19:46:06 +02001946.. seealso::
1947
wim glenn53f2af12017-06-06 12:54:41 -05001948 `dateutil.tz <https://dateutil.readthedocs.io/en/stable/tz.html>`_
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001949 The standard library has :class:`timezone` class for handling arbitrary
1950 fixed offsets from UTC and :attr:`timezone.utc` as UTC timezone instance.
Sandro Tosid11d0d62012-04-24 19:46:06 +02001951
wim glenn53f2af12017-06-06 12:54:41 -05001952 *dateutil.tz* library brings the *IANA timezone database* (also known as the
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001953 Olson database) to Python and its usage is recommended.
Sandro Tosi100b8892012-04-28 11:19:37 +02001954
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03001955 `IANA timezone database <https://www.iana.org/time-zones>`_
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001956 The Time Zone Database (often called tz, tzdata or zoneinfo) contains code and
Sandro Tosi100b8892012-04-28 11:19:37 +02001957 data that represent the history of local time for many representative
1958 locations around the globe. It is updated periodically to reflect changes
1959 made by political bodies to time zone boundaries, UTC offsets, and
1960 daylight-saving rules.
Sandro Tosid11d0d62012-04-24 19:46:06 +02001961
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001962
1963.. _datetime-timezone:
1964
1965:class:`timezone` Objects
1966--------------------------
1967
Alexander Belopolsky6d3c9a62011-05-04 10:28:26 -04001968The :class:`timezone` class is a subclass of :class:`tzinfo`, each
1969instance of which represents a timezone defined by a fixed offset from
1970UTC. Note that objects of this class cannot be used to represent
1971timezone information in the locations where different offsets are used
1972in different days of the year or where historical changes have been
1973made to civil time.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001974
1975
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001976.. class:: timezone(offset, name=None)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001977
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001978 The *offset* argument must be specified as a :class:`timedelta`
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001979 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001980 be strictly between ``-timedelta(hours=24)`` and
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001981 ``timedelta(hours=24)``, otherwise :exc:`ValueError` is raised.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001982
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001983 The *name* argument is optional. If specified it must be a string that
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001984 will be used as the value returned by the :meth:`datetime.tzname` method.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001985
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001986 .. versionadded:: 3.2
1987
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001988 .. versionchanged:: 3.7
1989 The UTC offset is not restricted to a whole number of minutes.
1990
1991
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001992.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001993
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001994 Return the fixed value specified when the :class:`timezone` instance is
1995 constructed. The *dt* argument is ignored. The return value is a
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001996 :class:`timedelta` instance equal to the difference between the
1997 local time and UTC.
1998
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001999 .. versionchanged:: 3.7
2000 The UTC offset is not restricted to a whole number of minutes.
2001
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002002.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002003
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002004 Return the fixed value specified when the :class:`timezone` instance
2005 is constructed. If *name* is not provided in the constructor, the
2006 name returned by ``tzname(dt)`` is generated from the value of the
2007 ``offset`` as follows. If *offset* is ``timedelta(0)``, the name
2008 is "UTC", otherwise it is a string 'UTC±HH:MM', where ± is the sign
2009 of ``offset``, HH and MM are two digits of ``offset.hours`` and
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002010 ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002011
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002012 .. versionchanged:: 3.6
Berker Peksagdf326eb2015-09-09 18:32:50 +03002013 Name generated from ``offset=timedelta(0)`` is now plain 'UTC', not
2014 'UTC+00:00'.
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002015
2016
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002017.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002018
2019 Always returns ``None``.
2020
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002021.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002022
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002023 Return ``dt + offset``. The *dt* argument must be an aware
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002024 :class:`.datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002025
2026Class attributes:
2027
2028.. attribute:: timezone.utc
2029
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002030 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00002031
Georg Brandl116aa622007-08-15 14:28:22 +00002032
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002033.. index::
Serhiy Storchaka913876d2018-10-28 13:41:26 +02002034 single: % (percent); datetime format
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002035
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002036.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00002037
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002038:meth:`strftime` and :meth:`strptime` Behavior
2039----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00002040
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002041:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a
Georg Brandl116aa622007-08-15 14:28:22 +00002042``strftime(format)`` method, to create a string representing the time under the
2043control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
2044acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
2045although not all objects support a :meth:`timetuple` method.
2046
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002047Conversely, the :meth:`datetime.strptime` class method creates a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002048:class:`.datetime` object from a string representing a date and time and a
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002049corresponding format string. ``datetime.strptime(date_string, format)`` is
Gus Goulartc0799ec2018-10-29 08:49:52 -03002050equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``, except
2051when the format includes sub-second components or timezone offset information,
2052which are supported in ``datetime.strptime`` but are discarded by ``time.strptime``.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002053
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002054For :class:`.time` objects, the format codes for year, month, and day should not
Georg Brandl116aa622007-08-15 14:28:22 +00002055be used, as time objects have no such values. If they're used anyway, ``1900``
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002056is substituted for the year, and ``1`` for the month and day.
Georg Brandl116aa622007-08-15 14:28:22 +00002057
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002058For :class:`date` objects, the format codes for hours, minutes, seconds, and
2059microseconds should not be used, as :class:`date` objects have no such
2060values. If they're used anyway, ``0`` is substituted for them.
2061
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302062For the :meth:`datetime.strptime` class method, the default value is ``1900-01-01T00:00:00.000``:
2063any components not specified in the format string will be pulled from the default value. [#]_
2064
Georg Brandl116aa622007-08-15 14:28:22 +00002065The full set of format codes supported varies across platforms, because Python
2066calls the platform C library's :func:`strftime` function, and platform
Georg Brandlb7117af2013-10-13 18:28:25 +02002067variations are common. To see the full set of format codes supported on your
2068platform, consult the :manpage:`strftime(3)` documentation.
Christian Heimes895627f2007-12-08 17:28:33 +00002069
Alexey Izbyshev1cffd0e2019-01-13 00:21:54 +07002070For the same reason, handling of format strings containing Unicode code points
2071that can't be represented in the charset of the current locale is also
2072platform-dependent. On some platforms such code points are preserved intact in
2073the output, while on others ``strftime`` may raise :exc:`UnicodeError` or return
2074an empty string instead.
2075
Christian Heimes895627f2007-12-08 17:28:33 +00002076The following is a list of all the format codes that the C standard (1989
2077version) requires, and these work on all platforms with a standard C
2078implementation. Note that the 1999 version of the C standard added additional
2079format codes.
Georg Brandl116aa622007-08-15 14:28:22 +00002080
David Wolever569a5fa2013-08-12 16:56:02 -04002081+-----------+--------------------------------+------------------------+-------+
2082| Directive | Meaning | Example | Notes |
2083+===========+================================+========================+=======+
2084| ``%a`` | Weekday as locale's || Sun, Mon, ..., Sat | \(1) |
2085| | abbreviated name. | (en_US); | |
2086| | || So, Mo, ..., Sa | |
2087| | | (de_DE) | |
2088+-----------+--------------------------------+------------------------+-------+
2089| ``%A`` | Weekday as locale's full name. || Sunday, Monday, ..., | \(1) |
2090| | | Saturday (en_US); | |
2091| | || Sonntag, Montag, ..., | |
2092| | | Samstag (de_DE) | |
2093+-----------+--------------------------------+------------------------+-------+
2094| ``%w`` | Weekday as a decimal number, | 0, 1, ..., 6 | |
2095| | where 0 is Sunday and 6 is | | |
2096| | Saturday. | | |
2097+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002098| ``%d`` | Day of the month as a | 01, 02, ..., 31 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002099| | zero-padded decimal number. | | |
2100+-----------+--------------------------------+------------------------+-------+
2101| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
2102| | name. | (en_US); | |
2103| | || Jan, Feb, ..., Dez | |
2104| | | (de_DE) | |
2105+-----------+--------------------------------+------------------------+-------+
2106| ``%B`` | Month as locale's full name. || January, February, | \(1) |
2107| | | ..., December (en_US);| |
2108| | || Januar, Februar, ..., | |
2109| | | Dezember (de_DE) | |
2110+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002111| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002112| | decimal number. | | |
2113+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002114| ``%y`` | Year without century as a | 00, 01, ..., 99 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002115| | zero-padded decimal number. | | |
2116+-----------+--------------------------------+------------------------+-------+
2117| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
David Wolever5d07e702013-08-14 14:41:48 -04002118| | number. | 2014, ..., 9998, 9999 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002119+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002120| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002121| | zero-padded decimal number. | | |
2122+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002123| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002124| | zero-padded decimal number. | | |
2125+-----------+--------------------------------+------------------------+-------+
2126| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
2127| | AM or PM. || am, pm (de_DE) | \(3) |
2128+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002129| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002130| | decimal number. | | |
2131+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002132| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4), |
2133| | decimal number. | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002134+-----------+--------------------------------+------------------------+-------+
2135| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
2136| | number, zero-padded on the | 999999 | |
2137| | left. | | |
2138+-----------+--------------------------------+------------------------+-------+
Christophe Nanteuil92878822018-10-06 00:57:02 +02002139| ``%z`` | UTC offset in the form | (empty), +0000, | \(6) |
2140| | ±HHMM[SS[.ffffff]] (empty | -0400, +1030, | |
2141| | string if the object is | +063415, | |
2142| | naive). | -030712.345216 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002143+-----------+--------------------------------+------------------------+-------+
2144| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | |
2145| | if the object is naive). | | |
2146+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002147| ``%j`` | Day of the year as a | 001, 002, ..., 366 | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002148| | zero-padded decimal number. | | |
2149+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002150| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7), |
2151| | (Sunday as the first day of | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002152| | the week) as a zero padded | | |
2153| | decimal number. All days in a | | |
2154| | new year preceding the first | | |
2155| | Sunday are considered to be in | | |
2156| | week 0. | | |
2157+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002158| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7), |
2159| | (Monday as the first day of | | \(9) |
David Wolever569a5fa2013-08-12 16:56:02 -04002160| | the week) as a decimal number. | | |
2161| | All days in a new year | | |
2162| | preceding the first Monday | | |
2163| | are considered to be in | | |
2164| | week 0. | | |
2165+-----------+--------------------------------+------------------------+-------+
2166| ``%c`` | Locale's appropriate date and || Tue Aug 16 21:30:00 | \(1) |
2167| | time representation. | 1988 (en_US); | |
2168| | || Di 16 Aug 21:30:00 | |
2169| | | 1988 (de_DE) | |
2170+-----------+--------------------------------+------------------------+-------+
2171| ``%x`` | Locale's appropriate date || 08/16/88 (None); | \(1) |
2172| | representation. || 08/16/1988 (en_US); | |
2173| | || 16.08.1988 (de_DE) | |
2174+-----------+--------------------------------+------------------------+-------+
2175| ``%X`` | Locale's appropriate time || 21:30:00 (en_US); | \(1) |
2176| | representation. || 21:30:00 (de_DE) | |
2177+-----------+--------------------------------+------------------------+-------+
2178| ``%%`` | A literal ``'%'`` character. | % | |
2179+-----------+--------------------------------+------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00002180
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002181Several additional directives not required by the C89 standard are included for
2182convenience. These parameters all correspond to ISO 8601 date values. These
2183may not be available on all platforms when used with the :meth:`strftime`
2184method. The ISO 8601 year and ISO 8601 week directives are not interchangeable
2185with the year and week number directives above. Calling :meth:`strptime` with
2186incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
2187
2188+-----------+--------------------------------+------------------------+-------+
2189| Directive | Meaning | Example | Notes |
2190+===========+================================+========================+=======+
2191| ``%G`` | ISO 8601 year with century | 0001, 0002, ..., 2013, | \(8) |
2192| | representing the year that | 2014, ..., 9998, 9999 | |
2193| | contains the greater part of | | |
2194| | the ISO week (``%V``). | | |
2195+-----------+--------------------------------+------------------------+-------+
2196| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
2197| | number where 1 is Monday. | | |
2198+-----------+--------------------------------+------------------------+-------+
Mike Gleen6b9c2042019-06-18 19:14:57 +01002199| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8), |
2200| | number with Monday as | | \(9) |
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002201| | the first day of the week. | | |
2202| | Week 01 is the week containing | | |
2203| | Jan 4. | | |
2204+-----------+--------------------------------+------------------------+-------+
2205
2206.. versionadded:: 3.6
2207 ``%G``, ``%u`` and ``%V`` were added.
2208
Christian Heimes895627f2007-12-08 17:28:33 +00002209Notes:
2210
2211(1)
David Wolever569a5fa2013-08-12 16:56:02 -04002212 Because the format depends on the current locale, care should be taken when
2213 making assumptions about the output value. Field orderings will vary (for
2214 example, "month/day/year" versus "day/month/year"), and the output may
2215 contain Unicode characters encoded using the locale's default encoding (for
Georg Brandlad321532013-10-29 08:05:10 +01002216 example, if the current locale is ``ja_JP``, the default encoding could be
David Wolever569a5fa2013-08-12 16:56:02 -04002217 any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale`
2218 to determine the current locale's encoding).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002219
2220(2)
David Wolever569a5fa2013-08-12 16:56:02 -04002221 The :meth:`strptime` method can parse years in the full [1, 9999] range, but
2222 years < 1000 must be zero-filled to 4-digit width.
Alexander Belopolsky085556a2011-01-10 23:28:33 +00002223
2224 .. versionchanged:: 3.2
2225 In previous versions, :meth:`strftime` method was restricted to
2226 years >= 1900.
2227
Alexander Belopolsky5611a1c2011-05-02 14:14:48 -04002228 .. versionchanged:: 3.3
2229 In version 3.2, :meth:`strftime` method was restricted to
2230 years >= 1000.
2231
David Wolever569a5fa2013-08-12 16:56:02 -04002232(3)
2233 When used with the :meth:`strptime` method, the ``%p`` directive only affects
2234 the output hour field if the ``%I`` directive is used to parse the hour.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00002235
David Wolever569a5fa2013-08-12 16:56:02 -04002236(4)
2237 Unlike the :mod:`time` module, the :mod:`datetime` module does not support
2238 leap seconds.
2239
2240(5)
2241 When used with the :meth:`strptime` method, the ``%f`` directive
2242 accepts from one to six digits and zero pads on the right. ``%f`` is
2243 an extension to the set of format characters in the C standard (but
2244 implemented separately in datetime objects, and therefore always
2245 available).
2246
2247(6)
2248 For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
2249 strings.
2250
2251 For an aware object:
2252
2253 ``%z``
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002254 :meth:`utcoffset` is transformed into a string of the form
Christophe Nanteuil92878822018-10-06 00:57:02 +02002255 ±HHMM[SS[.ffffff]], where HH is a 2-digit string giving the number of UTC
2256 offset hours, MM is a 2-digit string giving the number of UTC offset
Serhiy Storchakabac2d5b2018-03-28 22:14:26 +03002257 minutes, SS is a 2-digit string giving the number of UTC offset
Christophe Nanteuil92878822018-10-06 00:57:02 +02002258 seconds and ffffff is a 6-digit string giving the number of UTC
2259 offset microseconds. The ffffff part is omitted when the offset is a
2260 whole number of seconds and both the ffffff and the SS part is omitted
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002261 when the offset is a whole number of minutes. For example, if
2262 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
2263 replaced with the string ``'-0330'``.
2264
2265 .. versionchanged:: 3.7
2266 The UTC offset is not restricted to a whole number of minutes.
David Wolever569a5fa2013-08-12 16:56:02 -04002267
Mario Corchero32318932017-10-26 01:35:41 +01002268 .. versionchanged:: 3.7
2269 When the ``%z`` directive is provided to the :meth:`strptime` method,
2270 the UTC offsets can have a colon as a separator between hours, minutes
2271 and seconds.
2272 For example, ``'+01:00:00'`` will be parsed as an offset of one hour.
2273 In addition, providing ``'Z'`` is identical to ``'+00:00'``.
2274
David Wolever569a5fa2013-08-12 16:56:02 -04002275 ``%Z``
2276 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty
2277 string. Otherwise ``%Z`` is replaced by the returned value, which must
2278 be a string.
2279
2280 .. versionchanged:: 3.2
2281 When the ``%z`` directive is provided to the :meth:`strptime` method, an
2282 aware :class:`.datetime` object will be produced. The ``tzinfo`` of the
2283 result will be set to a :class:`timezone` instance.
2284
2285(7)
2286 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002287 in calculations when the day of the week and the calendar year (``%Y``)
2288 are specified.
2289
2290(8)
2291 Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the
2292 day of the week and the ISO year (``%G``) are specified in a
2293 :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
Martin Panterf1579822016-05-26 06:03:33 +00002294 interchangeable.
R David Murray9075d8b2012-05-14 22:14:46 -04002295
Mike Gleen6b9c2042019-06-18 19:14:57 +01002296(9)
2297 When used with the :meth:`strptime` method, the leading zero is optional
2298 for formats ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, ``%S``, ``%J``, ``%U``,
2299 ``%W``, and ``%V``. Format ``%y`` does require a leading zero.
2300
R David Murray9075d8b2012-05-14 22:14:46 -04002301.. rubric:: Footnotes
2302
2303.. [#] If, that is, we ignore the effects of Relativity
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302304.. [#] Passing ``datetime.strptime('Feb 29', '%b %d')`` will fail since ``1900`` is not a leap year.