blob: 3c45e56b5f4fef072c3f5ba8cae5d544c4792195 [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
Georg Brandl5c106642007-11-29 17:41:05 +0000404 All arguments are required. Arguments may 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
Georg Brandl5c106642007-11-29 17:41:05 +0000717 instance of a :class:`tzinfo` subclass. The remaining arguments may be integers,
718 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
860 as the inverse operation of :meth:`datetime.isoformat`.
861
862 .. versionadded:: 3.7
863
Paul Ganssle88c09372019-04-29 09:22:03 -0400864
865.. classmethod:: datetime.fromisocalendar(year, week, day)
866
867 Return a :class:`datetime` corresponding to the ISO calendar date specified
868 by year, week and day. The non-date components of the datetime are populated
869 with their normal default values. This is the inverse of the function
870 :meth:`datetime.isocalendar`.
871
872 .. versionadded:: 3.8
873
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000874.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +0000875
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300876 Return a :class:`.datetime` corresponding to *date_string*, parsed according to
Georg Brandl116aa622007-08-15 14:28:22 +0000877 *format*. This is equivalent to ``datetime(*(time.strptime(date_string,
878 format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
879 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 -0400880 time tuple. For a complete list of formatting directives, see
881 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000882
Georg Brandl116aa622007-08-15 14:28:22 +0000883
Georg Brandl116aa622007-08-15 14:28:22 +0000884
885Class attributes:
886
Georg Brandl116aa622007-08-15 14:28:22 +0000887.. attribute:: datetime.min
888
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300889 The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1,
Georg Brandl116aa622007-08-15 14:28:22 +0000890 tzinfo=None)``.
891
892
893.. attribute:: datetime.max
894
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300895 The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
Georg Brandl116aa622007-08-15 14:28:22 +0000896 59, 999999, tzinfo=None)``.
897
898
899.. attribute:: datetime.resolution
900
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300901 The smallest possible difference between non-equal :class:`.datetime` objects,
Georg Brandl116aa622007-08-15 14:28:22 +0000902 ``timedelta(microseconds=1)``.
903
Georg Brandl116aa622007-08-15 14:28:22 +0000904
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000905Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000906
907.. attribute:: datetime.year
908
909 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
910
911
912.. attribute:: datetime.month
913
914 Between 1 and 12 inclusive.
915
916
917.. attribute:: datetime.day
918
919 Between 1 and the number of days in the given month of the given year.
920
921
922.. attribute:: datetime.hour
923
924 In ``range(24)``.
925
926
927.. attribute:: datetime.minute
928
929 In ``range(60)``.
930
931
932.. attribute:: datetime.second
933
934 In ``range(60)``.
935
936
937.. attribute:: datetime.microsecond
938
939 In ``range(1000000)``.
940
941
942.. attribute:: datetime.tzinfo
943
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300944 The object passed as the *tzinfo* argument to the :class:`.datetime` constructor,
Georg Brandl116aa622007-08-15 14:28:22 +0000945 or ``None`` if none was passed.
946
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000947
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400948.. attribute:: datetime.fold
949
950 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
951 repeated interval occurs when clocks are rolled back at the end of daylight saving
952 time or when the UTC offset for the current zone is decreased for political reasons.)
953 The value 0 (1) represents the earlier (later) of the two moments with the same wall
954 time representation.
955
956 .. versionadded:: 3.6
957
Georg Brandl116aa622007-08-15 14:28:22 +0000958Supported operations:
959
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300960+---------------------------------------+--------------------------------+
961| Operation | Result |
962+=======================================+================================+
963| ``datetime2 = datetime1 + timedelta`` | \(1) |
964+---------------------------------------+--------------------------------+
965| ``datetime2 = datetime1 - timedelta`` | \(2) |
966+---------------------------------------+--------------------------------+
967| ``timedelta = datetime1 - datetime2`` | \(3) |
968+---------------------------------------+--------------------------------+
969| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
970| | :class:`.datetime`. (4) |
971+---------------------------------------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000972
973(1)
974 datetime2 is a duration of timedelta removed from datetime1, moving forward in
975 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Martin Panter16c7cfd2016-04-01 21:48:24 +0000976 result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and
Senthil Kumarana6bac952011-07-04 11:28:30 -0700977 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
978 datetime2.year would be smaller than :const:`MINYEAR` or larger than
979 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
980 input is an aware object.
Georg Brandl116aa622007-08-15 14:28:22 +0000981
982(2)
983 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Martin Panter16c7cfd2016-04-01 21:48:24 +0000984 addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input
Senthil Kumarana6bac952011-07-04 11:28:30 -0700985 datetime, and no time zone adjustments are done even if the input is aware.
Georg Brandl116aa622007-08-15 14:28:22 +0000986
987(3)
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300988 Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if
Georg Brandl116aa622007-08-15 14:28:22 +0000989 both operands are naive, or if both are aware. If one is aware and the other is
990 naive, :exc:`TypeError` is raised.
991
Martin Panter16c7cfd2016-04-01 21:48:24 +0000992 If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute,
993 the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Georg Brandl116aa622007-08-15 14:28:22 +0000994 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
995 are done in this case.
996
Martin Panter16c7cfd2016-04-01 21:48:24 +0000997 If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
Senthil Kumarana6bac952011-07-04 11:28:30 -0700998 as if *a* and *b* were first converted to naive UTC datetimes first. The
999 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
1000 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl116aa622007-08-15 14:28:22 +00001001
1002(4)
1003 *datetime1* is considered less than *datetime2* when *datetime1* precedes
1004 *datetime2* in time.
1005
Alexander Belopolsky08313822012-06-15 20:19:47 -04001006 If one comparand is naive and the other is aware, :exc:`TypeError`
1007 is raised if an order comparison is attempted. For equality
1008 comparisons, naive instances are never equal to aware instances.
1009
Martin Panter16c7cfd2016-04-01 21:48:24 +00001010 If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
1011 common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
1012 compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001013 attributes, the comparands are first adjusted by subtracting their UTC
1014 offsets (obtained from ``self.utcoffset()``).
Georg Brandl116aa622007-08-15 14:28:22 +00001015
Alexander Belopolsky08313822012-06-15 20:19:47 -04001016 .. versionchanged:: 3.3
Martin Panter16c7cfd2016-04-01 21:48:24 +00001017 Equality comparisons between naive and aware :class:`.datetime`
Éric Araujob0f08952012-06-24 16:22:09 -04001018 instances don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001019
Georg Brandl116aa622007-08-15 14:28:22 +00001020 .. note::
1021
1022 In order to stop comparison from falling back to the default scheme of comparing
1023 object addresses, datetime comparison normally raises :exc:`TypeError` if the
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001024 other comparand isn't also a :class:`.datetime` object. However,
Georg Brandl116aa622007-08-15 14:28:22 +00001025 ``NotImplemented`` is returned instead if the other comparand has a
1026 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001027 chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001028 object is compared to an object of a different type, :exc:`TypeError` is raised
1029 unless the comparison is ``==`` or ``!=``. The latter cases return
1030 :const:`False` or :const:`True`, respectively.
1031
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001032:class:`.datetime` objects can be used as dictionary keys. In Boolean contexts,
1033all :class:`.datetime` objects are considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001034
1035Instance methods:
1036
Georg Brandl116aa622007-08-15 14:28:22 +00001037.. method:: datetime.date()
1038
1039 Return :class:`date` object with same year, month and day.
1040
1041
1042.. method:: datetime.time()
1043
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001044 Return :class:`.time` object with same hour, minute, second, microsecond and fold.
Martin Panter16c7cfd2016-04-01 21:48:24 +00001045 :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`.
Georg Brandl116aa622007-08-15 14:28:22 +00001046
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001047 .. versionchanged:: 3.6
1048 The fold value is copied to the returned :class:`.time` object.
1049
Georg Brandl116aa622007-08-15 14:28:22 +00001050
1051.. method:: datetime.timetz()
1052
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001053 Return :class:`.time` object with same hour, minute, second, microsecond, fold, and
Senthil Kumarana6bac952011-07-04 11:28:30 -07001054 tzinfo attributes. See also method :meth:`time`.
Georg Brandl116aa622007-08-15 14:28:22 +00001055
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001056 .. versionchanged:: 3.6
1057 The fold value is copied to the returned :class:`.time` object.
Georg Brandl116aa622007-08-15 14:28:22 +00001058
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001059
1060.. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \
1061 hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \
1062 tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001063
Senthil Kumarana6bac952011-07-04 11:28:30 -07001064 Return a datetime with the same attributes, except for those attributes given
1065 new values by whichever keyword arguments are specified. Note that
1066 ``tzinfo=None`` can be specified to create a naive datetime from an aware
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001067 datetime with no conversion of date and time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001068
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001069 .. versionadded:: 3.6
1070 Added the ``fold`` argument.
1071
Georg Brandl116aa622007-08-15 14:28:22 +00001072
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001073.. method:: datetime.astimezone(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001074
Martin Panter16c7cfd2016-04-01 21:48:24 +00001075 Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*,
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001076 adjusting the date and time data so the result is the same UTC time as
Senthil Kumarana6bac952011-07-04 11:28:30 -07001077 *self*, but in *tz*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001078
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001079 If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001080 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If *self*
Alexander Belopolsky877b2322018-06-10 17:02:58 -04001081 is naive, it is presumed to represent time in the system timezone.
Georg Brandl116aa622007-08-15 14:28:22 +00001082
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001083 If called without arguments (or with ``tz=None``) the system local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001084 timezone is assumed for the target timezone. The ``.tzinfo`` attribute of the converted
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001085 datetime instance will be set to an instance of :class:`timezone`
1086 with the zone name and offset obtained from the OS.
1087
Georg Brandl116aa622007-08-15 14:28:22 +00001088 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001089 adjustment of date or time data is performed. Else the result is local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001090 time in the timezone *tz*, representing the same UTC time as *self*: after
1091 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have
1092 the same date and time data as ``dt - dt.utcoffset()``.
Georg Brandl116aa622007-08-15 14:28:22 +00001093
1094 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001095 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl116aa622007-08-15 14:28:22 +00001096 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001097 conversion of date and time data, use ``dt.replace(tzinfo=None)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001098
1099 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
1100 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
1101 Ignoring error cases, :meth:`astimezone` acts like::
1102
1103 def astimezone(self, tz):
1104 if self.tzinfo is tz:
1105 return self
1106 # Convert self to UTC, and attach the new time zone object.
1107 utc = (self - self.utcoffset()).replace(tzinfo=tz)
1108 # Convert from UTC to tz's local time.
1109 return tz.fromutc(utc)
1110
Georg Brandlee0be402012-06-26 09:14:40 +02001111 .. versionchanged:: 3.3
1112 *tz* now can be omitted.
1113
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001114 .. versionchanged:: 3.6
1115 The :meth:`astimezone` method can now be called on naive instances that
1116 are presumed to represent system local time.
1117
Georg Brandl116aa622007-08-15 14:28:22 +00001118
1119.. method:: datetime.utcoffset()
1120
Martin Panter16c7cfd2016-04-01 21:48:24 +00001121 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001122 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001123 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1124
1125 .. versionchanged:: 3.7
1126 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001127
1128
1129.. method:: datetime.dst()
1130
Martin Panter16c7cfd2016-04-01 21:48:24 +00001131 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001132 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001133 ``None`` or a :class:`timedelta` object with magnitude less than one day.
1134
1135 .. versionchanged:: 3.7
1136 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001137
1138
1139.. method:: datetime.tzname()
1140
Martin Panter16c7cfd2016-04-01 21:48:24 +00001141 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001142 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
1143 ``None`` or a string object,
1144
1145
1146.. method:: datetime.timetuple()
1147
1148 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
1149 ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day,
Alexander Belopolsky64912482010-06-08 18:59:20 +00001150 d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday =
1151 d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within
1152 the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag
Martin Panter16c7cfd2016-04-01 21:48:24 +00001153 of the result is set according to the :meth:`dst` method: :attr:`.tzinfo` is
Georg Brandl682d7e02010-10-06 10:26:05 +00001154 ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``;
Alexander Belopolsky64912482010-06-08 18:59:20 +00001155 else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``;
Alexander Belopolskyda62f2f2010-06-09 17:11:01 +00001156 else :attr:`tm_isdst` is set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +00001157
1158
1159.. method:: datetime.utctimetuple()
1160
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001161 If :class:`.datetime` instance *d* is naive, this is the same as
Georg Brandl116aa622007-08-15 14:28:22 +00001162 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
1163 ``d.dst()`` returns. DST is never in effect for a UTC time.
1164
1165 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001166 ``d.utcoffset()``, and a :class:`time.struct_time` for the
1167 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
1168 that an :exc:`OverflowError` may be raised if *d*.year was
1169 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +00001170 boundary.
1171
1172
1173.. method:: datetime.toordinal()
1174
1175 Return the proleptic Gregorian ordinal of the date. The same as
1176 ``self.date().toordinal()``.
1177
Alexander Belopolskya4415142012-06-08 12:33:09 -04001178.. method:: datetime.timestamp()
1179
Martin Panter16c7cfd2016-04-01 21:48:24 +00001180 Return POSIX timestamp corresponding to the :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001181 instance. The return value is a :class:`float` similar to that
1182 returned by :func:`time.time`.
1183
Martin Panter16c7cfd2016-04-01 21:48:24 +00001184 Naive :class:`.datetime` instances are assumed to represent local
Alexander Belopolskya4415142012-06-08 12:33:09 -04001185 time and this method relies on the platform C :c:func:`mktime`
Martin Panter16c7cfd2016-04-01 21:48:24 +00001186 function to perform the conversion. Since :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001187 supports wider range of values than :c:func:`mktime` on many
1188 platforms, this method may raise :exc:`OverflowError` for times far
1189 in the past or far in the future.
1190
Martin Panter16c7cfd2016-04-01 21:48:24 +00001191 For aware :class:`.datetime` instances, the return value is computed
Alexander Belopolskya4415142012-06-08 12:33:09 -04001192 as::
1193
1194 (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
1195
1196 .. versionadded:: 3.3
1197
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001198 .. versionchanged:: 3.6
1199 The :meth:`timestamp` method uses the :attr:`.fold` attribute to
1200 disambiguate the times during a repeated interval.
1201
Alexander Belopolskya4415142012-06-08 12:33:09 -04001202 .. note::
1203
1204 There is no method to obtain the POSIX timestamp directly from a
Martin Panter16c7cfd2016-04-01 21:48:24 +00001205 naive :class:`.datetime` instance representing UTC time. If your
Alexander Belopolskya4415142012-06-08 12:33:09 -04001206 application uses this convention and your system timezone is not
1207 set to UTC, you can obtain the POSIX timestamp by supplying
1208 ``tzinfo=timezone.utc``::
1209
1210 timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
1211
1212 or by calculating the timestamp directly::
1213
1214 timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
Georg Brandl116aa622007-08-15 14:28:22 +00001215
1216.. method:: datetime.weekday()
1217
1218 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1219 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1220
1221
1222.. method:: datetime.isoweekday()
1223
1224 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1225 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1226 :meth:`isocalendar`.
1227
1228
1229.. method:: datetime.isocalendar()
1230
1231 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
1232 ``self.date().isocalendar()``.
1233
1234
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001235.. method:: datetime.isoformat(sep='T', timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001236
1237 Return a string representing the date and time in ISO 8601 format,
Christophe Nanteuil92878822018-10-06 00:57:02 +02001238 YYYY-MM-DDTHH:MM:SS.ffffff or, if :attr:`microsecond` is 0,
Georg Brandl116aa622007-08-15 14:28:22 +00001239 YYYY-MM-DDTHH:MM:SS
1240
Christophe Nanteuil92878822018-10-06 00:57:02 +02001241 If :meth:`utcoffset` does not return ``None``, a string is
1242 appended, giving the UTC offset:
1243 YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]] or, if :attr:`microsecond`
1244 is 0 YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]].
Georg Brandl116aa622007-08-15 14:28:22 +00001245
1246 The optional argument *sep* (default ``'T'``) is a one-character separator,
Christian Heimesfe337bf2008-03-23 21:54:12 +00001247 placed between the date and time portions of the result. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00001248
1249 >>> from datetime import tzinfo, timedelta, datetime
1250 >>> class TZ(tzinfo):
1251 ... def utcoffset(self, dt): return timedelta(minutes=-399)
1252 ...
1253 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1254 '2002-12-25 00:00:00-06:39'
1255
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001256 The optional argument *timespec* specifies the number of additional
1257 components of the time to include (the default is ``'auto'``).
1258 It can be one of the following:
1259
1260 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1261 same as ``'microseconds'`` otherwise.
1262 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
1263 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
1264 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
1265 in HH:MM:SS format.
1266 - ``'milliseconds'``: Include full time, but truncate fractional second
1267 part to milliseconds. HH:MM:SS.sss format.
Christophe Nanteuil92878822018-10-06 00:57:02 +02001268 - ``'microseconds'``: Include full time in HH:MM:SS.ffffff format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001269
1270 .. note::
1271
1272 Excluded time components are truncated, not rounded.
1273
1274 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1275
1276
1277 >>> from datetime import datetime
Marco Buttu909a6f62017-03-18 17:59:33 +01001278 >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001279 '2002-12-25T00:00'
1280 >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
1281 >>> dt.isoformat(timespec='microseconds')
1282 '2015-01-01T12:30:59.000000'
1283
1284 .. versionadded:: 3.6
1285 Added the *timespec* argument.
1286
Georg Brandl116aa622007-08-15 14:28:22 +00001287
1288.. method:: datetime.__str__()
1289
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001290 For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to
Georg Brandl116aa622007-08-15 14:28:22 +00001291 ``d.isoformat(' ')``.
1292
1293
1294.. method:: datetime.ctime()
1295
1296 Return a string representing the date and time, for example ``datetime(2002, 12,
1297 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:40 2002'``. ``d.ctime()`` is
1298 equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the
Georg Brandl60203b42010-10-06 10:11:56 +00001299 native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +00001300 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
1301
1302
1303.. method:: datetime.strftime(format)
1304
1305 Return a string representing the date and time, controlled by an explicit format
David Wolever569a5fa2013-08-12 16:56:02 -04001306 string. For a complete list of formatting directives, see
1307 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001308
Georg Brandl116aa622007-08-15 14:28:22 +00001309
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001310.. method:: datetime.__format__(format)
1311
Martin Panterd5db1472016-02-08 01:34:09 +00001312 Same as :meth:`.datetime.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +00001313 string for a :class:`.datetime` object in :ref:`formatted string
1314 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001315 complete list of formatting directives, see
1316 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001317
1318
Christian Heimesfe337bf2008-03-23 21:54:12 +00001319Examples of working with datetime objects:
1320
1321.. doctest::
1322
Christian Heimes895627f2007-12-08 17:28:33 +00001323 >>> from datetime import datetime, date, time
1324 >>> # Using datetime.combine()
1325 >>> d = date(2005, 7, 14)
1326 >>> t = time(12, 30)
1327 >>> datetime.combine(d, t)
1328 datetime.datetime(2005, 7, 14, 12, 30)
1329 >>> # Using datetime.now() or datetime.utcnow()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001330 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001331 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Christian Heimesfe337bf2008-03-23 21:54:12 +00001332 >>> datetime.utcnow() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001333 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
1334 >>> # Using datetime.strptime()
1335 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1336 >>> dt
1337 datetime.datetime(2006, 11, 21, 16, 30)
1338 >>> # Using datetime.timetuple() to get tuple of all attributes
1339 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001340 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001341 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001342 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001343 2006 # year
1344 11 # month
1345 21 # day
1346 16 # hour
1347 30 # minute
1348 0 # second
1349 1 # weekday (0 = Monday)
1350 325 # number of days since 1st January
1351 -1 # dst - method tzinfo.dst() returned None
1352 >>> # Date in ISO format
1353 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001354 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001355 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001356 ...
1357 2006 # ISO year
1358 47 # ISO week
1359 2 # ISO weekday
1360 >>> # Formatting datetime
1361 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1362 'Tuesday, 21. November 2006 04:30PM'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001363 >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
1364 'The day is 21, the month is November, the time is 04:30PM.'
Christian Heimes895627f2007-12-08 17:28:33 +00001365
Christian Heimesfe337bf2008-03-23 21:54:12 +00001366Using datetime with tzinfo:
Christian Heimes895627f2007-12-08 17:28:33 +00001367
1368 >>> from datetime import timedelta, datetime, tzinfo
1369 >>> class GMT1(tzinfo):
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001370 ... def utcoffset(self, dt):
1371 ... return timedelta(hours=1) + self.dst(dt)
1372 ... def dst(self, dt):
1373 ... # DST starts last Sunday in March
Christian Heimes895627f2007-12-08 17:28:33 +00001374 ... d = datetime(dt.year, 4, 1) # ends last Sunday in October
1375 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001376 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001377 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001378 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1379 ... return timedelta(hours=1)
1380 ... else:
1381 ... return timedelta(0)
1382 ... def tzname(self,dt):
1383 ... return "GMT +1"
Georg Brandl48310cd2009-01-03 21:18:54 +00001384 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001385 >>> class GMT2(tzinfo):
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001386 ... def utcoffset(self, dt):
1387 ... return timedelta(hours=2) + self.dst(dt)
1388 ... def dst(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001389 ... d = datetime(dt.year, 4, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001390 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001391 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001392 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001393 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001394 ... return timedelta(hours=1)
Christian Heimes895627f2007-12-08 17:28:33 +00001395 ... else:
1396 ... return timedelta(0)
1397 ... def tzname(self,dt):
1398 ... return "GMT +2"
Georg Brandl48310cd2009-01-03 21:18:54 +00001399 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001400 >>> gmt1 = GMT1()
1401 >>> # Daylight Saving Time
1402 >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
1403 >>> dt1.dst()
1404 datetime.timedelta(0)
1405 >>> dt1.utcoffset()
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +02001406 datetime.timedelta(seconds=3600)
Christian Heimes895627f2007-12-08 17:28:33 +00001407 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
1408 >>> dt2.dst()
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +02001409 datetime.timedelta(seconds=3600)
Christian Heimes895627f2007-12-08 17:28:33 +00001410 >>> dt2.utcoffset()
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +02001411 datetime.timedelta(seconds=7200)
Christian Heimes895627f2007-12-08 17:28:33 +00001412 >>> # Convert datetime to another time zone
1413 >>> dt3 = dt2.astimezone(GMT2())
1414 >>> dt3 # doctest: +ELLIPSIS
1415 datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
1416 >>> dt2 # doctest: +ELLIPSIS
1417 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
1418 >>> dt2.utctimetuple() == dt3.utctimetuple()
1419 True
Georg Brandl48310cd2009-01-03 21:18:54 +00001420
Christian Heimes895627f2007-12-08 17:28:33 +00001421
Georg Brandl116aa622007-08-15 14:28:22 +00001422
1423.. _datetime-time:
1424
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001425:class:`.time` Objects
1426----------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001427
1428A time object represents a (local) time of day, independent of any particular
1429day, and subject to adjustment via a :class:`tzinfo` object.
1430
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001431.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001432
1433 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
Georg Brandl5c106642007-11-29 17:41:05 +00001434 :class:`tzinfo` subclass. The remaining arguments may be integers, in the
Georg Brandl116aa622007-08-15 14:28:22 +00001435 following ranges:
1436
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001437 * ``0 <= hour < 24``,
1438 * ``0 <= minute < 60``,
1439 * ``0 <= second < 60``,
1440 * ``0 <= microsecond < 1000000``,
1441 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +00001442
1443 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
1444 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1445
1446Class attributes:
1447
1448
1449.. attribute:: time.min
1450
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001451 The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001452
1453
1454.. attribute:: time.max
1455
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001456 The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001457
1458
1459.. attribute:: time.resolution
1460
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001461 The smallest possible difference between non-equal :class:`.time` objects,
1462 ``timedelta(microseconds=1)``, although note that arithmetic on
1463 :class:`.time` objects is not supported.
Georg Brandl116aa622007-08-15 14:28:22 +00001464
Georg Brandl116aa622007-08-15 14:28:22 +00001465
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001466Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001467
1468.. attribute:: time.hour
1469
1470 In ``range(24)``.
1471
1472
1473.. attribute:: time.minute
1474
1475 In ``range(60)``.
1476
1477
1478.. attribute:: time.second
1479
1480 In ``range(60)``.
1481
1482
1483.. attribute:: time.microsecond
1484
1485 In ``range(1000000)``.
1486
1487
1488.. attribute:: time.tzinfo
1489
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001490 The object passed as the tzinfo argument to the :class:`.time` constructor, or
Georg Brandl116aa622007-08-15 14:28:22 +00001491 ``None`` if none was passed.
1492
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001493
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001494.. attribute:: time.fold
1495
1496 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
1497 repeated interval occurs when clocks are rolled back at the end of daylight saving
1498 time or when the UTC offset for the current zone is decreased for political reasons.)
1499 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1500 time representation.
1501
1502 .. versionadded:: 3.6
1503
1504
Georg Brandl116aa622007-08-15 14:28:22 +00001505Supported operations:
1506
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001507* comparison of :class:`.time` to :class:`.time`, where *a* is considered less
Georg Brandl116aa622007-08-15 14:28:22 +00001508 than *b* when *a* precedes *b* in time. If one comparand is naive and the other
Alexander Belopolsky08313822012-06-15 20:19:47 -04001509 is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality
1510 comparisons, naive instances are never equal to aware instances.
1511
1512 If both comparands are aware, and have
Martin Panter16c7cfd2016-04-01 21:48:24 +00001513 the same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is
Senthil Kumarana6bac952011-07-04 11:28:30 -07001514 ignored and the base times are compared. If both comparands are aware and
Martin Panter16c7cfd2016-04-01 21:48:24 +00001515 have different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by
Senthil Kumarana6bac952011-07-04 11:28:30 -07001516 subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1517 to stop mixed-type comparisons from falling back to the default comparison by
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001518 object address, when a :class:`.time` object is compared to an object of a
Senthil Kumaran3aac1792011-07-04 11:43:51 -07001519 different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
Senthil Kumarana6bac952011-07-04 11:28:30 -07001520 ``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl116aa622007-08-15 14:28:22 +00001521
Alexander Belopolsky08313822012-06-15 20:19:47 -04001522 .. versionchanged:: 3.3
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001523 Equality comparisons between naive and aware :class:`~datetime.time` instances
Éric Araujob0f08952012-06-24 16:22:09 -04001524 don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001525
Georg Brandl116aa622007-08-15 14:28:22 +00001526* hash, use as dict key
1527
1528* efficient pickling
1529
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001530In boolean contexts, a :class:`.time` object is always considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001531
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001532.. versionchanged:: 3.5
1533 Before Python 3.5, a :class:`.time` object was considered to be false if it
1534 represented midnight in UTC. This behavior was considered obscure and
1535 error-prone and has been removed in Python 3.5. See :issue:`13936` for full
1536 details.
Georg Brandl116aa622007-08-15 14:28:22 +00001537
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001538
1539Other constructor:
1540
1541.. classmethod:: time.fromisoformat(time_string)
1542
1543 Return a :class:`time` corresponding to a *time_string* in one of the
1544 formats emitted by :meth:`time.isoformat`. Specifically, this function supports
Christophe Nanteuil92878822018-10-06 00:57:02 +02001545 strings in the format(s) ``HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]``.
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001546
1547 .. caution::
1548
1549 This does not support parsing arbitrary ISO 8601 strings - it is only intended
1550 as the inverse operation of :meth:`time.isoformat`.
1551
1552 .. versionadded:: 3.7
1553
1554
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001555Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001556
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001557.. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \
1558 microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001559
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001560 Return a :class:`.time` with the same value, except for those attributes given
Senthil Kumarana6bac952011-07-04 11:28:30 -07001561 new values by whichever keyword arguments are specified. Note that
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001562 ``tzinfo=None`` can be specified to create a naive :class:`.time` from an
1563 aware :class:`.time`, without conversion of the time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001564
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001565 .. versionadded:: 3.6
1566 Added the ``fold`` argument.
1567
Georg Brandl116aa622007-08-15 14:28:22 +00001568
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001569.. method:: time.isoformat(timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001570
Christophe Nanteuil92878822018-10-06 00:57:02 +02001571 Return a string representing the time in ISO 8601 format, HH:MM:SS.ffffff or, if
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001572 :attr:`microsecond` is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a
Christophe Nanteuil92878822018-10-06 00:57:02 +02001573 string is appended, giving the UTC offset: HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]
1574 or, if self.microsecond is 0, HH:MM:SS+HH:MM[:SS[.ffffff]].
Georg Brandl116aa622007-08-15 14:28:22 +00001575
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001576 The optional argument *timespec* specifies the number of additional
1577 components of the time to include (the default is ``'auto'``).
1578 It can be one of the following:
1579
1580 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1581 same as ``'microseconds'`` otherwise.
1582 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
1583 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
1584 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
1585 in HH:MM:SS format.
1586 - ``'milliseconds'``: Include full time, but truncate fractional second
1587 part to milliseconds. HH:MM:SS.sss format.
Christophe Nanteuil92878822018-10-06 00:57:02 +02001588 - ``'microseconds'``: Include full time in HH:MM:SS.ffffff format.
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001589
1590 .. note::
1591
1592 Excluded time components are truncated, not rounded.
1593
1594 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1595
1596
1597 >>> from datetime import time
Berker Peksag94f89a62016-06-04 21:36:53 -07001598 >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001599 '12:34'
Berker Peksag94f89a62016-06-04 21:36:53 -07001600 >>> dt = time(hour=12, minute=34, second=56, microsecond=0)
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001601 >>> dt.isoformat(timespec='microseconds')
1602 '12:34:56.000000'
1603 >>> dt.isoformat(timespec='auto')
1604 '12:34:56'
1605
1606 .. versionadded:: 3.6
1607 Added the *timespec* argument.
1608
Georg Brandl116aa622007-08-15 14:28:22 +00001609
1610.. method:: time.__str__()
1611
1612 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1613
1614
1615.. method:: time.strftime(format)
1616
David Wolever569a5fa2013-08-12 16:56:02 -04001617 Return a string representing the time, controlled by an explicit format
1618 string. For a complete list of formatting directives, see
David Woleverbbf4a462013-08-12 17:15:36 -04001619 :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001620
1621
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001622.. method:: time.__format__(format)
1623
Martin Panterd5db1472016-02-08 01:34:09 +00001624 Same as :meth:`.time.strftime`. This makes it possible to specify a format string
Martin Panterbc1ee462016-02-13 00:41:37 +00001625 for a :class:`.time` object in :ref:`formatted string
1626 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001627 complete list of formatting directives, see
1628 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001629
1630
Georg Brandl116aa622007-08-15 14:28:22 +00001631.. method:: time.utcoffset()
1632
Martin Panter16c7cfd2016-04-01 21:48:24 +00001633 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001634 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001635 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1636
1637 .. versionchanged:: 3.7
1638 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001639
1640
1641.. method:: time.dst()
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.dst(None)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001645 ``None``, or a :class:`timedelta` object with magnitude less than one day.
Georg Brandl116aa622007-08-15 14:28:22 +00001646
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001647 .. versionchanged:: 3.7
1648 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001649
1650.. method:: time.tzname()
1651
Martin Panter16c7cfd2016-04-01 21:48:24 +00001652 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001653 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1654 return ``None`` or a string object.
1655
Christian Heimesfe337bf2008-03-23 21:54:12 +00001656Example:
Georg Brandl48310cd2009-01-03 21:18:54 +00001657
Xiang Zhang6721c7c2016-12-27 12:23:59 +08001658 >>> from datetime import time, tzinfo, timedelta
Christian Heimes895627f2007-12-08 17:28:33 +00001659 >>> class GMT1(tzinfo):
1660 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001661 ... return timedelta(hours=1)
1662 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001663 ... return timedelta(0)
1664 ... def tzname(self,dt):
1665 ... return "Europe/Prague"
1666 ...
1667 >>> t = time(12, 10, 30, tzinfo=GMT1())
1668 >>> t # doctest: +ELLIPSIS
1669 datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>)
1670 >>> gmt = GMT1()
1671 >>> t.isoformat()
1672 '12:10:30+01:00'
1673 >>> t.dst()
1674 datetime.timedelta(0)
1675 >>> t.tzname()
1676 'Europe/Prague'
1677 >>> t.strftime("%H:%M:%S %Z")
1678 '12:10:30 Europe/Prague'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001679 >>> 'The {} is {:%H:%M}.'.format("time", t)
1680 'The time is 12:10.'
Christian Heimes895627f2007-12-08 17:28:33 +00001681
Georg Brandl116aa622007-08-15 14:28:22 +00001682
1683.. _datetime-tzinfo:
1684
1685:class:`tzinfo` Objects
1686-----------------------
1687
Martin Panter16c7cfd2016-04-01 21:48:24 +00001688.. class:: tzinfo()
Georg Brandl116aa622007-08-15 14:28:22 +00001689
Martin Panter16c7cfd2016-04-01 21:48:24 +00001690 This is an abstract base class, meaning that this class should not be
1691 instantiated directly. You need to derive a concrete subclass, and (at least)
1692 supply implementations of the standard :class:`tzinfo` methods needed by the
1693 :class:`.datetime` methods you use. The :mod:`datetime` module supplies
1694 a simple concrete subclass of :class:`tzinfo`, :class:`timezone`, which can represent
1695 timezones with fixed offset from UTC such as UTC itself or North American EST and
1696 EDT.
Georg Brandl116aa622007-08-15 14:28:22 +00001697
Martin Panter16c7cfd2016-04-01 21:48:24 +00001698 An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1699 constructors for :class:`.datetime` and :class:`.time` objects. The latter objects
1700 view their attributes as being in local time, and the :class:`tzinfo` object
1701 supports methods revealing offset of local time from UTC, the name of the time
1702 zone, and DST offset, all relative to a date or time object passed to them.
Georg Brandl116aa622007-08-15 14:28:22 +00001703
Martin Panter16c7cfd2016-04-01 21:48:24 +00001704 Special requirement for pickling: A :class:`tzinfo` subclass must have an
1705 :meth:`__init__` method that can be called with no arguments, else it can be
1706 pickled but possibly not unpickled again. This is a technical requirement that
1707 may be relaxed in the future.
1708
1709 A concrete subclass of :class:`tzinfo` may need to implement the following
1710 methods. Exactly which methods are needed depends on the uses made of aware
1711 :mod:`datetime` objects. If in doubt, simply implement all of them.
Georg Brandl116aa622007-08-15 14:28:22 +00001712
1713
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001714.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001715
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001716 Return offset of local time from UTC, as a :class:`timedelta` object that is
1717 positive east of UTC. If local time is
Georg Brandl116aa622007-08-15 14:28:22 +00001718 west of UTC, this should be negative. Note that this is intended to be the
1719 total offset from UTC; for example, if a :class:`tzinfo` object represents both
1720 time zone and DST adjustments, :meth:`utcoffset` should return their sum. If
1721 the UTC offset isn't known, return ``None``. Else the value returned must be a
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001722 :class:`timedelta` object strictly between ``-timedelta(hours=24)`` and
1723 ``timedelta(hours=24)`` (the magnitude of the offset must be less
Georg Brandl116aa622007-08-15 14:28:22 +00001724 than one day). Most implementations of :meth:`utcoffset` will probably look
1725 like one of these two::
1726
1727 return CONSTANT # fixed-offset class
1728 return CONSTANT + self.dst(dt) # daylight-aware class
1729
1730 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1731 ``None`` either.
1732
1733 The default implementation of :meth:`utcoffset` raises
1734 :exc:`NotImplementedError`.
1735
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001736 .. versionchanged:: 3.7
1737 The UTC offset is not restricted to a whole number of minutes.
1738
Georg Brandl116aa622007-08-15 14:28:22 +00001739
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001740.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001741
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001742 Return the daylight saving time (DST) adjustment, as a :class:`timedelta`
1743 object or
Georg Brandl116aa622007-08-15 14:28:22 +00001744 ``None`` if DST information isn't known. Return ``timedelta(0)`` if DST is not
1745 in effect. If DST is in effect, return the offset as a :class:`timedelta` object
1746 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1747 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1748 no need to consult :meth:`dst` unless you're interested in obtaining DST info
Martin Panter16c7cfd2016-04-01 21:48:24 +00001749 separately. For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001750 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1751 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1752 DST changes when crossing time zones.
Georg Brandl116aa622007-08-15 14:28:22 +00001753
1754 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1755 daylight times must be consistent in this sense:
1756
1757 ``tz.utcoffset(dt) - tz.dst(dt)``
1758
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001759 must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo ==
Georg Brandl116aa622007-08-15 14:28:22 +00001760 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1761 zone's "standard offset", which should not depend on the date or the time, but
1762 only on geographic location. The implementation of :meth:`datetime.astimezone`
1763 relies on this, but cannot detect violations; it's the programmer's
1764 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
1765 this, it may be able to override the default implementation of
1766 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
1767
1768 Most implementations of :meth:`dst` will probably look like one of these two::
1769
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001770 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001771 # a fixed-offset class: doesn't account for DST
1772 return timedelta(0)
1773
1774 or ::
1775
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001776 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001777 # Code to set dston and dstoff to the time zone's DST
1778 # transition times based on the input dt.year, and expressed
1779 # in standard local time. Then
1780
1781 if dston <= dt.replace(tzinfo=None) < dstoff:
1782 return timedelta(hours=1)
1783 else:
1784 return timedelta(0)
1785
1786 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
1787
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001788 .. versionchanged:: 3.7
1789 The DST offset is not restricted to a whole number of minutes.
1790
Georg Brandl116aa622007-08-15 14:28:22 +00001791
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001792.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001793
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001794 Return the time zone name corresponding to the :class:`.datetime` object *dt*, as
Georg Brandl116aa622007-08-15 14:28:22 +00001795 a string. Nothing about string names is defined by the :mod:`datetime` module,
1796 and there's no requirement that it mean anything in particular. For example,
1797 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
1798 valid replies. Return ``None`` if a string name isn't known. Note that this is
1799 a method rather than a fixed string primarily because some :class:`tzinfo`
1800 subclasses will wish to return different names depending on the specific value
1801 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
1802 daylight time.
1803
1804 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
1805
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001806
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001807These methods are called by a :class:`.datetime` or :class:`.time` object, in
1808response to their methods of the same names. A :class:`.datetime` object passes
1809itself as the argument, and a :class:`.time` object passes ``None`` as the
Georg Brandl116aa622007-08-15 14:28:22 +00001810argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001811accept a *dt* argument of ``None``, or of class :class:`.datetime`.
Georg Brandl116aa622007-08-15 14:28:22 +00001812
1813When ``None`` is passed, it's up to the class designer to decide the best
1814response. For example, returning ``None`` is appropriate if the class wishes to
1815say that time objects don't participate in the :class:`tzinfo` protocols. It
1816may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
1817there is no other convention for discovering the standard offset.
1818
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001819When a :class:`.datetime` object is passed in response to a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001820method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
1821rely on this, unless user code calls :class:`tzinfo` methods directly. The
1822intent is that the :class:`tzinfo` methods interpret *dt* as being in local
1823time, and not need worry about objects in other timezones.
1824
1825There is one more :class:`tzinfo` method that a subclass may wish to override:
1826
1827
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001828.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001829
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001830 This is called from the default :class:`datetime.astimezone()`
1831 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
1832 date and time data are to be viewed as expressing a UTC time. The purpose
1833 of :meth:`fromutc` is to adjust the date and time data, returning an
Senthil Kumarana6bac952011-07-04 11:28:30 -07001834 equivalent datetime in *self*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001835
1836 Most :class:`tzinfo` subclasses should be able to inherit the default
1837 :meth:`fromutc` implementation without problems. It's strong enough to handle
1838 fixed-offset time zones, and time zones accounting for both standard and
1839 daylight time, and the latter even if the DST transition times differ in
1840 different years. An example of a time zone the default :meth:`fromutc`
1841 implementation may not handle correctly in all cases is one where the standard
1842 offset (from UTC) depends on the specific date and time passed, which can happen
1843 for political reasons. The default implementations of :meth:`astimezone` and
1844 :meth:`fromutc` may not produce the result you want if the result is one of the
1845 hours straddling the moment the standard offset changes.
1846
1847 Skipping code for error cases, the default :meth:`fromutc` implementation acts
1848 like::
1849
1850 def fromutc(self, dt):
1851 # raise ValueError error if dt.tzinfo is not self
1852 dtoff = dt.utcoffset()
1853 dtdst = dt.dst()
1854 # raise ValueError if dtoff is None or dtdst is None
1855 delta = dtoff - dtdst # this is self's standard offset
1856 if delta:
1857 dt += delta # convert to standard local time
1858 dtdst = dt.dst()
1859 # raise ValueError if dtdst is None
1860 if dtdst:
1861 return dt + dtdst
1862 else:
1863 return dt
1864
Marco Buttu909a6f62017-03-18 17:59:33 +01001865In the following :download:`tzinfo_examples.py
1866<../includes/tzinfo_examples.py>` file there are some examples of
1867:class:`tzinfo` classes:
Georg Brandl116aa622007-08-15 14:28:22 +00001868
Marco Buttu909a6f62017-03-18 17:59:33 +01001869.. literalinclude:: ../includes/tzinfo_examples.py
Georg Brandl116aa622007-08-15 14:28:22 +00001870
Georg Brandl116aa622007-08-15 14:28:22 +00001871Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
1872subclass accounting for both standard and daylight time, at the DST transition
1873points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00001874minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
18751:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00001876
1877 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
1878 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
1879 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
1880
1881 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
1882
1883 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
1884
1885When DST starts (the "start" line), the local wall clock leaps from 1:59 to
18863:00. A wall time of the form 2:MM doesn't really make sense on that day, so
1887``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001888begins. For example, at the Spring forward transition of 2016, we get
1889
Marco Buttu909a6f62017-03-18 17:59:33 +01001890 >>> from datetime import datetime, timezone
1891 >>> from tzinfo_examples import HOUR, Eastern
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001892 >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
1893 >>> for i in range(4):
1894 ... u = u0 + i*HOUR
1895 ... t = u.astimezone(Eastern)
1896 ... print(u.time(), 'UTC =', t.time(), t.tzname())
1897 ...
1898 05:00:00 UTC = 00:00:00 EST
1899 06:00:00 UTC = 01:00:00 EST
1900 07:00:00 UTC = 03:00:00 EDT
1901 08:00:00 UTC = 04:00:00 EDT
1902
Georg Brandl116aa622007-08-15 14:28:22 +00001903
1904When DST ends (the "end" line), there's a potentially worse problem: there's an
1905hour that can't be spelled unambiguously in local wall time: the last hour of
1906daylight time. In Eastern, that's times of the form 5:MM UTC on the day
1907daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
1908to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
1909:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
1910hours into the same local hour then. In the Eastern example, UTC times of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001911form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times
1912have the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1.
1913For example, at the Fall back transition of 2016, we get
Georg Brandl116aa622007-08-15 14:28:22 +00001914
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001915 >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
1916 >>> for i in range(4):
1917 ... u = u0 + i*HOUR
1918 ... t = u.astimezone(Eastern)
1919 ... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
1920 ...
1921 04:00:00 UTC = 00:00:00 EDT 0
1922 05:00:00 UTC = 01:00:00 EDT 0
1923 06:00:00 UTC = 01:00:00 EST 1
1924 07:00:00 UTC = 02:00:00 EST 0
1925
1926Note that the :class:`datetime` instances that differ only by the value of the
1927:attr:`~datetime.fold` attribute are considered equal in comparisons.
1928
1929Applications that can't bear wall-time ambiguities should explicitly check the
Raymond Hettinger15f44ab2016-08-30 10:47:49 -07001930value of the :attr:`~datetime.fold` attribute or avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001931:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
1932or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
1933only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
1934
Sandro Tosid11d0d62012-04-24 19:46:06 +02001935.. seealso::
1936
wim glenn53f2af12017-06-06 12:54:41 -05001937 `dateutil.tz <https://dateutil.readthedocs.io/en/stable/tz.html>`_
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001938 The standard library has :class:`timezone` class for handling arbitrary
1939 fixed offsets from UTC and :attr:`timezone.utc` as UTC timezone instance.
Sandro Tosid11d0d62012-04-24 19:46:06 +02001940
wim glenn53f2af12017-06-06 12:54:41 -05001941 *dateutil.tz* library brings the *IANA timezone database* (also known as the
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001942 Olson database) to Python and its usage is recommended.
Sandro Tosi100b8892012-04-28 11:19:37 +02001943
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03001944 `IANA timezone database <https://www.iana.org/time-zones>`_
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001945 The Time Zone Database (often called tz, tzdata or zoneinfo) contains code and
Sandro Tosi100b8892012-04-28 11:19:37 +02001946 data that represent the history of local time for many representative
1947 locations around the globe. It is updated periodically to reflect changes
1948 made by political bodies to time zone boundaries, UTC offsets, and
1949 daylight-saving rules.
Sandro Tosid11d0d62012-04-24 19:46:06 +02001950
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001951
1952.. _datetime-timezone:
1953
1954:class:`timezone` Objects
1955--------------------------
1956
Alexander Belopolsky6d3c9a62011-05-04 10:28:26 -04001957The :class:`timezone` class is a subclass of :class:`tzinfo`, each
1958instance of which represents a timezone defined by a fixed offset from
1959UTC. Note that objects of this class cannot be used to represent
1960timezone information in the locations where different offsets are used
1961in different days of the year or where historical changes have been
1962made to civil time.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001963
1964
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001965.. class:: timezone(offset, name=None)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001966
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001967 The *offset* argument must be specified as a :class:`timedelta`
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001968 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001969 be strictly between ``-timedelta(hours=24)`` and
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001970 ``timedelta(hours=24)``, otherwise :exc:`ValueError` is raised.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001971
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001972 The *name* argument is optional. If specified it must be a string that
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001973 will be used as the value returned by the :meth:`datetime.tzname` method.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001974
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001975 .. versionadded:: 3.2
1976
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001977 .. versionchanged:: 3.7
1978 The UTC offset is not restricted to a whole number of minutes.
1979
1980
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001981.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001982
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001983 Return the fixed value specified when the :class:`timezone` instance is
1984 constructed. The *dt* argument is ignored. The return value is a
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001985 :class:`timedelta` instance equal to the difference between the
1986 local time and UTC.
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
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001991.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001992
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001993 Return the fixed value specified when the :class:`timezone` instance
1994 is constructed. If *name* is not provided in the constructor, the
1995 name returned by ``tzname(dt)`` is generated from the value of the
1996 ``offset`` as follows. If *offset* is ``timedelta(0)``, the name
1997 is "UTC", otherwise it is a string 'UTC±HH:MM', where ± is the sign
1998 of ``offset``, HH and MM are two digits of ``offset.hours`` and
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001999 ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002000
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002001 .. versionchanged:: 3.6
Berker Peksagdf326eb2015-09-09 18:32:50 +03002002 Name generated from ``offset=timedelta(0)`` is now plain 'UTC', not
2003 'UTC+00:00'.
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04002004
2005
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002006.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002007
2008 Always returns ``None``.
2009
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002010.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002011
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002012 Return ``dt + offset``. The *dt* argument must be an aware
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002013 :class:`.datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00002014
2015Class attributes:
2016
2017.. attribute:: timezone.utc
2018
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002019 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00002020
Georg Brandl116aa622007-08-15 14:28:22 +00002021
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002022.. index::
Serhiy Storchaka913876d2018-10-28 13:41:26 +02002023 single: % (percent); datetime format
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03002024
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002025.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00002026
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002027:meth:`strftime` and :meth:`strptime` Behavior
2028----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00002029
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002030:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a
Georg Brandl116aa622007-08-15 14:28:22 +00002031``strftime(format)`` method, to create a string representing the time under the
2032control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
2033acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
2034although not all objects support a :meth:`timetuple` method.
2035
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002036Conversely, the :meth:`datetime.strptime` class method creates a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002037:class:`.datetime` object from a string representing a date and time and a
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002038corresponding format string. ``datetime.strptime(date_string, format)`` is
Gus Goulartc0799ec2018-10-29 08:49:52 -03002039equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``, except
2040when the format includes sub-second components or timezone offset information,
2041which are supported in ``datetime.strptime`` but are discarded by ``time.strptime``.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002042
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002043For :class:`.time` objects, the format codes for year, month, and day should not
Georg Brandl116aa622007-08-15 14:28:22 +00002044be used, as time objects have no such values. If they're used anyway, ``1900``
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002045is substituted for the year, and ``1`` for the month and day.
Georg Brandl116aa622007-08-15 14:28:22 +00002046
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002047For :class:`date` objects, the format codes for hours, minutes, seconds, and
2048microseconds should not be used, as :class:`date` objects have no such
2049values. If they're used anyway, ``0`` is substituted for them.
2050
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302051For the :meth:`datetime.strptime` class method, the default value is ``1900-01-01T00:00:00.000``:
2052any components not specified in the format string will be pulled from the default value. [#]_
2053
Georg Brandl116aa622007-08-15 14:28:22 +00002054The full set of format codes supported varies across platforms, because Python
2055calls the platform C library's :func:`strftime` function, and platform
Georg Brandlb7117af2013-10-13 18:28:25 +02002056variations are common. To see the full set of format codes supported on your
2057platform, consult the :manpage:`strftime(3)` documentation.
Christian Heimes895627f2007-12-08 17:28:33 +00002058
Alexey Izbyshev1cffd0e2019-01-13 00:21:54 +07002059For the same reason, handling of format strings containing Unicode code points
2060that can't be represented in the charset of the current locale is also
2061platform-dependent. On some platforms such code points are preserved intact in
2062the output, while on others ``strftime`` may raise :exc:`UnicodeError` or return
2063an empty string instead.
2064
Christian Heimes895627f2007-12-08 17:28:33 +00002065The following is a list of all the format codes that the C standard (1989
2066version) requires, and these work on all platforms with a standard C
2067implementation. Note that the 1999 version of the C standard added additional
2068format codes.
Georg Brandl116aa622007-08-15 14:28:22 +00002069
David Wolever569a5fa2013-08-12 16:56:02 -04002070+-----------+--------------------------------+------------------------+-------+
2071| Directive | Meaning | Example | Notes |
2072+===========+================================+========================+=======+
2073| ``%a`` | Weekday as locale's || Sun, Mon, ..., Sat | \(1) |
2074| | abbreviated name. | (en_US); | |
2075| | || So, Mo, ..., Sa | |
2076| | | (de_DE) | |
2077+-----------+--------------------------------+------------------------+-------+
2078| ``%A`` | Weekday as locale's full name. || Sunday, Monday, ..., | \(1) |
2079| | | Saturday (en_US); | |
2080| | || Sonntag, Montag, ..., | |
2081| | | Samstag (de_DE) | |
2082+-----------+--------------------------------+------------------------+-------+
2083| ``%w`` | Weekday as a decimal number, | 0, 1, ..., 6 | |
2084| | where 0 is Sunday and 6 is | | |
2085| | Saturday. | | |
2086+-----------+--------------------------------+------------------------+-------+
2087| ``%d`` | Day of the month as a | 01, 02, ..., 31 | |
2088| | zero-padded decimal number. | | |
2089+-----------+--------------------------------+------------------------+-------+
2090| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
2091| | name. | (en_US); | |
2092| | || Jan, Feb, ..., Dez | |
2093| | | (de_DE) | |
2094+-----------+--------------------------------+------------------------+-------+
2095| ``%B`` | Month as locale's full name. || January, February, | \(1) |
2096| | | ..., December (en_US);| |
2097| | || Januar, Februar, ..., | |
2098| | | Dezember (de_DE) | |
2099+-----------+--------------------------------+------------------------+-------+
2100| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | |
2101| | decimal number. | | |
2102+-----------+--------------------------------+------------------------+-------+
2103| ``%y`` | Year without century as a | 00, 01, ..., 99 | |
2104| | zero-padded decimal number. | | |
2105+-----------+--------------------------------+------------------------+-------+
2106| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
David Wolever5d07e702013-08-14 14:41:48 -04002107| | number. | 2014, ..., 9998, 9999 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002108+-----------+--------------------------------+------------------------+-------+
2109| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | |
2110| | zero-padded decimal number. | | |
2111+-----------+--------------------------------+------------------------+-------+
2112| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | |
2113| | zero-padded decimal number. | | |
2114+-----------+--------------------------------+------------------------+-------+
2115| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
2116| | AM or PM. || am, pm (de_DE) | \(3) |
2117+-----------+--------------------------------+------------------------+-------+
2118| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | |
2119| | decimal number. | | |
2120+-----------+--------------------------------+------------------------+-------+
2121| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4) |
2122| | decimal number. | | |
2123+-----------+--------------------------------+------------------------+-------+
2124| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
2125| | number, zero-padded on the | 999999 | |
2126| | left. | | |
2127+-----------+--------------------------------+------------------------+-------+
Christophe Nanteuil92878822018-10-06 00:57:02 +02002128| ``%z`` | UTC offset in the form | (empty), +0000, | \(6) |
2129| | ±HHMM[SS[.ffffff]] (empty | -0400, +1030, | |
2130| | string if the object is | +063415, | |
2131| | naive). | -030712.345216 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002132+-----------+--------------------------------+------------------------+-------+
2133| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | |
2134| | if the object is naive). | | |
2135+-----------+--------------------------------+------------------------+-------+
2136| ``%j`` | Day of the year as a | 001, 002, ..., 366 | |
2137| | zero-padded decimal number. | | |
2138+-----------+--------------------------------+------------------------+-------+
2139| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7) |
2140| | (Sunday as the first day of | | |
2141| | the week) as a zero padded | | |
2142| | decimal number. All days in a | | |
2143| | new year preceding the first | | |
2144| | Sunday are considered to be in | | |
2145| | week 0. | | |
2146+-----------+--------------------------------+------------------------+-------+
2147| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7) |
2148| | (Monday as the first day of | | |
2149| | the week) as a decimal number. | | |
2150| | All days in a new year | | |
2151| | preceding the first Monday | | |
2152| | are considered to be in | | |
2153| | week 0. | | |
2154+-----------+--------------------------------+------------------------+-------+
2155| ``%c`` | Locale's appropriate date and || Tue Aug 16 21:30:00 | \(1) |
2156| | time representation. | 1988 (en_US); | |
2157| | || Di 16 Aug 21:30:00 | |
2158| | | 1988 (de_DE) | |
2159+-----------+--------------------------------+------------------------+-------+
2160| ``%x`` | Locale's appropriate date || 08/16/88 (None); | \(1) |
2161| | representation. || 08/16/1988 (en_US); | |
2162| | || 16.08.1988 (de_DE) | |
2163+-----------+--------------------------------+------------------------+-------+
2164| ``%X`` | Locale's appropriate time || 21:30:00 (en_US); | \(1) |
2165| | representation. || 21:30:00 (de_DE) | |
2166+-----------+--------------------------------+------------------------+-------+
2167| ``%%`` | A literal ``'%'`` character. | % | |
2168+-----------+--------------------------------+------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00002169
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002170Several additional directives not required by the C89 standard are included for
2171convenience. These parameters all correspond to ISO 8601 date values. These
2172may not be available on all platforms when used with the :meth:`strftime`
2173method. The ISO 8601 year and ISO 8601 week directives are not interchangeable
2174with the year and week number directives above. Calling :meth:`strptime` with
2175incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
2176
2177+-----------+--------------------------------+------------------------+-------+
2178| Directive | Meaning | Example | Notes |
2179+===========+================================+========================+=======+
2180| ``%G`` | ISO 8601 year with century | 0001, 0002, ..., 2013, | \(8) |
2181| | representing the year that | 2014, ..., 9998, 9999 | |
2182| | contains the greater part of | | |
2183| | the ISO week (``%V``). | | |
2184+-----------+--------------------------------+------------------------+-------+
2185| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
2186| | number where 1 is Monday. | | |
2187+-----------+--------------------------------+------------------------+-------+
2188| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8) |
2189| | number with Monday as | | |
2190| | the first day of the week. | | |
2191| | Week 01 is the week containing | | |
2192| | Jan 4. | | |
2193+-----------+--------------------------------+------------------------+-------+
2194
2195.. versionadded:: 3.6
2196 ``%G``, ``%u`` and ``%V`` were added.
2197
Christian Heimes895627f2007-12-08 17:28:33 +00002198Notes:
2199
2200(1)
David Wolever569a5fa2013-08-12 16:56:02 -04002201 Because the format depends on the current locale, care should be taken when
2202 making assumptions about the output value. Field orderings will vary (for
2203 example, "month/day/year" versus "day/month/year"), and the output may
2204 contain Unicode characters encoded using the locale's default encoding (for
Georg Brandlad321532013-10-29 08:05:10 +01002205 example, if the current locale is ``ja_JP``, the default encoding could be
David Wolever569a5fa2013-08-12 16:56:02 -04002206 any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale`
2207 to determine the current locale's encoding).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002208
2209(2)
David Wolever569a5fa2013-08-12 16:56:02 -04002210 The :meth:`strptime` method can parse years in the full [1, 9999] range, but
2211 years < 1000 must be zero-filled to 4-digit width.
Alexander Belopolsky085556a2011-01-10 23:28:33 +00002212
2213 .. versionchanged:: 3.2
2214 In previous versions, :meth:`strftime` method was restricted to
2215 years >= 1900.
2216
Alexander Belopolsky5611a1c2011-05-02 14:14:48 -04002217 .. versionchanged:: 3.3
2218 In version 3.2, :meth:`strftime` method was restricted to
2219 years >= 1000.
2220
David Wolever569a5fa2013-08-12 16:56:02 -04002221(3)
2222 When used with the :meth:`strptime` method, the ``%p`` directive only affects
2223 the output hour field if the ``%I`` directive is used to parse the hour.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00002224
David Wolever569a5fa2013-08-12 16:56:02 -04002225(4)
2226 Unlike the :mod:`time` module, the :mod:`datetime` module does not support
2227 leap seconds.
2228
2229(5)
2230 When used with the :meth:`strptime` method, the ``%f`` directive
2231 accepts from one to six digits and zero pads on the right. ``%f`` is
2232 an extension to the set of format characters in the C standard (but
2233 implemented separately in datetime objects, and therefore always
2234 available).
2235
2236(6)
2237 For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
2238 strings.
2239
2240 For an aware object:
2241
2242 ``%z``
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002243 :meth:`utcoffset` is transformed into a string of the form
Christophe Nanteuil92878822018-10-06 00:57:02 +02002244 ±HHMM[SS[.ffffff]], where HH is a 2-digit string giving the number of UTC
2245 offset hours, MM is a 2-digit string giving the number of UTC offset
Serhiy Storchakabac2d5b2018-03-28 22:14:26 +03002246 minutes, SS is a 2-digit string giving the number of UTC offset
Christophe Nanteuil92878822018-10-06 00:57:02 +02002247 seconds and ffffff is a 6-digit string giving the number of UTC
2248 offset microseconds. The ffffff part is omitted when the offset is a
2249 whole number of seconds and both the ffffff and the SS part is omitted
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002250 when the offset is a whole number of minutes. For example, if
2251 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
2252 replaced with the string ``'-0330'``.
2253
2254 .. versionchanged:: 3.7
2255 The UTC offset is not restricted to a whole number of minutes.
David Wolever569a5fa2013-08-12 16:56:02 -04002256
Mario Corchero32318932017-10-26 01:35:41 +01002257 .. versionchanged:: 3.7
2258 When the ``%z`` directive is provided to the :meth:`strptime` method,
2259 the UTC offsets can have a colon as a separator between hours, minutes
2260 and seconds.
2261 For example, ``'+01:00:00'`` will be parsed as an offset of one hour.
2262 In addition, providing ``'Z'`` is identical to ``'+00:00'``.
2263
David Wolever569a5fa2013-08-12 16:56:02 -04002264 ``%Z``
2265 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty
2266 string. Otherwise ``%Z`` is replaced by the returned value, which must
2267 be a string.
2268
2269 .. versionchanged:: 3.2
2270 When the ``%z`` directive is provided to the :meth:`strptime` method, an
2271 aware :class:`.datetime` object will be produced. The ``tzinfo`` of the
2272 result will be set to a :class:`timezone` instance.
2273
2274(7)
2275 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002276 in calculations when the day of the week and the calendar year (``%Y``)
2277 are specified.
2278
2279(8)
2280 Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the
2281 day of the week and the ISO year (``%G``) are specified in a
2282 :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
Martin Panterf1579822016-05-26 06:03:33 +00002283 interchangeable.
R David Murray9075d8b2012-05-14 22:14:46 -04002284
2285.. rubric:: Footnotes
2286
2287.. [#] If, that is, we ignore the effects of Relativity
Abhishek Kumar Singh56027cc2019-05-19 02:06:19 +05302288.. [#] Passing ``datetime.strptime('Feb 29', '%b %d')`` will fail since ``1900`` is not a leap year.