blob: 53c181c4014a9c6157ff21b33d89a222b4f607e2 [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+--------------------------------+-----------------------------------------------+
Mark Dickinson7c186e22010-04-20 22:32:49 +0000257| ``f = t2 / t3`` | Division (3) of *t2* by *t3*. Returns a |
258| | :class:`float` object. |
259+--------------------------------+-----------------------------------------------+
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000260| ``t1 = t2 / f or t1 = t2 / i`` | Delta divided by a float or an int. The result|
261| | is rounded to the nearest multiple of |
262| | timedelta.resolution using round-half-to-even.|
263+--------------------------------+-----------------------------------------------+
Mark Dickinson7c186e22010-04-20 22:32:49 +0000264| ``t1 = t2 // i`` or | The floor is computed and the remainder (if |
265| ``t1 = t2 // t3`` | any) is thrown away. In the second case, an |
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000266| | integer is returned. (3) |
Mark Dickinson7c186e22010-04-20 22:32:49 +0000267+--------------------------------+-----------------------------------------------+
268| ``t1 = t2 % t3`` | The remainder is computed as a |
269| | :class:`timedelta` object. (3) |
270+--------------------------------+-----------------------------------------------+
271| ``q, r = divmod(t1, t2)`` | Computes the quotient and the remainder: |
272| | ``q = t1 // t2`` (3) and ``r = t1 % t2``. |
273| | q is an integer and r is a :class:`timedelta` |
274| | object. |
Georg Brandl116aa622007-08-15 14:28:22 +0000275+--------------------------------+-----------------------------------------------+
276| ``+t1`` | Returns a :class:`timedelta` object with the |
277| | same value. (2) |
278+--------------------------------+-----------------------------------------------+
279| ``-t1`` | equivalent to :class:`timedelta`\ |
280| | (-*t1.days*, -*t1.seconds*, |
281| | -*t1.microseconds*), and to *t1*\* -1. (1)(4) |
282+--------------------------------+-----------------------------------------------+
Georg Brandl495f7b52009-10-27 15:28:25 +0000283| ``abs(t)`` | equivalent to +\ *t* when ``t.days >= 0``, and|
Georg Brandl116aa622007-08-15 14:28:22 +0000284| | to -*t* when ``t.days < 0``. (2) |
285+--------------------------------+-----------------------------------------------+
Georg Brandlf55c3152010-07-31 11:40:07 +0000286| ``str(t)`` | Returns a string in the form |
287| | ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D |
288| | is negative for negative ``t``. (5) |
289+--------------------------------+-----------------------------------------------+
Utkarsh Upadhyaycc5a65c2017-07-25 23:51:33 +0200290| ``repr(t)`` | Returns a string representation of the |
291| | :class:`timedelta` object as a constructor |
292| | call with canonical attribute values. |
Georg Brandlf55c3152010-07-31 11:40:07 +0000293+--------------------------------+-----------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000294
Utkarsh Upadhyaycc5a65c2017-07-25 23:51:33 +0200295
Georg Brandl116aa622007-08-15 14:28:22 +0000296Notes:
297
298(1)
299 This is exact, but may overflow.
300
301(2)
302 This is exact, and cannot overflow.
303
304(3)
305 Division by 0 raises :exc:`ZeroDivisionError`.
306
307(4)
308 -*timedelta.max* is not representable as a :class:`timedelta` object.
309
Georg Brandlf55c3152010-07-31 11:40:07 +0000310(5)
311 String representations of :class:`timedelta` objects are normalized
312 similarly to their internal representation. This leads to somewhat
313 unusual results for negative timedeltas. For example:
314
315 >>> timedelta(hours=-5)
Utkarsh Upadhyay8e453182017-07-28 14:42:56 +0200316 datetime.timedelta(days=-1, seconds=68400)
Georg Brandlf55c3152010-07-31 11:40:07 +0000317 >>> print(_)
318 -1 day, 19:00:00
319
Farhaan Bukhsh5b6e49a2018-07-05 00:12:05 +0530320(6)
321 The expression ``t2 - t3`` will always be equal to the expression ``t2 + (-t3)`` except
322 when t3 is equal to ``timedelta.max``; in that case the former will produce a result
323 while the latter will overflow.
324
Georg Brandl116aa622007-08-15 14:28:22 +0000325In addition to the operations listed above :class:`timedelta` objects support
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300326certain additions and subtractions with :class:`date` and :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +0000327objects (see below).
328
Georg Brandl67b21b72010-08-17 15:07:14 +0000329.. versionchanged:: 3.2
330 Floor division and true division of a :class:`timedelta` object by another
331 :class:`timedelta` object are now supported, as are remainder operations and
332 the :func:`divmod` function. True division and multiplication of a
333 :class:`timedelta` object by a :class:`float` object are now supported.
Mark Dickinson7c186e22010-04-20 22:32:49 +0000334
335
Georg Brandl116aa622007-08-15 14:28:22 +0000336Comparisons of :class:`timedelta` objects are supported with the
337:class:`timedelta` object representing the smaller duration considered to be the
338smaller timedelta. In order to stop mixed-type comparisons from falling back to
339the default comparison by object address, when a :class:`timedelta` object is
340compared to an object of a different type, :exc:`TypeError` is raised unless the
341comparison is ``==`` or ``!=``. The latter cases return :const:`False` or
342:const:`True`, respectively.
343
Guido van Rossum2cc30da2007-11-02 23:46:40 +0000344:class:`timedelta` objects are :term:`hashable` (usable as dictionary keys), support
Georg Brandl116aa622007-08-15 14:28:22 +0000345efficient pickling, and in Boolean contexts, a :class:`timedelta` object is
346considered to be true if and only if it isn't equal to ``timedelta(0)``.
347
Antoine Pitroube6859d2009-11-25 23:02:32 +0000348Instance methods:
349
350.. method:: timedelta.total_seconds()
351
352 Return the total number of seconds contained in the duration. Equivalent to
Mark Dickinson0381e3f2010-05-08 14:35:02 +0000353 ``td / timedelta(seconds=1)``.
354
355 Note that for very large time intervals (greater than 270 years on
356 most platforms) this method will lose microsecond accuracy.
Antoine Pitroube6859d2009-11-25 23:02:32 +0000357
358 .. versionadded:: 3.2
359
360
Christian Heimesfe337bf2008-03-23 21:54:12 +0000361Example usage:
Georg Brandl48310cd2009-01-03 21:18:54 +0000362
Christian Heimes895627f2007-12-08 17:28:33 +0000363 >>> from datetime import timedelta
364 >>> year = timedelta(days=365)
Georg Brandl48310cd2009-01-03 21:18:54 +0000365 >>> another_year = timedelta(weeks=40, days=84, hours=23,
Christian Heimes895627f2007-12-08 17:28:33 +0000366 ... minutes=50, seconds=600) # adds up to 365 days
Antoine Pitroube6859d2009-11-25 23:02:32 +0000367 >>> year.total_seconds()
368 31536000.0
Christian Heimes895627f2007-12-08 17:28:33 +0000369 >>> year == another_year
370 True
371 >>> ten_years = 10 * year
372 >>> ten_years, ten_years.days // 365
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +0200373 (datetime.timedelta(days=3650), 10)
Christian Heimes895627f2007-12-08 17:28:33 +0000374 >>> nine_years = ten_years - year
375 >>> nine_years, nine_years.days // 365
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +0200376 (datetime.timedelta(days=3285), 9)
delirious-lettucec7b3f0f2017-05-18 19:01:00 -0600377 >>> three_years = nine_years // 3
Christian Heimes895627f2007-12-08 17:28:33 +0000378 >>> three_years, three_years.days // 365
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +0200379 (datetime.timedelta(days=1095), 3)
Christian Heimes895627f2007-12-08 17:28:33 +0000380 >>> abs(three_years - ten_years) == 2 * three_years + year
381 True
382
Georg Brandl116aa622007-08-15 14:28:22 +0000383
384.. _datetime-date:
385
386:class:`date` Objects
387---------------------
388
389A :class:`date` object represents a date (year, month and day) in an idealized
390calendar, the current Gregorian calendar indefinitely extended in both
391directions. January 1 of year 1 is called day number 1, January 2 of year 1 is
392called day number 2, and so on. This matches the definition of the "proleptic
393Gregorian" calendar in Dershowitz and Reingold's book Calendrical Calculations,
394where it's the base calendar for all computations. See the book for algorithms
395for converting between proleptic Gregorian ordinals and many other calendar
396systems.
397
398
399.. class:: date(year, month, day)
400
Georg Brandl5c106642007-11-29 17:41:05 +0000401 All arguments are required. Arguments may be integers, in the following
Georg Brandl116aa622007-08-15 14:28:22 +0000402 ranges:
403
404 * ``MINYEAR <= year <= MAXYEAR``
405 * ``1 <= month <= 12``
406 * ``1 <= day <= number of days in the given month and year``
407
408 If an argument outside those ranges is given, :exc:`ValueError` is raised.
409
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000410
Georg Brandl116aa622007-08-15 14:28:22 +0000411Other constructors, all class methods:
412
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000413.. classmethod:: date.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000414
415 Return the current local date. This is equivalent to
416 ``date.fromtimestamp(time.time())``.
417
418
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000419.. classmethod:: date.fromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000420
421 Return the local date corresponding to the POSIX timestamp, such as is returned
Victor Stinner5d272cc2012-03-13 13:35:55 +0100422 by :func:`time.time`. This may raise :exc:`OverflowError`, if the timestamp is out
Victor Stinnerecc6e662012-03-14 00:39:29 +0100423 of the range of values supported by the platform C :c:func:`localtime` function,
424 and :exc:`OSError` on :c:func:`localtime` failure.
Georg Brandl116aa622007-08-15 14:28:22 +0000425 It's common for this to be restricted to years from 1970 through 2038. Note
426 that on non-POSIX systems that include leap seconds in their notion of a
427 timestamp, leap seconds are ignored by :meth:`fromtimestamp`.
428
Victor Stinner5d272cc2012-03-13 13:35:55 +0100429 .. versionchanged:: 3.3
430 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
431 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100432 :c:func:`localtime` function. Raise :exc:`OSError` instead of
433 :exc:`ValueError` on :c:func:`localtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100434
Georg Brandl116aa622007-08-15 14:28:22 +0000435
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000436.. classmethod:: date.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000437
438 Return the date corresponding to the proleptic Gregorian ordinal, where January
439 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 <= ordinal <=
440 date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) ==
441 d``.
442
Georg Brandl116aa622007-08-15 14:28:22 +0000443
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500444.. classmethod:: date.fromisoformat(date_string)
445
446 Return a :class:`date` corresponding to a *date_string* in the format emitted
447 by :meth:`date.isoformat`. Specifically, this function supports strings in
448 the format(s) ``YYYY-MM-DD``.
449
450 .. caution::
451
452 This does not support parsing arbitrary ISO 8601 strings - it is only intended
453 as the inverse operation of :meth:`date.isoformat`.
454
455 .. versionadded:: 3.7
456
457
458
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000459Class attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000460
461.. attribute:: date.min
462
463 The earliest representable date, ``date(MINYEAR, 1, 1)``.
464
465
466.. attribute:: date.max
467
468 The latest representable date, ``date(MAXYEAR, 12, 31)``.
469
470
471.. attribute:: date.resolution
472
473 The smallest possible difference between non-equal date objects,
474 ``timedelta(days=1)``.
475
Georg Brandl116aa622007-08-15 14:28:22 +0000476
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000477Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000478
479.. attribute:: date.year
480
481 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
482
483
484.. attribute:: date.month
485
486 Between 1 and 12 inclusive.
487
488
489.. attribute:: date.day
490
491 Between 1 and the number of days in the given month of the given year.
492
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000493
Georg Brandl116aa622007-08-15 14:28:22 +0000494Supported operations:
495
496+-------------------------------+----------------------------------------------+
497| Operation | Result |
498+===============================+==============================================+
499| ``date2 = date1 + timedelta`` | *date2* is ``timedelta.days`` days removed |
500| | from *date1*. (1) |
501+-------------------------------+----------------------------------------------+
502| ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 + |
503| | timedelta == date1``. (2) |
504+-------------------------------+----------------------------------------------+
505| ``timedelta = date1 - date2`` | \(3) |
506+-------------------------------+----------------------------------------------+
507| ``date1 < date2`` | *date1* is considered less than *date2* when |
508| | *date1* precedes *date2* in time. (4) |
509+-------------------------------+----------------------------------------------+
510
511Notes:
512
513(1)
514 *date2* is moved forward in time if ``timedelta.days > 0``, or backward if
515 ``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``.
516 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
517 :exc:`OverflowError` is raised if ``date2.year`` would be smaller than
518 :const:`MINYEAR` or larger than :const:`MAXYEAR`.
519
520(2)
Georg Brandl116aa622007-08-15 14:28:22 +0000521 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
522
523(3)
524 This is exact, and cannot overflow. timedelta.seconds and
525 timedelta.microseconds are 0, and date2 + timedelta == date1 after.
526
527(4)
528 In other words, ``date1 < date2`` if and only if ``date1.toordinal() <
529 date2.toordinal()``. In order to stop comparison from falling back to the
530 default scheme of comparing object addresses, date comparison normally raises
531 :exc:`TypeError` if the other comparand isn't also a :class:`date` object.
532 However, ``NotImplemented`` is returned instead if the other comparand has a
533 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
534 chance at implementing mixed-type comparison. If not, when a :class:`date`
535 object is compared to an object of a different type, :exc:`TypeError` is raised
536 unless the comparison is ``==`` or ``!=``. The latter cases return
537 :const:`False` or :const:`True`, respectively.
538
539Dates can be used as dictionary keys. In Boolean contexts, all :class:`date`
540objects are considered to be true.
541
542Instance methods:
543
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400544.. method:: date.replace(year=self.year, month=self.month, day=self.day)
Georg Brandl116aa622007-08-15 14:28:22 +0000545
Senthil Kumarana6bac952011-07-04 11:28:30 -0700546 Return a date with the same value, except for those parameters given new
547 values by whichever keyword arguments are specified. For example, if ``d ==
548 date(2002, 12, 31)``, then ``d.replace(day=26) == date(2002, 12, 26)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000549
550
551.. method:: date.timetuple()
552
553 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
554 The hours, minutes and seconds are 0, and the DST flag is -1. ``d.timetuple()``
555 is equivalent to ``time.struct_time((d.year, d.month, d.day, 0, 0, 0,
Alexander Belopolsky64912482010-06-08 18:59:20 +0000556 d.weekday(), yday, -1))``, where ``yday = d.toordinal() - date(d.year, 1,
557 1).toordinal() + 1`` is the day number within the current year starting with
558 ``1`` for January 1st.
Georg Brandl116aa622007-08-15 14:28:22 +0000559
560
561.. method:: date.toordinal()
562
563 Return the proleptic Gregorian ordinal of the date, where January 1 of year 1
564 has ordinal 1. For any :class:`date` object *d*,
565 ``date.fromordinal(d.toordinal()) == d``.
566
567
568.. method:: date.weekday()
569
570 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
571 For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also
572 :meth:`isoweekday`.
573
574
575.. method:: date.isoweekday()
576
577 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
578 For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also
579 :meth:`weekday`, :meth:`isocalendar`.
580
581
582.. method:: date.isocalendar()
583
584 Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
585
586 The ISO calendar is a widely used variant of the Gregorian calendar. See
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300587 https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm for a good
Mark Dickinsonf964ac22009-11-03 16:29:10 +0000588 explanation.
Georg Brandl116aa622007-08-15 14:28:22 +0000589
590 The ISO year consists of 52 or 53 full weeks, and where a week starts on a
591 Monday and ends on a Sunday. The first week of an ISO year is the first
592 (Gregorian) calendar week of a year containing a Thursday. This is called week
593 number 1, and the ISO year of that Thursday is the same as its Gregorian year.
594
595 For example, 2004 begins on a Thursday, so the first week of ISO year 2004
596 begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004, so that
597 ``date(2003, 12, 29).isocalendar() == (2004, 1, 1)`` and ``date(2004, 1,
598 4).isocalendar() == (2004, 1, 7)``.
599
600
601.. method:: date.isoformat()
602
603 Return a string representing the date in ISO 8601 format, 'YYYY-MM-DD'. For
604 example, ``date(2002, 12, 4).isoformat() == '2002-12-04'``.
605
606
607.. method:: date.__str__()
608
609 For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``.
610
611
612.. method:: date.ctime()
613
614 Return a string representing the date, for example ``date(2002, 12,
615 4).ctime() == 'Wed Dec 4 00:00:00 2002'``. ``d.ctime()`` is equivalent to
616 ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the native C
Georg Brandl60203b42010-10-06 10:11:56 +0000617 :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +0000618 :meth:`date.ctime` does not invoke) conforms to the C standard.
619
620
621.. method:: date.strftime(format)
622
623 Return a string representing the date, controlled by an explicit format string.
David Wolever569a5fa2013-08-12 16:56:02 -0400624 Format codes referring to hours, minutes or seconds will see 0 values. For a
625 complete list of formatting directives, see
626 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000627
Georg Brandl116aa622007-08-15 14:28:22 +0000628
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300629.. method:: date.__format__(format)
630
Martin Panterd5db1472016-02-08 01:34:09 +0000631 Same as :meth:`.date.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +0000632 string for a :class:`.date` object in :ref:`formatted string
633 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -0400634 complete list of formatting directives, see
635 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300636
637
Christian Heimes895627f2007-12-08 17:28:33 +0000638Example of counting days to an event::
639
640 >>> import time
641 >>> from datetime import date
642 >>> today = date.today()
643 >>> today
644 datetime.date(2007, 12, 5)
645 >>> today == date.fromtimestamp(time.time())
646 True
647 >>> my_birthday = date(today.year, 6, 24)
648 >>> if my_birthday < today:
Georg Brandl48310cd2009-01-03 21:18:54 +0000649 ... my_birthday = my_birthday.replace(year=today.year + 1)
Christian Heimes895627f2007-12-08 17:28:33 +0000650 >>> my_birthday
651 datetime.date(2008, 6, 24)
Georg Brandl48310cd2009-01-03 21:18:54 +0000652 >>> time_to_birthday = abs(my_birthday - today)
Christian Heimes895627f2007-12-08 17:28:33 +0000653 >>> time_to_birthday.days
654 202
655
Christian Heimesfe337bf2008-03-23 21:54:12 +0000656Example of working with :class:`date`:
657
658.. doctest::
Christian Heimes895627f2007-12-08 17:28:33 +0000659
660 >>> from datetime import date
661 >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
662 >>> d
663 datetime.date(2002, 3, 11)
664 >>> t = d.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000665 >>> for i in t: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000666 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000667 2002 # year
668 3 # month
669 11 # day
670 0
671 0
672 0
673 0 # weekday (0 = Monday)
674 70 # 70th day in the year
675 -1
676 >>> ic = d.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000677 >>> for i in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000678 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000679 2002 # ISO year
680 11 # ISO week number
681 1 # ISO day number ( 1 = Monday )
682 >>> d.isoformat()
683 '2002-03-11'
684 >>> d.strftime("%d/%m/%y")
685 '11/03/02'
686 >>> d.strftime("%A %d. %B %Y")
687 'Monday 11. March 2002'
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300688 >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
689 'The day is 11, the month is March.'
Christian Heimes895627f2007-12-08 17:28:33 +0000690
Georg Brandl116aa622007-08-15 14:28:22 +0000691
692.. _datetime-datetime:
693
Benjamin Petersond87dd432015-04-25 14:15:16 -0400694:class:`.datetime` Objects
695--------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000696
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300697A :class:`.datetime` object is a single object containing all the information
698from a :class:`date` object and a :class:`.time` object. Like a :class:`date`
699object, :class:`.datetime` assumes the current Gregorian calendar extended in
700both directions; like a time object, :class:`.datetime` assumes there are exactly
Georg Brandl116aa622007-08-15 14:28:22 +00007013600\*24 seconds in every day.
702
703Constructor:
704
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400705.. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000706
707 The year, month and day arguments are required. *tzinfo* may be ``None``, or an
Georg Brandl5c106642007-11-29 17:41:05 +0000708 instance of a :class:`tzinfo` subclass. The remaining arguments may be integers,
709 in the following ranges:
Georg Brandl116aa622007-08-15 14:28:22 +0000710
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400711 * ``MINYEAR <= year <= MAXYEAR``,
712 * ``1 <= month <= 12``,
713 * ``1 <= day <= number of days in the given month and year``,
714 * ``0 <= hour < 24``,
715 * ``0 <= minute < 60``,
716 * ``0 <= second < 60``,
717 * ``0 <= microsecond < 1000000``,
718 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +0000719
720 If an argument outside those ranges is given, :exc:`ValueError` is raised.
721
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400722 .. versionadded:: 3.6
723 Added the ``fold`` argument.
724
Georg Brandl116aa622007-08-15 14:28:22 +0000725Other constructors, all class methods:
726
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000727.. classmethod:: datetime.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000728
Martin Panter16c7cfd2016-04-01 21:48:24 +0000729 Return the current local datetime, with :attr:`.tzinfo` ``None``. This is
Georg Brandl116aa622007-08-15 14:28:22 +0000730 equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`,
731 :meth:`fromtimestamp`.
732
733
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000734.. classmethod:: datetime.now(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000735
736 Return the current local date and time. If optional argument *tz* is ``None``
737 or not specified, this is like :meth:`today`, but, if possible, supplies more
738 precision than can be gotten from going through a :func:`time.time` timestamp
739 (for example, this may be possible on platforms supplying the C
Georg Brandl60203b42010-10-06 10:11:56 +0000740 :c:func:`gettimeofday` function).
Georg Brandl116aa622007-08-15 14:28:22 +0000741
Martin Panter16c7cfd2016-04-01 21:48:24 +0000742 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
743 current date and time are converted to *tz*’s time zone. In this case the
Georg Brandl116aa622007-08-15 14:28:22 +0000744 result is equivalent to ``tz.fromutc(datetime.utcnow().replace(tzinfo=tz))``.
745 See also :meth:`today`, :meth:`utcnow`.
746
747
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000748.. classmethod:: datetime.utcnow()
Georg Brandl116aa622007-08-15 14:28:22 +0000749
Martin Panter16c7cfd2016-04-01 21:48:24 +0000750 Return the current UTC date and time, with :attr:`.tzinfo` ``None``. This is like
Georg Brandl116aa622007-08-15 14:28:22 +0000751 :meth:`now`, but returns the current UTC date and time, as a naive
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300752 :class:`.datetime` object. An aware current UTC datetime can be obtained by
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000753 calling ``datetime.now(timezone.utc)``. See also :meth:`now`.
Georg Brandl116aa622007-08-15 14:28:22 +0000754
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000755.. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000756
757 Return the local date and time corresponding to the POSIX timestamp, such as is
758 returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
759 specified, the timestamp is converted to the platform's local date and time, and
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300760 the returned :class:`.datetime` object is naive.
Georg Brandl116aa622007-08-15 14:28:22 +0000761
Martin Panter16c7cfd2016-04-01 21:48:24 +0000762 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
763 timestamp is converted to *tz*’s time zone. In this case the result is
Georg Brandl116aa622007-08-15 14:28:22 +0000764 equivalent to
765 ``tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))``.
766
Victor Stinnerecc6e662012-03-14 00:39:29 +0100767 :meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is out of
Georg Brandl60203b42010-10-06 10:11:56 +0000768 the range of values supported by the platform C :c:func:`localtime` or
Victor Stinnerecc6e662012-03-14 00:39:29 +0100769 :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or
770 :c:func:`gmtime` failure.
771 It's common for this to be restricted to years in
Georg Brandl116aa622007-08-15 14:28:22 +0000772 1970 through 2038. Note that on non-POSIX systems that include leap seconds in
773 their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`,
774 and then it's possible to have two timestamps differing by a second that yield
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300775 identical :class:`.datetime` objects. See also :meth:`utcfromtimestamp`.
Georg Brandl116aa622007-08-15 14:28:22 +0000776
Victor Stinner5d272cc2012-03-13 13:35:55 +0100777 .. versionchanged:: 3.3
778 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
779 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100780 :c:func:`localtime` or :c:func:`gmtime` functions. Raise :exc:`OSError`
781 instead of :exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime`
782 failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100783
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400784 .. versionchanged:: 3.6
785 :meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000786
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000787.. classmethod:: datetime.utcfromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000788
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300789 Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with
Martin Panter16c7cfd2016-04-01 21:48:24 +0000790 :attr:`.tzinfo` ``None``. This may raise :exc:`OverflowError`, if the timestamp is
Victor Stinnerecc6e662012-03-14 00:39:29 +0100791 out of the range of values supported by the platform C :c:func:`gmtime` function,
792 and :exc:`OSError` on :c:func:`gmtime` failure.
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500793 It's common for this to be restricted to years in 1970 through 2038.
Georg Brandl116aa622007-08-15 14:28:22 +0000794
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500795 To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`::
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400796
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500797 datetime.fromtimestamp(timestamp, timezone.utc)
798
799 On the POSIX compliant platforms, it is equivalent to the following
800 expression::
801
802 datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
803
804 except the latter formula always supports the full years range: between
805 :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400806
Victor Stinner5d272cc2012-03-13 13:35:55 +0100807 .. versionchanged:: 3.3
808 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
809 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100810 :c:func:`gmtime` function. Raise :exc:`OSError` instead of
811 :exc:`ValueError` on :c:func:`gmtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100812
Georg Brandl116aa622007-08-15 14:28:22 +0000813
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000814.. classmethod:: datetime.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000815
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300816 Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal,
Georg Brandl116aa622007-08-15 14:28:22 +0000817 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
818 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and
Martin Panter16c7cfd2016-04-01 21:48:24 +0000819 microsecond of the result are all 0, and :attr:`.tzinfo` is ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000820
821
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400822.. classmethod:: datetime.combine(date, time, tzinfo=self.tzinfo)
Georg Brandl116aa622007-08-15 14:28:22 +0000823
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300824 Return a new :class:`.datetime` object whose date components are equal to the
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400825 given :class:`date` object's, and whose time components
826 are equal to the given :class:`.time` object's. If the *tzinfo*
827 argument is provided, its value is used to set the :attr:`.tzinfo` attribute
828 of the result, otherwise the :attr:`~.time.tzinfo` attribute of the *time* argument
829 is used.
830
831 For any :class:`.datetime` object *d*,
832 ``d == datetime.combine(d.date(), d.time(), d.tzinfo)``. If date is a
Martin Panter16c7cfd2016-04-01 21:48:24 +0000833 :class:`.datetime` object, its time components and :attr:`.tzinfo` attributes
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800834 are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000835
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400836 .. versionchanged:: 3.6
837 Added the *tzinfo* argument.
838
Georg Brandl116aa622007-08-15 14:28:22 +0000839
Paul Ganssle09dc2f52017-12-21 00:33:49 -0500840.. classmethod:: datetime.fromisoformat(date_string)
841
842 Return a :class:`datetime` corresponding to a *date_string* in one of the
843 formats emitted by :meth:`date.isoformat` and :meth:`datetime.isoformat`.
844 Specifically, this function supports strings in the format(s)
845 ``YYYY-MM-DD[*HH[:MM[:SS[.mmm[mmm]]]][+HH:MM[:SS[.ffffff]]]]``,
846 where ``*`` can match any single character.
847
848 .. caution::
849
850 This does not support parsing arbitrary ISO 8601 strings - it is only intended
851 as the inverse operation of :meth:`datetime.isoformat`.
852
853 .. versionadded:: 3.7
854
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000855.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +0000856
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300857 Return a :class:`.datetime` corresponding to *date_string*, parsed according to
Georg Brandl116aa622007-08-15 14:28:22 +0000858 *format*. This is equivalent to ``datetime(*(time.strptime(date_string,
859 format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
860 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 -0400861 time tuple. For a complete list of formatting directives, see
862 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000863
Georg Brandl116aa622007-08-15 14:28:22 +0000864
Georg Brandl116aa622007-08-15 14:28:22 +0000865
866Class attributes:
867
Georg Brandl116aa622007-08-15 14:28:22 +0000868.. attribute:: datetime.min
869
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300870 The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1,
Georg Brandl116aa622007-08-15 14:28:22 +0000871 tzinfo=None)``.
872
873
874.. attribute:: datetime.max
875
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300876 The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
Georg Brandl116aa622007-08-15 14:28:22 +0000877 59, 999999, tzinfo=None)``.
878
879
880.. attribute:: datetime.resolution
881
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300882 The smallest possible difference between non-equal :class:`.datetime` objects,
Georg Brandl116aa622007-08-15 14:28:22 +0000883 ``timedelta(microseconds=1)``.
884
Georg Brandl116aa622007-08-15 14:28:22 +0000885
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000886Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000887
888.. attribute:: datetime.year
889
890 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
891
892
893.. attribute:: datetime.month
894
895 Between 1 and 12 inclusive.
896
897
898.. attribute:: datetime.day
899
900 Between 1 and the number of days in the given month of the given year.
901
902
903.. attribute:: datetime.hour
904
905 In ``range(24)``.
906
907
908.. attribute:: datetime.minute
909
910 In ``range(60)``.
911
912
913.. attribute:: datetime.second
914
915 In ``range(60)``.
916
917
918.. attribute:: datetime.microsecond
919
920 In ``range(1000000)``.
921
922
923.. attribute:: datetime.tzinfo
924
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300925 The object passed as the *tzinfo* argument to the :class:`.datetime` constructor,
Georg Brandl116aa622007-08-15 14:28:22 +0000926 or ``None`` if none was passed.
927
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000928
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400929.. attribute:: datetime.fold
930
931 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
932 repeated interval occurs when clocks are rolled back at the end of daylight saving
933 time or when the UTC offset for the current zone is decreased for political reasons.)
934 The value 0 (1) represents the earlier (later) of the two moments with the same wall
935 time representation.
936
937 .. versionadded:: 3.6
938
Georg Brandl116aa622007-08-15 14:28:22 +0000939Supported operations:
940
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300941+---------------------------------------+--------------------------------+
942| Operation | Result |
943+=======================================+================================+
944| ``datetime2 = datetime1 + timedelta`` | \(1) |
945+---------------------------------------+--------------------------------+
946| ``datetime2 = datetime1 - timedelta`` | \(2) |
947+---------------------------------------+--------------------------------+
948| ``timedelta = datetime1 - datetime2`` | \(3) |
949+---------------------------------------+--------------------------------+
950| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
951| | :class:`.datetime`. (4) |
952+---------------------------------------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000953
954(1)
955 datetime2 is a duration of timedelta removed from datetime1, moving forward in
956 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Martin Panter16c7cfd2016-04-01 21:48:24 +0000957 result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and
Senthil Kumarana6bac952011-07-04 11:28:30 -0700958 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
959 datetime2.year would be smaller than :const:`MINYEAR` or larger than
960 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
961 input is an aware object.
Georg Brandl116aa622007-08-15 14:28:22 +0000962
963(2)
964 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Martin Panter16c7cfd2016-04-01 21:48:24 +0000965 addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input
Senthil Kumarana6bac952011-07-04 11:28:30 -0700966 datetime, and no time zone adjustments are done even if the input is aware.
Georg Brandl116aa622007-08-15 14:28:22 +0000967
968(3)
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300969 Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if
Georg Brandl116aa622007-08-15 14:28:22 +0000970 both operands are naive, or if both are aware. If one is aware and the other is
971 naive, :exc:`TypeError` is raised.
972
Martin Panter16c7cfd2016-04-01 21:48:24 +0000973 If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute,
974 the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Georg Brandl116aa622007-08-15 14:28:22 +0000975 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
976 are done in this case.
977
Martin Panter16c7cfd2016-04-01 21:48:24 +0000978 If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
Senthil Kumarana6bac952011-07-04 11:28:30 -0700979 as if *a* and *b* were first converted to naive UTC datetimes first. The
980 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
981 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl116aa622007-08-15 14:28:22 +0000982
983(4)
984 *datetime1* is considered less than *datetime2* when *datetime1* precedes
985 *datetime2* in time.
986
Alexander Belopolsky08313822012-06-15 20:19:47 -0400987 If one comparand is naive and the other is aware, :exc:`TypeError`
988 is raised if an order comparison is attempted. For equality
989 comparisons, naive instances are never equal to aware instances.
990
Martin Panter16c7cfd2016-04-01 21:48:24 +0000991 If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
992 common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
993 compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -0700994 attributes, the comparands are first adjusted by subtracting their UTC
995 offsets (obtained from ``self.utcoffset()``).
Georg Brandl116aa622007-08-15 14:28:22 +0000996
Alexander Belopolsky08313822012-06-15 20:19:47 -0400997 .. versionchanged:: 3.3
Martin Panter16c7cfd2016-04-01 21:48:24 +0000998 Equality comparisons between naive and aware :class:`.datetime`
Éric Araujob0f08952012-06-24 16:22:09 -0400999 instances don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001000
Georg Brandl116aa622007-08-15 14:28:22 +00001001 .. note::
1002
1003 In order to stop comparison from falling back to the default scheme of comparing
1004 object addresses, datetime comparison normally raises :exc:`TypeError` if the
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001005 other comparand isn't also a :class:`.datetime` object. However,
Georg Brandl116aa622007-08-15 14:28:22 +00001006 ``NotImplemented`` is returned instead if the other comparand has a
1007 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001008 chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001009 object is compared to an object of a different type, :exc:`TypeError` is raised
1010 unless the comparison is ``==`` or ``!=``. The latter cases return
1011 :const:`False` or :const:`True`, respectively.
1012
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001013:class:`.datetime` objects can be used as dictionary keys. In Boolean contexts,
1014all :class:`.datetime` objects are considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001015
1016Instance methods:
1017
Georg Brandl116aa622007-08-15 14:28:22 +00001018.. method:: datetime.date()
1019
1020 Return :class:`date` object with same year, month and day.
1021
1022
1023.. method:: datetime.time()
1024
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001025 Return :class:`.time` object with same hour, minute, second, microsecond and fold.
Martin Panter16c7cfd2016-04-01 21:48:24 +00001026 :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`.
Georg Brandl116aa622007-08-15 14:28:22 +00001027
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001028 .. versionchanged:: 3.6
1029 The fold value is copied to the returned :class:`.time` object.
1030
Georg Brandl116aa622007-08-15 14:28:22 +00001031
1032.. method:: datetime.timetz()
1033
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001034 Return :class:`.time` object with same hour, minute, second, microsecond, fold, and
Senthil Kumarana6bac952011-07-04 11:28:30 -07001035 tzinfo attributes. See also method :meth:`time`.
Georg Brandl116aa622007-08-15 14:28:22 +00001036
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001037 .. versionchanged:: 3.6
1038 The fold value is copied to the returned :class:`.time` object.
Georg Brandl116aa622007-08-15 14:28:22 +00001039
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001040
1041.. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \
1042 hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \
1043 tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001044
Senthil Kumarana6bac952011-07-04 11:28:30 -07001045 Return a datetime with the same attributes, except for those attributes given
1046 new values by whichever keyword arguments are specified. Note that
1047 ``tzinfo=None`` can be specified to create a naive datetime from an aware
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001048 datetime with no conversion of date and time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001049
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001050 .. versionadded:: 3.6
1051 Added the ``fold`` argument.
1052
Georg Brandl116aa622007-08-15 14:28:22 +00001053
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001054.. method:: datetime.astimezone(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001055
Martin Panter16c7cfd2016-04-01 21:48:24 +00001056 Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*,
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001057 adjusting the date and time data so the result is the same UTC time as
Senthil Kumarana6bac952011-07-04 11:28:30 -07001058 *self*, but in *tz*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001059
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001060 If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001061 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If *self*
Alexander Belopolsky877b2322018-06-10 17:02:58 -04001062 is naive, it is presumed to represent time in the system timezone.
Georg Brandl116aa622007-08-15 14:28:22 +00001063
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001064 If called without arguments (or with ``tz=None``) the system local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001065 timezone is assumed for the target timezone. The ``.tzinfo`` attribute of the converted
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001066 datetime instance will be set to an instance of :class:`timezone`
1067 with the zone name and offset obtained from the OS.
1068
Georg Brandl116aa622007-08-15 14:28:22 +00001069 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001070 adjustment of date or time data is performed. Else the result is local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001071 time in the timezone *tz*, representing the same UTC time as *self*: after
1072 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have
1073 the same date and time data as ``dt - dt.utcoffset()``.
Georg Brandl116aa622007-08-15 14:28:22 +00001074
1075 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001076 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl116aa622007-08-15 14:28:22 +00001077 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001078 conversion of date and time data, use ``dt.replace(tzinfo=None)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001079
1080 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
1081 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
1082 Ignoring error cases, :meth:`astimezone` acts like::
1083
1084 def astimezone(self, tz):
1085 if self.tzinfo is tz:
1086 return self
1087 # Convert self to UTC, and attach the new time zone object.
1088 utc = (self - self.utcoffset()).replace(tzinfo=tz)
1089 # Convert from UTC to tz's local time.
1090 return tz.fromutc(utc)
1091
Georg Brandlee0be402012-06-26 09:14:40 +02001092 .. versionchanged:: 3.3
1093 *tz* now can be omitted.
1094
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001095 .. versionchanged:: 3.6
1096 The :meth:`astimezone` method can now be called on naive instances that
1097 are presumed to represent system local time.
1098
Georg Brandl116aa622007-08-15 14:28:22 +00001099
1100.. method:: datetime.utcoffset()
1101
Martin Panter16c7cfd2016-04-01 21:48:24 +00001102 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001103 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001104 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1105
1106 .. versionchanged:: 3.7
1107 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001108
1109
1110.. method:: datetime.dst()
1111
Martin Panter16c7cfd2016-04-01 21:48:24 +00001112 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001113 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001114 ``None`` or a :class:`timedelta` object with magnitude less than one day.
1115
1116 .. versionchanged:: 3.7
1117 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001118
1119
1120.. method:: datetime.tzname()
1121
Martin Panter16c7cfd2016-04-01 21:48:24 +00001122 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001123 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
1124 ``None`` or a string object,
1125
1126
1127.. method:: datetime.timetuple()
1128
1129 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
1130 ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day,
Alexander Belopolsky64912482010-06-08 18:59:20 +00001131 d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday =
1132 d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within
1133 the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag
Martin Panter16c7cfd2016-04-01 21:48:24 +00001134 of the result is set according to the :meth:`dst` method: :attr:`.tzinfo` is
Georg Brandl682d7e02010-10-06 10:26:05 +00001135 ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``;
Alexander Belopolsky64912482010-06-08 18:59:20 +00001136 else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``;
Alexander Belopolskyda62f2f2010-06-09 17:11:01 +00001137 else :attr:`tm_isdst` is set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +00001138
1139
1140.. method:: datetime.utctimetuple()
1141
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001142 If :class:`.datetime` instance *d* is naive, this is the same as
Georg Brandl116aa622007-08-15 14:28:22 +00001143 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
1144 ``d.dst()`` returns. DST is never in effect for a UTC time.
1145
1146 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001147 ``d.utcoffset()``, and a :class:`time.struct_time` for the
1148 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
1149 that an :exc:`OverflowError` may be raised if *d*.year was
1150 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +00001151 boundary.
1152
1153
1154.. method:: datetime.toordinal()
1155
1156 Return the proleptic Gregorian ordinal of the date. The same as
1157 ``self.date().toordinal()``.
1158
Alexander Belopolskya4415142012-06-08 12:33:09 -04001159.. method:: datetime.timestamp()
1160
Martin Panter16c7cfd2016-04-01 21:48:24 +00001161 Return POSIX timestamp corresponding to the :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001162 instance. The return value is a :class:`float` similar to that
1163 returned by :func:`time.time`.
1164
Martin Panter16c7cfd2016-04-01 21:48:24 +00001165 Naive :class:`.datetime` instances are assumed to represent local
Alexander Belopolskya4415142012-06-08 12:33:09 -04001166 time and this method relies on the platform C :c:func:`mktime`
Martin Panter16c7cfd2016-04-01 21:48:24 +00001167 function to perform the conversion. Since :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001168 supports wider range of values than :c:func:`mktime` on many
1169 platforms, this method may raise :exc:`OverflowError` for times far
1170 in the past or far in the future.
1171
Martin Panter16c7cfd2016-04-01 21:48:24 +00001172 For aware :class:`.datetime` instances, the return value is computed
Alexander Belopolskya4415142012-06-08 12:33:09 -04001173 as::
1174
1175 (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
1176
1177 .. versionadded:: 3.3
1178
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001179 .. versionchanged:: 3.6
1180 The :meth:`timestamp` method uses the :attr:`.fold` attribute to
1181 disambiguate the times during a repeated interval.
1182
Alexander Belopolskya4415142012-06-08 12:33:09 -04001183 .. note::
1184
1185 There is no method to obtain the POSIX timestamp directly from a
Martin Panter16c7cfd2016-04-01 21:48:24 +00001186 naive :class:`.datetime` instance representing UTC time. If your
Alexander Belopolskya4415142012-06-08 12:33:09 -04001187 application uses this convention and your system timezone is not
1188 set to UTC, you can obtain the POSIX timestamp by supplying
1189 ``tzinfo=timezone.utc``::
1190
1191 timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
1192
1193 or by calculating the timestamp directly::
1194
1195 timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
Georg Brandl116aa622007-08-15 14:28:22 +00001196
1197.. method:: datetime.weekday()
1198
1199 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1200 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1201
1202
1203.. method:: datetime.isoweekday()
1204
1205 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1206 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1207 :meth:`isocalendar`.
1208
1209
1210.. method:: datetime.isocalendar()
1211
1212 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
1213 ``self.date().isocalendar()``.
1214
1215
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001216.. method:: datetime.isoformat(sep='T', timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001217
1218 Return a string representing the date and time in ISO 8601 format,
1219 YYYY-MM-DDTHH:MM:SS.mmmmmm or, if :attr:`microsecond` is 0,
1220 YYYY-MM-DDTHH:MM:SS
1221
1222 If :meth:`utcoffset` does not return ``None``, a 6-character string is
1223 appended, giving the UTC offset in (signed) hours and minutes:
1224 YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM or, if :attr:`microsecond` is 0
1225 YYYY-MM-DDTHH:MM:SS+HH:MM
1226
1227 The optional argument *sep* (default ``'T'``) is a one-character separator,
Christian Heimesfe337bf2008-03-23 21:54:12 +00001228 placed between the date and time portions of the result. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00001229
1230 >>> from datetime import tzinfo, timedelta, datetime
1231 >>> class TZ(tzinfo):
1232 ... def utcoffset(self, dt): return timedelta(minutes=-399)
1233 ...
1234 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1235 '2002-12-25 00:00:00-06:39'
1236
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001237 The optional argument *timespec* specifies the number of additional
1238 components of the time to include (the default is ``'auto'``).
1239 It can be one of the following:
1240
1241 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1242 same as ``'microseconds'`` otherwise.
1243 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
1244 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
1245 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
1246 in HH:MM:SS format.
1247 - ``'milliseconds'``: Include full time, but truncate fractional second
1248 part to milliseconds. HH:MM:SS.sss format.
1249 - ``'microseconds'``: Include full time in HH:MM:SS.mmmmmm format.
1250
1251 .. note::
1252
1253 Excluded time components are truncated, not rounded.
1254
1255 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1256
1257
1258 >>> from datetime import datetime
Marco Buttu909a6f62017-03-18 17:59:33 +01001259 >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001260 '2002-12-25T00:00'
1261 >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
1262 >>> dt.isoformat(timespec='microseconds')
1263 '2015-01-01T12:30:59.000000'
1264
1265 .. versionadded:: 3.6
1266 Added the *timespec* argument.
1267
Georg Brandl116aa622007-08-15 14:28:22 +00001268
1269.. method:: datetime.__str__()
1270
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001271 For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to
Georg Brandl116aa622007-08-15 14:28:22 +00001272 ``d.isoformat(' ')``.
1273
1274
1275.. method:: datetime.ctime()
1276
1277 Return a string representing the date and time, for example ``datetime(2002, 12,
1278 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:40 2002'``. ``d.ctime()`` is
1279 equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the
Georg Brandl60203b42010-10-06 10:11:56 +00001280 native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +00001281 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
1282
1283
1284.. method:: datetime.strftime(format)
1285
1286 Return a string representing the date and time, controlled by an explicit format
David Wolever569a5fa2013-08-12 16:56:02 -04001287 string. For a complete list of formatting directives, see
1288 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001289
Georg Brandl116aa622007-08-15 14:28:22 +00001290
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001291.. method:: datetime.__format__(format)
1292
Martin Panterd5db1472016-02-08 01:34:09 +00001293 Same as :meth:`.datetime.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +00001294 string for a :class:`.datetime` object in :ref:`formatted string
1295 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001296 complete list of formatting directives, see
1297 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001298
1299
Christian Heimesfe337bf2008-03-23 21:54:12 +00001300Examples of working with datetime objects:
1301
1302.. doctest::
1303
Christian Heimes895627f2007-12-08 17:28:33 +00001304 >>> from datetime import datetime, date, time
1305 >>> # Using datetime.combine()
1306 >>> d = date(2005, 7, 14)
1307 >>> t = time(12, 30)
1308 >>> datetime.combine(d, t)
1309 datetime.datetime(2005, 7, 14, 12, 30)
1310 >>> # Using datetime.now() or datetime.utcnow()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001311 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001312 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Christian Heimesfe337bf2008-03-23 21:54:12 +00001313 >>> datetime.utcnow() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001314 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
1315 >>> # Using datetime.strptime()
1316 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1317 >>> dt
1318 datetime.datetime(2006, 11, 21, 16, 30)
1319 >>> # Using datetime.timetuple() to get tuple of all attributes
1320 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001321 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001322 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001323 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001324 2006 # year
1325 11 # month
1326 21 # day
1327 16 # hour
1328 30 # minute
1329 0 # second
1330 1 # weekday (0 = Monday)
1331 325 # number of days since 1st January
1332 -1 # dst - method tzinfo.dst() returned None
1333 >>> # Date in ISO format
1334 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001335 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001336 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001337 ...
1338 2006 # ISO year
1339 47 # ISO week
1340 2 # ISO weekday
1341 >>> # Formatting datetime
1342 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1343 'Tuesday, 21. November 2006 04:30PM'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001344 >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
1345 'The day is 21, the month is November, the time is 04:30PM.'
Christian Heimes895627f2007-12-08 17:28:33 +00001346
Christian Heimesfe337bf2008-03-23 21:54:12 +00001347Using datetime with tzinfo:
Christian Heimes895627f2007-12-08 17:28:33 +00001348
1349 >>> from datetime import timedelta, datetime, tzinfo
1350 >>> class GMT1(tzinfo):
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001351 ... def utcoffset(self, dt):
1352 ... return timedelta(hours=1) + self.dst(dt)
1353 ... def dst(self, dt):
1354 ... # DST starts last Sunday in March
Christian Heimes895627f2007-12-08 17:28:33 +00001355 ... d = datetime(dt.year, 4, 1) # ends last Sunday in October
1356 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001357 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001358 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001359 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1360 ... return timedelta(hours=1)
1361 ... else:
1362 ... return timedelta(0)
1363 ... def tzname(self,dt):
1364 ... return "GMT +1"
Georg Brandl48310cd2009-01-03 21:18:54 +00001365 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001366 >>> class GMT2(tzinfo):
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001367 ... def utcoffset(self, dt):
1368 ... return timedelta(hours=2) + self.dst(dt)
1369 ... def dst(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001370 ... d = datetime(dt.year, 4, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001371 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001372 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001373 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001374 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001375 ... return timedelta(hours=1)
Christian Heimes895627f2007-12-08 17:28:33 +00001376 ... else:
1377 ... return timedelta(0)
1378 ... def tzname(self,dt):
1379 ... return "GMT +2"
Georg Brandl48310cd2009-01-03 21:18:54 +00001380 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001381 >>> gmt1 = GMT1()
1382 >>> # Daylight Saving Time
1383 >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
1384 >>> dt1.dst()
1385 datetime.timedelta(0)
1386 >>> dt1.utcoffset()
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +02001387 datetime.timedelta(seconds=3600)
Christian Heimes895627f2007-12-08 17:28:33 +00001388 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
1389 >>> dt2.dst()
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +02001390 datetime.timedelta(seconds=3600)
Christian Heimes895627f2007-12-08 17:28:33 +00001391 >>> dt2.utcoffset()
Utkarsh Upadhyay843ea472017-10-27 13:25:15 +02001392 datetime.timedelta(seconds=7200)
Christian Heimes895627f2007-12-08 17:28:33 +00001393 >>> # Convert datetime to another time zone
1394 >>> dt3 = dt2.astimezone(GMT2())
1395 >>> dt3 # doctest: +ELLIPSIS
1396 datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
1397 >>> dt2 # doctest: +ELLIPSIS
1398 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
1399 >>> dt2.utctimetuple() == dt3.utctimetuple()
1400 True
Georg Brandl48310cd2009-01-03 21:18:54 +00001401
Christian Heimes895627f2007-12-08 17:28:33 +00001402
Georg Brandl116aa622007-08-15 14:28:22 +00001403
1404.. _datetime-time:
1405
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001406:class:`.time` Objects
1407----------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001408
1409A time object represents a (local) time of day, independent of any particular
1410day, and subject to adjustment via a :class:`tzinfo` object.
1411
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001412.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001413
1414 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
Georg Brandl5c106642007-11-29 17:41:05 +00001415 :class:`tzinfo` subclass. The remaining arguments may be integers, in the
Georg Brandl116aa622007-08-15 14:28:22 +00001416 following ranges:
1417
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001418 * ``0 <= hour < 24``,
1419 * ``0 <= minute < 60``,
1420 * ``0 <= second < 60``,
1421 * ``0 <= microsecond < 1000000``,
1422 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +00001423
1424 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
1425 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1426
1427Class attributes:
1428
1429
1430.. attribute:: time.min
1431
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001432 The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001433
1434
1435.. attribute:: time.max
1436
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001437 The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001438
1439
1440.. attribute:: time.resolution
1441
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001442 The smallest possible difference between non-equal :class:`.time` objects,
1443 ``timedelta(microseconds=1)``, although note that arithmetic on
1444 :class:`.time` objects is not supported.
Georg Brandl116aa622007-08-15 14:28:22 +00001445
Georg Brandl116aa622007-08-15 14:28:22 +00001446
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001447Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001448
1449.. attribute:: time.hour
1450
1451 In ``range(24)``.
1452
1453
1454.. attribute:: time.minute
1455
1456 In ``range(60)``.
1457
1458
1459.. attribute:: time.second
1460
1461 In ``range(60)``.
1462
1463
1464.. attribute:: time.microsecond
1465
1466 In ``range(1000000)``.
1467
1468
1469.. attribute:: time.tzinfo
1470
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001471 The object passed as the tzinfo argument to the :class:`.time` constructor, or
Georg Brandl116aa622007-08-15 14:28:22 +00001472 ``None`` if none was passed.
1473
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001474
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001475.. attribute:: time.fold
1476
1477 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
1478 repeated interval occurs when clocks are rolled back at the end of daylight saving
1479 time or when the UTC offset for the current zone is decreased for political reasons.)
1480 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1481 time representation.
1482
1483 .. versionadded:: 3.6
1484
1485
Georg Brandl116aa622007-08-15 14:28:22 +00001486Supported operations:
1487
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001488* comparison of :class:`.time` to :class:`.time`, where *a* is considered less
Georg Brandl116aa622007-08-15 14:28:22 +00001489 than *b* when *a* precedes *b* in time. If one comparand is naive and the other
Alexander Belopolsky08313822012-06-15 20:19:47 -04001490 is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality
1491 comparisons, naive instances are never equal to aware instances.
1492
1493 If both comparands are aware, and have
Martin Panter16c7cfd2016-04-01 21:48:24 +00001494 the same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is
Senthil Kumarana6bac952011-07-04 11:28:30 -07001495 ignored and the base times are compared. If both comparands are aware and
Martin Panter16c7cfd2016-04-01 21:48:24 +00001496 have different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by
Senthil Kumarana6bac952011-07-04 11:28:30 -07001497 subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1498 to stop mixed-type comparisons from falling back to the default comparison by
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001499 object address, when a :class:`.time` object is compared to an object of a
Senthil Kumaran3aac1792011-07-04 11:43:51 -07001500 different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
Senthil Kumarana6bac952011-07-04 11:28:30 -07001501 ``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl116aa622007-08-15 14:28:22 +00001502
Alexander Belopolsky08313822012-06-15 20:19:47 -04001503 .. versionchanged:: 3.3
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001504 Equality comparisons between naive and aware :class:`~datetime.time` instances
Éric Araujob0f08952012-06-24 16:22:09 -04001505 don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001506
Georg Brandl116aa622007-08-15 14:28:22 +00001507* hash, use as dict key
1508
1509* efficient pickling
1510
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001511In boolean contexts, a :class:`.time` object is always considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001512
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001513.. versionchanged:: 3.5
1514 Before Python 3.5, a :class:`.time` object was considered to be false if it
1515 represented midnight in UTC. This behavior was considered obscure and
1516 error-prone and has been removed in Python 3.5. See :issue:`13936` for full
1517 details.
Georg Brandl116aa622007-08-15 14:28:22 +00001518
Paul Ganssle09dc2f52017-12-21 00:33:49 -05001519
1520Other constructor:
1521
1522.. classmethod:: time.fromisoformat(time_string)
1523
1524 Return a :class:`time` corresponding to a *time_string* in one of the
1525 formats emitted by :meth:`time.isoformat`. Specifically, this function supports
1526 strings in the format(s) ``HH[:MM[:SS[.mmm[mmm]]]][+HH:MM[:SS[.ffffff]]]``.
1527
1528 .. caution::
1529
1530 This does not support parsing arbitrary ISO 8601 strings - it is only intended
1531 as the inverse operation of :meth:`time.isoformat`.
1532
1533 .. versionadded:: 3.7
1534
1535
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001536Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001537
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001538.. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \
1539 microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001540
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001541 Return a :class:`.time` with the same value, except for those attributes given
Senthil Kumarana6bac952011-07-04 11:28:30 -07001542 new values by whichever keyword arguments are specified. Note that
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001543 ``tzinfo=None`` can be specified to create a naive :class:`.time` from an
1544 aware :class:`.time`, without conversion of the time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001545
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001546 .. versionadded:: 3.6
1547 Added the ``fold`` argument.
1548
Georg Brandl116aa622007-08-15 14:28:22 +00001549
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001550.. method:: time.isoformat(timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001551
1552 Return a string representing the time in ISO 8601 format, HH:MM:SS.mmmmmm or, if
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001553 :attr:`microsecond` is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a
Georg Brandl116aa622007-08-15 14:28:22 +00001554 6-character string is appended, giving the UTC offset in (signed) hours and
1555 minutes: HH:MM:SS.mmmmmm+HH:MM or, if self.microsecond is 0, HH:MM:SS+HH:MM
1556
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001557 The optional argument *timespec* specifies the number of additional
1558 components of the time to include (the default is ``'auto'``).
1559 It can be one of the following:
1560
1561 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1562 same as ``'microseconds'`` otherwise.
1563 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
1564 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
1565 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
1566 in HH:MM:SS format.
1567 - ``'milliseconds'``: Include full time, but truncate fractional second
1568 part to milliseconds. HH:MM:SS.sss format.
1569 - ``'microseconds'``: Include full time in HH:MM:SS.mmmmmm format.
1570
1571 .. note::
1572
1573 Excluded time components are truncated, not rounded.
1574
1575 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1576
1577
1578 >>> from datetime import time
Berker Peksag94f89a62016-06-04 21:36:53 -07001579 >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001580 '12:34'
Berker Peksag94f89a62016-06-04 21:36:53 -07001581 >>> dt = time(hour=12, minute=34, second=56, microsecond=0)
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001582 >>> dt.isoformat(timespec='microseconds')
1583 '12:34:56.000000'
1584 >>> dt.isoformat(timespec='auto')
1585 '12:34:56'
1586
1587 .. versionadded:: 3.6
1588 Added the *timespec* argument.
1589
Georg Brandl116aa622007-08-15 14:28:22 +00001590
1591.. method:: time.__str__()
1592
1593 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1594
1595
1596.. method:: time.strftime(format)
1597
David Wolever569a5fa2013-08-12 16:56:02 -04001598 Return a string representing the time, controlled by an explicit format
1599 string. For a complete list of formatting directives, see
David Woleverbbf4a462013-08-12 17:15:36 -04001600 :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001601
1602
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001603.. method:: time.__format__(format)
1604
Martin Panterd5db1472016-02-08 01:34:09 +00001605 Same as :meth:`.time.strftime`. This makes it possible to specify a format string
Martin Panterbc1ee462016-02-13 00:41:37 +00001606 for a :class:`.time` object in :ref:`formatted string
1607 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001608 complete list of formatting directives, see
1609 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001610
1611
Georg Brandl116aa622007-08-15 14:28:22 +00001612.. method:: time.utcoffset()
1613
Martin Panter16c7cfd2016-04-01 21:48:24 +00001614 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001615 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001616 return ``None`` or a :class:`timedelta` object with magnitude less than one day.
1617
1618 .. versionchanged:: 3.7
1619 The UTC offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001620
1621
1622.. method:: time.dst()
1623
Martin Panter16c7cfd2016-04-01 21:48:24 +00001624 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001625 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001626 ``None``, or a :class:`timedelta` object with magnitude less than one day.
Georg Brandl116aa622007-08-15 14:28:22 +00001627
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001628 .. versionchanged:: 3.7
1629 The DST offset is not restricted to a whole number of minutes.
Georg Brandl116aa622007-08-15 14:28:22 +00001630
1631.. method:: time.tzname()
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.tzname(None)``, or raises an exception if the latter doesn't
1635 return ``None`` or a string object.
1636
Christian Heimesfe337bf2008-03-23 21:54:12 +00001637Example:
Georg Brandl48310cd2009-01-03 21:18:54 +00001638
Xiang Zhang6721c7c2016-12-27 12:23:59 +08001639 >>> from datetime import time, tzinfo, timedelta
Christian Heimes895627f2007-12-08 17:28:33 +00001640 >>> class GMT1(tzinfo):
1641 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001642 ... return timedelta(hours=1)
1643 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001644 ... return timedelta(0)
1645 ... def tzname(self,dt):
1646 ... return "Europe/Prague"
1647 ...
1648 >>> t = time(12, 10, 30, tzinfo=GMT1())
1649 >>> t # doctest: +ELLIPSIS
1650 datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>)
1651 >>> gmt = GMT1()
1652 >>> t.isoformat()
1653 '12:10:30+01:00'
1654 >>> t.dst()
1655 datetime.timedelta(0)
1656 >>> t.tzname()
1657 'Europe/Prague'
1658 >>> t.strftime("%H:%M:%S %Z")
1659 '12:10:30 Europe/Prague'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001660 >>> 'The {} is {:%H:%M}.'.format("time", t)
1661 'The time is 12:10.'
Christian Heimes895627f2007-12-08 17:28:33 +00001662
Georg Brandl116aa622007-08-15 14:28:22 +00001663
1664.. _datetime-tzinfo:
1665
1666:class:`tzinfo` Objects
1667-----------------------
1668
Martin Panter16c7cfd2016-04-01 21:48:24 +00001669.. class:: tzinfo()
Georg Brandl116aa622007-08-15 14:28:22 +00001670
Martin Panter16c7cfd2016-04-01 21:48:24 +00001671 This is an abstract base class, meaning that this class should not be
1672 instantiated directly. You need to derive a concrete subclass, and (at least)
1673 supply implementations of the standard :class:`tzinfo` methods needed by the
1674 :class:`.datetime` methods you use. The :mod:`datetime` module supplies
1675 a simple concrete subclass of :class:`tzinfo`, :class:`timezone`, which can represent
1676 timezones with fixed offset from UTC such as UTC itself or North American EST and
1677 EDT.
Georg Brandl116aa622007-08-15 14:28:22 +00001678
Martin Panter16c7cfd2016-04-01 21:48:24 +00001679 An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1680 constructors for :class:`.datetime` and :class:`.time` objects. The latter objects
1681 view their attributes as being in local time, and the :class:`tzinfo` object
1682 supports methods revealing offset of local time from UTC, the name of the time
1683 zone, and DST offset, all relative to a date or time object passed to them.
Georg Brandl116aa622007-08-15 14:28:22 +00001684
Martin Panter16c7cfd2016-04-01 21:48:24 +00001685 Special requirement for pickling: A :class:`tzinfo` subclass must have an
1686 :meth:`__init__` method that can be called with no arguments, else it can be
1687 pickled but possibly not unpickled again. This is a technical requirement that
1688 may be relaxed in the future.
1689
1690 A concrete subclass of :class:`tzinfo` may need to implement the following
1691 methods. Exactly which methods are needed depends on the uses made of aware
1692 :mod:`datetime` objects. If in doubt, simply implement all of them.
Georg Brandl116aa622007-08-15 14:28:22 +00001693
1694
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001695.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001696
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001697 Return offset of local time from UTC, as a :class:`timedelta` object that is
1698 positive east of UTC. If local time is
Georg Brandl116aa622007-08-15 14:28:22 +00001699 west of UTC, this should be negative. Note that this is intended to be the
1700 total offset from UTC; for example, if a :class:`tzinfo` object represents both
1701 time zone and DST adjustments, :meth:`utcoffset` should return their sum. If
1702 the UTC offset isn't known, return ``None``. Else the value returned must be a
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001703 :class:`timedelta` object strictly between ``-timedelta(hours=24)`` and
1704 ``timedelta(hours=24)`` (the magnitude of the offset must be less
Georg Brandl116aa622007-08-15 14:28:22 +00001705 than one day). Most implementations of :meth:`utcoffset` will probably look
1706 like one of these two::
1707
1708 return CONSTANT # fixed-offset class
1709 return CONSTANT + self.dst(dt) # daylight-aware class
1710
1711 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1712 ``None`` either.
1713
1714 The default implementation of :meth:`utcoffset` raises
1715 :exc:`NotImplementedError`.
1716
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001717 .. versionchanged:: 3.7
1718 The UTC offset is not restricted to a whole number of minutes.
1719
Georg Brandl116aa622007-08-15 14:28:22 +00001720
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001721.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001722
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001723 Return the daylight saving time (DST) adjustment, as a :class:`timedelta`
1724 object or
Georg Brandl116aa622007-08-15 14:28:22 +00001725 ``None`` if DST information isn't known. Return ``timedelta(0)`` if DST is not
1726 in effect. If DST is in effect, return the offset as a :class:`timedelta` object
1727 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1728 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1729 no need to consult :meth:`dst` unless you're interested in obtaining DST info
Martin Panter16c7cfd2016-04-01 21:48:24 +00001730 separately. For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001731 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1732 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1733 DST changes when crossing time zones.
Georg Brandl116aa622007-08-15 14:28:22 +00001734
1735 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1736 daylight times must be consistent in this sense:
1737
1738 ``tz.utcoffset(dt) - tz.dst(dt)``
1739
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001740 must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo ==
Georg Brandl116aa622007-08-15 14:28:22 +00001741 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1742 zone's "standard offset", which should not depend on the date or the time, but
1743 only on geographic location. The implementation of :meth:`datetime.astimezone`
1744 relies on this, but cannot detect violations; it's the programmer's
1745 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
1746 this, it may be able to override the default implementation of
1747 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
1748
1749 Most implementations of :meth:`dst` will probably look like one of these two::
1750
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001751 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001752 # a fixed-offset class: doesn't account for DST
1753 return timedelta(0)
1754
1755 or ::
1756
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001757 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001758 # Code to set dston and dstoff to the time zone's DST
1759 # transition times based on the input dt.year, and expressed
1760 # in standard local time. Then
1761
1762 if dston <= dt.replace(tzinfo=None) < dstoff:
1763 return timedelta(hours=1)
1764 else:
1765 return timedelta(0)
1766
1767 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
1768
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001769 .. versionchanged:: 3.7
1770 The DST offset is not restricted to a whole number of minutes.
1771
Georg Brandl116aa622007-08-15 14:28:22 +00001772
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001773.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001774
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001775 Return the time zone name corresponding to the :class:`.datetime` object *dt*, as
Georg Brandl116aa622007-08-15 14:28:22 +00001776 a string. Nothing about string names is defined by the :mod:`datetime` module,
1777 and there's no requirement that it mean anything in particular. For example,
1778 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
1779 valid replies. Return ``None`` if a string name isn't known. Note that this is
1780 a method rather than a fixed string primarily because some :class:`tzinfo`
1781 subclasses will wish to return different names depending on the specific value
1782 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
1783 daylight time.
1784
1785 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
1786
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001787
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001788These methods are called by a :class:`.datetime` or :class:`.time` object, in
1789response to their methods of the same names. A :class:`.datetime` object passes
1790itself as the argument, and a :class:`.time` object passes ``None`` as the
Georg Brandl116aa622007-08-15 14:28:22 +00001791argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001792accept a *dt* argument of ``None``, or of class :class:`.datetime`.
Georg Brandl116aa622007-08-15 14:28:22 +00001793
1794When ``None`` is passed, it's up to the class designer to decide the best
1795response. For example, returning ``None`` is appropriate if the class wishes to
1796say that time objects don't participate in the :class:`tzinfo` protocols. It
1797may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
1798there is no other convention for discovering the standard offset.
1799
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001800When a :class:`.datetime` object is passed in response to a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001801method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
1802rely on this, unless user code calls :class:`tzinfo` methods directly. The
1803intent is that the :class:`tzinfo` methods interpret *dt* as being in local
1804time, and not need worry about objects in other timezones.
1805
1806There is one more :class:`tzinfo` method that a subclass may wish to override:
1807
1808
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001809.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001810
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001811 This is called from the default :class:`datetime.astimezone()`
1812 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
1813 date and time data are to be viewed as expressing a UTC time. The purpose
1814 of :meth:`fromutc` is to adjust the date and time data, returning an
Senthil Kumarana6bac952011-07-04 11:28:30 -07001815 equivalent datetime in *self*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001816
1817 Most :class:`tzinfo` subclasses should be able to inherit the default
1818 :meth:`fromutc` implementation without problems. It's strong enough to handle
1819 fixed-offset time zones, and time zones accounting for both standard and
1820 daylight time, and the latter even if the DST transition times differ in
1821 different years. An example of a time zone the default :meth:`fromutc`
1822 implementation may not handle correctly in all cases is one where the standard
1823 offset (from UTC) depends on the specific date and time passed, which can happen
1824 for political reasons. The default implementations of :meth:`astimezone` and
1825 :meth:`fromutc` may not produce the result you want if the result is one of the
1826 hours straddling the moment the standard offset changes.
1827
1828 Skipping code for error cases, the default :meth:`fromutc` implementation acts
1829 like::
1830
1831 def fromutc(self, dt):
1832 # raise ValueError error if dt.tzinfo is not self
1833 dtoff = dt.utcoffset()
1834 dtdst = dt.dst()
1835 # raise ValueError if dtoff is None or dtdst is None
1836 delta = dtoff - dtdst # this is self's standard offset
1837 if delta:
1838 dt += delta # convert to standard local time
1839 dtdst = dt.dst()
1840 # raise ValueError if dtdst is None
1841 if dtdst:
1842 return dt + dtdst
1843 else:
1844 return dt
1845
Marco Buttu909a6f62017-03-18 17:59:33 +01001846In the following :download:`tzinfo_examples.py
1847<../includes/tzinfo_examples.py>` file there are some examples of
1848:class:`tzinfo` classes:
Georg Brandl116aa622007-08-15 14:28:22 +00001849
Marco Buttu909a6f62017-03-18 17:59:33 +01001850.. literalinclude:: ../includes/tzinfo_examples.py
Georg Brandl116aa622007-08-15 14:28:22 +00001851
Georg Brandl116aa622007-08-15 14:28:22 +00001852Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
1853subclass accounting for both standard and daylight time, at the DST transition
1854points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00001855minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
18561:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00001857
1858 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
1859 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
1860 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
1861
1862 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
1863
1864 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
1865
1866When DST starts (the "start" line), the local wall clock leaps from 1:59 to
18673:00. A wall time of the form 2:MM doesn't really make sense on that day, so
1868``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001869begins. For example, at the Spring forward transition of 2016, we get
1870
Marco Buttu909a6f62017-03-18 17:59:33 +01001871 >>> from datetime import datetime, timezone
1872 >>> from tzinfo_examples import HOUR, Eastern
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001873 >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
1874 >>> for i in range(4):
1875 ... u = u0 + i*HOUR
1876 ... t = u.astimezone(Eastern)
1877 ... print(u.time(), 'UTC =', t.time(), t.tzname())
1878 ...
1879 05:00:00 UTC = 00:00:00 EST
1880 06:00:00 UTC = 01:00:00 EST
1881 07:00:00 UTC = 03:00:00 EDT
1882 08:00:00 UTC = 04:00:00 EDT
1883
Georg Brandl116aa622007-08-15 14:28:22 +00001884
1885When DST ends (the "end" line), there's a potentially worse problem: there's an
1886hour that can't be spelled unambiguously in local wall time: the last hour of
1887daylight time. In Eastern, that's times of the form 5:MM UTC on the day
1888daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
1889to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
1890:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
1891hours into the same local hour then. In the Eastern example, UTC times of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001892form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times
1893have the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1.
1894For example, at the Fall back transition of 2016, we get
Georg Brandl116aa622007-08-15 14:28:22 +00001895
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001896 >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
1897 >>> for i in range(4):
1898 ... u = u0 + i*HOUR
1899 ... t = u.astimezone(Eastern)
1900 ... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
1901 ...
1902 04:00:00 UTC = 00:00:00 EDT 0
1903 05:00:00 UTC = 01:00:00 EDT 0
1904 06:00:00 UTC = 01:00:00 EST 1
1905 07:00:00 UTC = 02:00:00 EST 0
1906
1907Note that the :class:`datetime` instances that differ only by the value of the
1908:attr:`~datetime.fold` attribute are considered equal in comparisons.
1909
1910Applications that can't bear wall-time ambiguities should explicitly check the
Raymond Hettinger15f44ab2016-08-30 10:47:49 -07001911value of the :attr:`~datetime.fold` attribute or avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001912:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
1913or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
1914only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
1915
Sandro Tosid11d0d62012-04-24 19:46:06 +02001916.. seealso::
1917
wim glenn53f2af12017-06-06 12:54:41 -05001918 `dateutil.tz <https://dateutil.readthedocs.io/en/stable/tz.html>`_
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001919 The standard library has :class:`timezone` class for handling arbitrary
1920 fixed offsets from UTC and :attr:`timezone.utc` as UTC timezone instance.
Sandro Tosid11d0d62012-04-24 19:46:06 +02001921
wim glenn53f2af12017-06-06 12:54:41 -05001922 *dateutil.tz* library brings the *IANA timezone database* (also known as the
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001923 Olson database) to Python and its usage is recommended.
Sandro Tosi100b8892012-04-28 11:19:37 +02001924
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03001925 `IANA timezone database <https://www.iana.org/time-zones>`_
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001926 The Time Zone Database (often called tz, tzdata or zoneinfo) contains code and
Sandro Tosi100b8892012-04-28 11:19:37 +02001927 data that represent the history of local time for many representative
1928 locations around the globe. It is updated periodically to reflect changes
1929 made by political bodies to time zone boundaries, UTC offsets, and
1930 daylight-saving rules.
Sandro Tosid11d0d62012-04-24 19:46:06 +02001931
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001932
1933.. _datetime-timezone:
1934
1935:class:`timezone` Objects
1936--------------------------
1937
Alexander Belopolsky6d3c9a62011-05-04 10:28:26 -04001938The :class:`timezone` class is a subclass of :class:`tzinfo`, each
1939instance of which represents a timezone defined by a fixed offset from
1940UTC. Note that objects of this class cannot be used to represent
1941timezone information in the locations where different offsets are used
1942in different days of the year or where historical changes have been
1943made to civil time.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001944
1945
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001946.. class:: timezone(offset, name=None)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001947
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001948 The *offset* argument must be specified as a :class:`timedelta`
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001949 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001950 be strictly between ``-timedelta(hours=24)`` and
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001951 ``timedelta(hours=24)``, otherwise :exc:`ValueError` is raised.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001952
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001953 The *name* argument is optional. If specified it must be a string that
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001954 will be used as the value returned by the :meth:`datetime.tzname` method.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001955
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001956 .. versionadded:: 3.2
1957
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001958 .. versionchanged:: 3.7
1959 The UTC offset is not restricted to a whole number of minutes.
1960
1961
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001962.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001963
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001964 Return the fixed value specified when the :class:`timezone` instance is
1965 constructed. The *dt* argument is ignored. The return value is a
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001966 :class:`timedelta` instance equal to the difference between the
1967 local time and UTC.
1968
Alexander Belopolsky018d3532017-07-31 10:26:50 -04001969 .. versionchanged:: 3.7
1970 The UTC offset is not restricted to a whole number of minutes.
1971
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001972.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001973
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001974 Return the fixed value specified when the :class:`timezone` instance
1975 is constructed. If *name* is not provided in the constructor, the
1976 name returned by ``tzname(dt)`` is generated from the value of the
1977 ``offset`` as follows. If *offset* is ``timedelta(0)``, the name
1978 is "UTC", otherwise it is a string 'UTC±HH:MM', where ± is the sign
1979 of ``offset``, HH and MM are two digits of ``offset.hours`` and
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001980 ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001981
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001982 .. versionchanged:: 3.6
Berker Peksagdf326eb2015-09-09 18:32:50 +03001983 Name generated from ``offset=timedelta(0)`` is now plain 'UTC', not
1984 'UTC+00:00'.
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001985
1986
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001987.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001988
1989 Always returns ``None``.
1990
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001991.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001992
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001993 Return ``dt + offset``. The *dt* argument must be an aware
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001994 :class:`.datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001995
1996Class attributes:
1997
1998.. attribute:: timezone.utc
1999
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00002000 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00002001
Georg Brandl116aa622007-08-15 14:28:22 +00002002
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002003.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00002004
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002005:meth:`strftime` and :meth:`strptime` Behavior
2006----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00002007
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002008:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a
Georg Brandl116aa622007-08-15 14:28:22 +00002009``strftime(format)`` method, to create a string representing the time under the
2010control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
2011acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
2012although not all objects support a :meth:`timetuple` method.
2013
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002014Conversely, the :meth:`datetime.strptime` class method creates a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002015:class:`.datetime` object from a string representing a date and time and a
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002016corresponding format string. ``datetime.strptime(date_string, format)`` is
2017equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``.
2018
Ezio Melotti35ec7f72011-10-02 12:44:50 +03002019For :class:`.time` objects, the format codes for year, month, and day should not
Georg Brandl116aa622007-08-15 14:28:22 +00002020be used, as time objects have no such values. If they're used anyway, ``1900``
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00002021is substituted for the year, and ``1`` for the month and day.
Georg Brandl116aa622007-08-15 14:28:22 +00002022
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002023For :class:`date` objects, the format codes for hours, minutes, seconds, and
2024microseconds should not be used, as :class:`date` objects have no such
2025values. If they're used anyway, ``0`` is substituted for them.
2026
Georg Brandl116aa622007-08-15 14:28:22 +00002027The full set of format codes supported varies across platforms, because Python
2028calls the platform C library's :func:`strftime` function, and platform
Georg Brandlb7117af2013-10-13 18:28:25 +02002029variations are common. To see the full set of format codes supported on your
2030platform, consult the :manpage:`strftime(3)` documentation.
Christian Heimes895627f2007-12-08 17:28:33 +00002031
2032The following is a list of all the format codes that the C standard (1989
2033version) requires, and these work on all platforms with a standard C
2034implementation. Note that the 1999 version of the C standard added additional
2035format codes.
Georg Brandl116aa622007-08-15 14:28:22 +00002036
David Wolever569a5fa2013-08-12 16:56:02 -04002037+-----------+--------------------------------+------------------------+-------+
2038| Directive | Meaning | Example | Notes |
2039+===========+================================+========================+=======+
2040| ``%a`` | Weekday as locale's || Sun, Mon, ..., Sat | \(1) |
2041| | abbreviated name. | (en_US); | |
2042| | || So, Mo, ..., Sa | |
2043| | | (de_DE) | |
2044+-----------+--------------------------------+------------------------+-------+
2045| ``%A`` | Weekday as locale's full name. || Sunday, Monday, ..., | \(1) |
2046| | | Saturday (en_US); | |
2047| | || Sonntag, Montag, ..., | |
2048| | | Samstag (de_DE) | |
2049+-----------+--------------------------------+------------------------+-------+
2050| ``%w`` | Weekday as a decimal number, | 0, 1, ..., 6 | |
2051| | where 0 is Sunday and 6 is | | |
2052| | Saturday. | | |
2053+-----------+--------------------------------+------------------------+-------+
2054| ``%d`` | Day of the month as a | 01, 02, ..., 31 | |
2055| | zero-padded decimal number. | | |
2056+-----------+--------------------------------+------------------------+-------+
2057| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
2058| | name. | (en_US); | |
2059| | || Jan, Feb, ..., Dez | |
2060| | | (de_DE) | |
2061+-----------+--------------------------------+------------------------+-------+
2062| ``%B`` | Month as locale's full name. || January, February, | \(1) |
2063| | | ..., December (en_US);| |
2064| | || Januar, Februar, ..., | |
2065| | | Dezember (de_DE) | |
2066+-----------+--------------------------------+------------------------+-------+
2067| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | |
2068| | decimal number. | | |
2069+-----------+--------------------------------+------------------------+-------+
2070| ``%y`` | Year without century as a | 00, 01, ..., 99 | |
2071| | zero-padded decimal number. | | |
2072+-----------+--------------------------------+------------------------+-------+
2073| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
David Wolever5d07e702013-08-14 14:41:48 -04002074| | number. | 2014, ..., 9998, 9999 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002075+-----------+--------------------------------+------------------------+-------+
2076| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | |
2077| | zero-padded decimal number. | | |
2078+-----------+--------------------------------+------------------------+-------+
2079| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | |
2080| | zero-padded decimal number. | | |
2081+-----------+--------------------------------+------------------------+-------+
2082| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
2083| | AM or PM. || am, pm (de_DE) | \(3) |
2084+-----------+--------------------------------+------------------------+-------+
2085| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | |
2086| | decimal number. | | |
2087+-----------+--------------------------------+------------------------+-------+
2088| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4) |
2089| | decimal number. | | |
2090+-----------+--------------------------------+------------------------+-------+
2091| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
2092| | number, zero-padded on the | 999999 | |
2093| | left. | | |
2094+-----------+--------------------------------+------------------------+-------+
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002095| ``%z`` | UTC offset in the form | (empty), +0000, -0400, | \(6) |
2096| | ±HHMM[SS] (empty string if the | +1030 | |
Berker Peksagbace9762016-05-04 23:25:44 +03002097| | object is naive). | | |
David Wolever569a5fa2013-08-12 16:56:02 -04002098+-----------+--------------------------------+------------------------+-------+
2099| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | |
2100| | if the object is naive). | | |
2101+-----------+--------------------------------+------------------------+-------+
2102| ``%j`` | Day of the year as a | 001, 002, ..., 366 | |
2103| | zero-padded decimal number. | | |
2104+-----------+--------------------------------+------------------------+-------+
2105| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7) |
2106| | (Sunday as the first day of | | |
2107| | the week) as a zero padded | | |
2108| | decimal number. All days in a | | |
2109| | new year preceding the first | | |
2110| | Sunday are considered to be in | | |
2111| | week 0. | | |
2112+-----------+--------------------------------+------------------------+-------+
2113| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7) |
2114| | (Monday as the first day of | | |
2115| | the week) as a decimal number. | | |
2116| | All days in a new year | | |
2117| | preceding the first Monday | | |
2118| | are considered to be in | | |
2119| | week 0. | | |
2120+-----------+--------------------------------+------------------------+-------+
2121| ``%c`` | Locale's appropriate date and || Tue Aug 16 21:30:00 | \(1) |
2122| | time representation. | 1988 (en_US); | |
2123| | || Di 16 Aug 21:30:00 | |
2124| | | 1988 (de_DE) | |
2125+-----------+--------------------------------+------------------------+-------+
2126| ``%x`` | Locale's appropriate date || 08/16/88 (None); | \(1) |
2127| | representation. || 08/16/1988 (en_US); | |
2128| | || 16.08.1988 (de_DE) | |
2129+-----------+--------------------------------+------------------------+-------+
2130| ``%X`` | Locale's appropriate time || 21:30:00 (en_US); | \(1) |
2131| | representation. || 21:30:00 (de_DE) | |
2132+-----------+--------------------------------+------------------------+-------+
2133| ``%%`` | A literal ``'%'`` character. | % | |
2134+-----------+--------------------------------+------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00002135
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002136Several additional directives not required by the C89 standard are included for
2137convenience. These parameters all correspond to ISO 8601 date values. These
2138may not be available on all platforms when used with the :meth:`strftime`
2139method. The ISO 8601 year and ISO 8601 week directives are not interchangeable
2140with the year and week number directives above. Calling :meth:`strptime` with
2141incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
2142
2143+-----------+--------------------------------+------------------------+-------+
2144| Directive | Meaning | Example | Notes |
2145+===========+================================+========================+=======+
2146| ``%G`` | ISO 8601 year with century | 0001, 0002, ..., 2013, | \(8) |
2147| | representing the year that | 2014, ..., 9998, 9999 | |
2148| | contains the greater part of | | |
2149| | the ISO week (``%V``). | | |
2150+-----------+--------------------------------+------------------------+-------+
2151| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
2152| | number where 1 is Monday. | | |
2153+-----------+--------------------------------+------------------------+-------+
2154| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8) |
2155| | number with Monday as | | |
2156| | the first day of the week. | | |
2157| | Week 01 is the week containing | | |
2158| | Jan 4. | | |
2159+-----------+--------------------------------+------------------------+-------+
2160
2161.. versionadded:: 3.6
2162 ``%G``, ``%u`` and ``%V`` were added.
2163
Christian Heimes895627f2007-12-08 17:28:33 +00002164Notes:
2165
2166(1)
David Wolever569a5fa2013-08-12 16:56:02 -04002167 Because the format depends on the current locale, care should be taken when
2168 making assumptions about the output value. Field orderings will vary (for
2169 example, "month/day/year" versus "day/month/year"), and the output may
2170 contain Unicode characters encoded using the locale's default encoding (for
Georg Brandlad321532013-10-29 08:05:10 +01002171 example, if the current locale is ``ja_JP``, the default encoding could be
David Wolever569a5fa2013-08-12 16:56:02 -04002172 any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale`
2173 to determine the current locale's encoding).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002174
2175(2)
David Wolever569a5fa2013-08-12 16:56:02 -04002176 The :meth:`strptime` method can parse years in the full [1, 9999] range, but
2177 years < 1000 must be zero-filled to 4-digit width.
Alexander Belopolsky085556a2011-01-10 23:28:33 +00002178
2179 .. versionchanged:: 3.2
2180 In previous versions, :meth:`strftime` method was restricted to
2181 years >= 1900.
2182
Alexander Belopolsky5611a1c2011-05-02 14:14:48 -04002183 .. versionchanged:: 3.3
2184 In version 3.2, :meth:`strftime` method was restricted to
2185 years >= 1000.
2186
David Wolever569a5fa2013-08-12 16:56:02 -04002187(3)
2188 When used with the :meth:`strptime` method, the ``%p`` directive only affects
2189 the output hour field if the ``%I`` directive is used to parse the hour.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00002190
David Wolever569a5fa2013-08-12 16:56:02 -04002191(4)
2192 Unlike the :mod:`time` module, the :mod:`datetime` module does not support
2193 leap seconds.
2194
2195(5)
2196 When used with the :meth:`strptime` method, the ``%f`` directive
2197 accepts from one to six digits and zero pads on the right. ``%f`` is
2198 an extension to the set of format characters in the C standard (but
2199 implemented separately in datetime objects, and therefore always
2200 available).
2201
2202(6)
2203 For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
2204 strings.
2205
2206 For an aware object:
2207
2208 ``%z``
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002209 :meth:`utcoffset` is transformed into a string of the form
2210 ±HHMM[SS[.uuuuuu]], where HH is a 2-digit string giving the number of UTC
David Wolever569a5fa2013-08-12 16:56:02 -04002211 offset hours, and MM is a 2-digit string giving the number of UTC offset
Serhiy Storchakabac2d5b2018-03-28 22:14:26 +03002212 minutes, SS is a 2-digit string giving the number of UTC offset
2213 seconds and uuuuuu is a 2-digit string giving the number of UTC
Alexander Belopolsky018d3532017-07-31 10:26:50 -04002214 offset microseconds. The uuuuuu part is omitted when the offset is a
2215 whole number of minutes and both the uuuuuu and the SS parts are omitted
2216 when the offset is a whole number of minutes. For example, if
2217 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
2218 replaced with the string ``'-0330'``.
2219
2220 .. versionchanged:: 3.7
2221 The UTC offset is not restricted to a whole number of minutes.
David Wolever569a5fa2013-08-12 16:56:02 -04002222
Mario Corchero32318932017-10-26 01:35:41 +01002223 .. versionchanged:: 3.7
2224 When the ``%z`` directive is provided to the :meth:`strptime` method,
2225 the UTC offsets can have a colon as a separator between hours, minutes
2226 and seconds.
2227 For example, ``'+01:00:00'`` will be parsed as an offset of one hour.
2228 In addition, providing ``'Z'`` is identical to ``'+00:00'``.
2229
David Wolever569a5fa2013-08-12 16:56:02 -04002230 ``%Z``
2231 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty
2232 string. Otherwise ``%Z`` is replaced by the returned value, which must
2233 be a string.
2234
2235 .. versionchanged:: 3.2
2236 When the ``%z`` directive is provided to the :meth:`strptime` method, an
2237 aware :class:`.datetime` object will be produced. The ``tzinfo`` of the
2238 result will be set to a :class:`timezone` instance.
2239
2240(7)
2241 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002242 in calculations when the day of the week and the calendar year (``%Y``)
2243 are specified.
2244
2245(8)
2246 Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the
2247 day of the week and the ISO year (``%G``) are specified in a
2248 :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
Martin Panterf1579822016-05-26 06:03:33 +00002249 interchangeable.
R David Murray9075d8b2012-05-14 22:14:46 -04002250
2251.. rubric:: Footnotes
2252
2253.. [#] If, that is, we ignore the effects of Relativity