blob: 700a19d8e7492497df3fe7a73bb4e9b84329ecc2 [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 |
244| | true. (1) |
245+--------------------------------+-----------------------------------------------+
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+--------------------------------+-----------------------------------------------+
290| ``repr(t)`` | Returns a string in the form |
291| | ``datetime.timedelta(D[, S[, U]])``, where D |
292| | is negative for negative ``t``. (5) |
293+--------------------------------+-----------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000294
295Notes:
296
297(1)
298 This is exact, but may overflow.
299
300(2)
301 This is exact, and cannot overflow.
302
303(3)
304 Division by 0 raises :exc:`ZeroDivisionError`.
305
306(4)
307 -*timedelta.max* is not representable as a :class:`timedelta` object.
308
Georg Brandlf55c3152010-07-31 11:40:07 +0000309(5)
310 String representations of :class:`timedelta` objects are normalized
311 similarly to their internal representation. This leads to somewhat
312 unusual results for negative timedeltas. For example:
313
314 >>> timedelta(hours=-5)
315 datetime.timedelta(-1, 68400)
316 >>> print(_)
317 -1 day, 19:00:00
318
Georg Brandl116aa622007-08-15 14:28:22 +0000319In addition to the operations listed above :class:`timedelta` objects support
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300320certain additions and subtractions with :class:`date` and :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +0000321objects (see below).
322
Georg Brandl67b21b72010-08-17 15:07:14 +0000323.. versionchanged:: 3.2
324 Floor division and true division of a :class:`timedelta` object by another
325 :class:`timedelta` object are now supported, as are remainder operations and
326 the :func:`divmod` function. True division and multiplication of a
327 :class:`timedelta` object by a :class:`float` object are now supported.
Mark Dickinson7c186e22010-04-20 22:32:49 +0000328
329
Georg Brandl116aa622007-08-15 14:28:22 +0000330Comparisons of :class:`timedelta` objects are supported with the
331:class:`timedelta` object representing the smaller duration considered to be the
332smaller timedelta. In order to stop mixed-type comparisons from falling back to
333the default comparison by object address, when a :class:`timedelta` object is
334compared to an object of a different type, :exc:`TypeError` is raised unless the
335comparison is ``==`` or ``!=``. The latter cases return :const:`False` or
336:const:`True`, respectively.
337
Guido van Rossum2cc30da2007-11-02 23:46:40 +0000338:class:`timedelta` objects are :term:`hashable` (usable as dictionary keys), support
Georg Brandl116aa622007-08-15 14:28:22 +0000339efficient pickling, and in Boolean contexts, a :class:`timedelta` object is
340considered to be true if and only if it isn't equal to ``timedelta(0)``.
341
Antoine Pitroube6859d2009-11-25 23:02:32 +0000342Instance methods:
343
344.. method:: timedelta.total_seconds()
345
346 Return the total number of seconds contained in the duration. Equivalent to
Mark Dickinson0381e3f2010-05-08 14:35:02 +0000347 ``td / timedelta(seconds=1)``.
348
349 Note that for very large time intervals (greater than 270 years on
350 most platforms) this method will lose microsecond accuracy.
Antoine Pitroube6859d2009-11-25 23:02:32 +0000351
352 .. versionadded:: 3.2
353
354
Christian Heimesfe337bf2008-03-23 21:54:12 +0000355Example usage:
Georg Brandl48310cd2009-01-03 21:18:54 +0000356
Christian Heimes895627f2007-12-08 17:28:33 +0000357 >>> from datetime import timedelta
358 >>> year = timedelta(days=365)
Georg Brandl48310cd2009-01-03 21:18:54 +0000359 >>> another_year = timedelta(weeks=40, days=84, hours=23,
Christian Heimes895627f2007-12-08 17:28:33 +0000360 ... minutes=50, seconds=600) # adds up to 365 days
Antoine Pitroube6859d2009-11-25 23:02:32 +0000361 >>> year.total_seconds()
362 31536000.0
Christian Heimes895627f2007-12-08 17:28:33 +0000363 >>> year == another_year
364 True
365 >>> ten_years = 10 * year
366 >>> ten_years, ten_years.days // 365
367 (datetime.timedelta(3650), 10)
368 >>> nine_years = ten_years - year
369 >>> nine_years, nine_years.days // 365
370 (datetime.timedelta(3285), 9)
371 >>> three_years = nine_years // 3;
372 >>> three_years, three_years.days // 365
373 (datetime.timedelta(1095), 3)
374 >>> abs(three_years - ten_years) == 2 * three_years + year
375 True
376
Georg Brandl116aa622007-08-15 14:28:22 +0000377
378.. _datetime-date:
379
380:class:`date` Objects
381---------------------
382
383A :class:`date` object represents a date (year, month and day) in an idealized
384calendar, the current Gregorian calendar indefinitely extended in both
385directions. January 1 of year 1 is called day number 1, January 2 of year 1 is
386called day number 2, and so on. This matches the definition of the "proleptic
387Gregorian" calendar in Dershowitz and Reingold's book Calendrical Calculations,
388where it's the base calendar for all computations. See the book for algorithms
389for converting between proleptic Gregorian ordinals and many other calendar
390systems.
391
392
393.. class:: date(year, month, day)
394
Georg Brandl5c106642007-11-29 17:41:05 +0000395 All arguments are required. Arguments may be integers, in the following
Georg Brandl116aa622007-08-15 14:28:22 +0000396 ranges:
397
398 * ``MINYEAR <= year <= MAXYEAR``
399 * ``1 <= month <= 12``
400 * ``1 <= day <= number of days in the given month and year``
401
402 If an argument outside those ranges is given, :exc:`ValueError` is raised.
403
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000404
Georg Brandl116aa622007-08-15 14:28:22 +0000405Other constructors, all class methods:
406
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000407.. classmethod:: date.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000408
409 Return the current local date. This is equivalent to
410 ``date.fromtimestamp(time.time())``.
411
412
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000413.. classmethod:: date.fromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000414
415 Return the local date corresponding to the POSIX timestamp, such as is returned
Victor Stinner5d272cc2012-03-13 13:35:55 +0100416 by :func:`time.time`. This may raise :exc:`OverflowError`, if the timestamp is out
Victor Stinnerecc6e662012-03-14 00:39:29 +0100417 of the range of values supported by the platform C :c:func:`localtime` function,
418 and :exc:`OSError` on :c:func:`localtime` failure.
Georg Brandl116aa622007-08-15 14:28:22 +0000419 It's common for this to be restricted to years from 1970 through 2038. Note
420 that on non-POSIX systems that include leap seconds in their notion of a
421 timestamp, leap seconds are ignored by :meth:`fromtimestamp`.
422
Victor Stinner5d272cc2012-03-13 13:35:55 +0100423 .. versionchanged:: 3.3
424 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
425 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100426 :c:func:`localtime` function. Raise :exc:`OSError` instead of
427 :exc:`ValueError` on :c:func:`localtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100428
Georg Brandl116aa622007-08-15 14:28:22 +0000429
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000430.. classmethod:: date.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000431
432 Return the date corresponding to the proleptic Gregorian ordinal, where January
433 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 <= ordinal <=
434 date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) ==
435 d``.
436
Georg Brandl116aa622007-08-15 14:28:22 +0000437
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000438Class attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000439
440.. attribute:: date.min
441
442 The earliest representable date, ``date(MINYEAR, 1, 1)``.
443
444
445.. attribute:: date.max
446
447 The latest representable date, ``date(MAXYEAR, 12, 31)``.
448
449
450.. attribute:: date.resolution
451
452 The smallest possible difference between non-equal date objects,
453 ``timedelta(days=1)``.
454
Georg Brandl116aa622007-08-15 14:28:22 +0000455
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000456Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000457
458.. attribute:: date.year
459
460 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
461
462
463.. attribute:: date.month
464
465 Between 1 and 12 inclusive.
466
467
468.. attribute:: date.day
469
470 Between 1 and the number of days in the given month of the given year.
471
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000472
Georg Brandl116aa622007-08-15 14:28:22 +0000473Supported operations:
474
475+-------------------------------+----------------------------------------------+
476| Operation | Result |
477+===============================+==============================================+
478| ``date2 = date1 + timedelta`` | *date2* is ``timedelta.days`` days removed |
479| | from *date1*. (1) |
480+-------------------------------+----------------------------------------------+
481| ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 + |
482| | timedelta == date1``. (2) |
483+-------------------------------+----------------------------------------------+
484| ``timedelta = date1 - date2`` | \(3) |
485+-------------------------------+----------------------------------------------+
486| ``date1 < date2`` | *date1* is considered less than *date2* when |
487| | *date1* precedes *date2* in time. (4) |
488+-------------------------------+----------------------------------------------+
489
490Notes:
491
492(1)
493 *date2* is moved forward in time if ``timedelta.days > 0``, or backward if
494 ``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``.
495 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
496 :exc:`OverflowError` is raised if ``date2.year`` would be smaller than
497 :const:`MINYEAR` or larger than :const:`MAXYEAR`.
498
499(2)
500 This isn't quite equivalent to date1 + (-timedelta), because -timedelta in
501 isolation can overflow in cases where date1 - timedelta does not.
502 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
503
504(3)
505 This is exact, and cannot overflow. timedelta.seconds and
506 timedelta.microseconds are 0, and date2 + timedelta == date1 after.
507
508(4)
509 In other words, ``date1 < date2`` if and only if ``date1.toordinal() <
510 date2.toordinal()``. In order to stop comparison from falling back to the
511 default scheme of comparing object addresses, date comparison normally raises
512 :exc:`TypeError` if the other comparand isn't also a :class:`date` object.
513 However, ``NotImplemented`` is returned instead if the other comparand has a
514 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
515 chance at implementing mixed-type comparison. If not, when a :class:`date`
516 object is compared to an object of a different type, :exc:`TypeError` is raised
517 unless the comparison is ``==`` or ``!=``. The latter cases return
518 :const:`False` or :const:`True`, respectively.
519
520Dates can be used as dictionary keys. In Boolean contexts, all :class:`date`
521objects are considered to be true.
522
523Instance methods:
524
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400525.. method:: date.replace(year=self.year, month=self.month, day=self.day)
Georg Brandl116aa622007-08-15 14:28:22 +0000526
Senthil Kumarana6bac952011-07-04 11:28:30 -0700527 Return a date with the same value, except for those parameters given new
528 values by whichever keyword arguments are specified. For example, if ``d ==
529 date(2002, 12, 31)``, then ``d.replace(day=26) == date(2002, 12, 26)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000530
531
532.. method:: date.timetuple()
533
534 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
535 The hours, minutes and seconds are 0, and the DST flag is -1. ``d.timetuple()``
536 is equivalent to ``time.struct_time((d.year, d.month, d.day, 0, 0, 0,
Alexander Belopolsky64912482010-06-08 18:59:20 +0000537 d.weekday(), yday, -1))``, where ``yday = d.toordinal() - date(d.year, 1,
538 1).toordinal() + 1`` is the day number within the current year starting with
539 ``1`` for January 1st.
Georg Brandl116aa622007-08-15 14:28:22 +0000540
541
542.. method:: date.toordinal()
543
544 Return the proleptic Gregorian ordinal of the date, where January 1 of year 1
545 has ordinal 1. For any :class:`date` object *d*,
546 ``date.fromordinal(d.toordinal()) == d``.
547
548
549.. method:: date.weekday()
550
551 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
552 For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also
553 :meth:`isoweekday`.
554
555
556.. method:: date.isoweekday()
557
558 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
559 For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also
560 :meth:`weekday`, :meth:`isocalendar`.
561
562
563.. method:: date.isocalendar()
564
565 Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
566
567 The ISO calendar is a widely used variant of the Gregorian calendar. See
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300568 https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm for a good
Mark Dickinsonf964ac22009-11-03 16:29:10 +0000569 explanation.
Georg Brandl116aa622007-08-15 14:28:22 +0000570
571 The ISO year consists of 52 or 53 full weeks, and where a week starts on a
572 Monday and ends on a Sunday. The first week of an ISO year is the first
573 (Gregorian) calendar week of a year containing a Thursday. This is called week
574 number 1, and the ISO year of that Thursday is the same as its Gregorian year.
575
576 For example, 2004 begins on a Thursday, so the first week of ISO year 2004
577 begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004, so that
578 ``date(2003, 12, 29).isocalendar() == (2004, 1, 1)`` and ``date(2004, 1,
579 4).isocalendar() == (2004, 1, 7)``.
580
581
582.. method:: date.isoformat()
583
584 Return a string representing the date in ISO 8601 format, 'YYYY-MM-DD'. For
585 example, ``date(2002, 12, 4).isoformat() == '2002-12-04'``.
586
587
588.. method:: date.__str__()
589
590 For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``.
591
592
593.. method:: date.ctime()
594
595 Return a string representing the date, for example ``date(2002, 12,
596 4).ctime() == 'Wed Dec 4 00:00:00 2002'``. ``d.ctime()`` is equivalent to
597 ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the native C
Georg Brandl60203b42010-10-06 10:11:56 +0000598 :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +0000599 :meth:`date.ctime` does not invoke) conforms to the C standard.
600
601
602.. method:: date.strftime(format)
603
604 Return a string representing the date, controlled by an explicit format string.
David Wolever569a5fa2013-08-12 16:56:02 -0400605 Format codes referring to hours, minutes or seconds will see 0 values. For a
606 complete list of formatting directives, see
607 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000608
Georg Brandl116aa622007-08-15 14:28:22 +0000609
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300610.. method:: date.__format__(format)
611
Martin Panterd5db1472016-02-08 01:34:09 +0000612 Same as :meth:`.date.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +0000613 string for a :class:`.date` object in :ref:`formatted string
614 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -0400615 complete list of formatting directives, see
616 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300617
618
Christian Heimes895627f2007-12-08 17:28:33 +0000619Example of counting days to an event::
620
621 >>> import time
622 >>> from datetime import date
623 >>> today = date.today()
624 >>> today
625 datetime.date(2007, 12, 5)
626 >>> today == date.fromtimestamp(time.time())
627 True
628 >>> my_birthday = date(today.year, 6, 24)
629 >>> if my_birthday < today:
Georg Brandl48310cd2009-01-03 21:18:54 +0000630 ... my_birthday = my_birthday.replace(year=today.year + 1)
Christian Heimes895627f2007-12-08 17:28:33 +0000631 >>> my_birthday
632 datetime.date(2008, 6, 24)
Georg Brandl48310cd2009-01-03 21:18:54 +0000633 >>> time_to_birthday = abs(my_birthday - today)
Christian Heimes895627f2007-12-08 17:28:33 +0000634 >>> time_to_birthday.days
635 202
636
Christian Heimesfe337bf2008-03-23 21:54:12 +0000637Example of working with :class:`date`:
638
639.. doctest::
Christian Heimes895627f2007-12-08 17:28:33 +0000640
641 >>> from datetime import date
642 >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
643 >>> d
644 datetime.date(2002, 3, 11)
645 >>> t = d.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000646 >>> for i in t: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000647 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000648 2002 # year
649 3 # month
650 11 # day
651 0
652 0
653 0
654 0 # weekday (0 = Monday)
655 70 # 70th day in the year
656 -1
657 >>> ic = d.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000658 >>> for i in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000659 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000660 2002 # ISO year
661 11 # ISO week number
662 1 # ISO day number ( 1 = Monday )
663 >>> d.isoformat()
664 '2002-03-11'
665 >>> d.strftime("%d/%m/%y")
666 '11/03/02'
667 >>> d.strftime("%A %d. %B %Y")
668 'Monday 11. March 2002'
Ezio Melotti09f0dde2013-04-04 09:16:15 +0300669 >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
670 'The day is 11, the month is March.'
Christian Heimes895627f2007-12-08 17:28:33 +0000671
Georg Brandl116aa622007-08-15 14:28:22 +0000672
673.. _datetime-datetime:
674
Benjamin Petersond87dd432015-04-25 14:15:16 -0400675:class:`.datetime` Objects
676--------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000677
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300678A :class:`.datetime` object is a single object containing all the information
679from a :class:`date` object and a :class:`.time` object. Like a :class:`date`
680object, :class:`.datetime` assumes the current Gregorian calendar extended in
681both directions; like a time object, :class:`.datetime` assumes there are exactly
Georg Brandl116aa622007-08-15 14:28:22 +00006823600\*24 seconds in every day.
683
684Constructor:
685
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400686.. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000687
688 The year, month and day arguments are required. *tzinfo* may be ``None``, or an
Georg Brandl5c106642007-11-29 17:41:05 +0000689 instance of a :class:`tzinfo` subclass. The remaining arguments may be integers,
690 in the following ranges:
Georg Brandl116aa622007-08-15 14:28:22 +0000691
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400692 * ``MINYEAR <= year <= MAXYEAR``,
693 * ``1 <= month <= 12``,
694 * ``1 <= day <= number of days in the given month and year``,
695 * ``0 <= hour < 24``,
696 * ``0 <= minute < 60``,
697 * ``0 <= second < 60``,
698 * ``0 <= microsecond < 1000000``,
699 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +0000700
701 If an argument outside those ranges is given, :exc:`ValueError` is raised.
702
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400703 .. versionadded:: 3.6
704 Added the ``fold`` argument.
705
Georg Brandl116aa622007-08-15 14:28:22 +0000706Other constructors, all class methods:
707
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000708.. classmethod:: datetime.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000709
Martin Panter16c7cfd2016-04-01 21:48:24 +0000710 Return the current local datetime, with :attr:`.tzinfo` ``None``. This is
Georg Brandl116aa622007-08-15 14:28:22 +0000711 equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`,
712 :meth:`fromtimestamp`.
713
714
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000715.. classmethod:: datetime.now(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000716
717 Return the current local date and time. If optional argument *tz* is ``None``
718 or not specified, this is like :meth:`today`, but, if possible, supplies more
719 precision than can be gotten from going through a :func:`time.time` timestamp
720 (for example, this may be possible on platforms supplying the C
Georg Brandl60203b42010-10-06 10:11:56 +0000721 :c:func:`gettimeofday` function).
Georg Brandl116aa622007-08-15 14:28:22 +0000722
Martin Panter16c7cfd2016-04-01 21:48:24 +0000723 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
724 current date and time are converted to *tz*’s time zone. In this case the
Georg Brandl116aa622007-08-15 14:28:22 +0000725 result is equivalent to ``tz.fromutc(datetime.utcnow().replace(tzinfo=tz))``.
726 See also :meth:`today`, :meth:`utcnow`.
727
728
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000729.. classmethod:: datetime.utcnow()
Georg Brandl116aa622007-08-15 14:28:22 +0000730
Martin Panter16c7cfd2016-04-01 21:48:24 +0000731 Return the current UTC date and time, with :attr:`.tzinfo` ``None``. This is like
Georg Brandl116aa622007-08-15 14:28:22 +0000732 :meth:`now`, but returns the current UTC date and time, as a naive
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300733 :class:`.datetime` object. An aware current UTC datetime can be obtained by
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000734 calling ``datetime.now(timezone.utc)``. See also :meth:`now`.
Georg Brandl116aa622007-08-15 14:28:22 +0000735
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000736.. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000737
738 Return the local date and time corresponding to the POSIX timestamp, such as is
739 returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
740 specified, the timestamp is converted to the platform's local date and time, and
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300741 the returned :class:`.datetime` object is naive.
Georg Brandl116aa622007-08-15 14:28:22 +0000742
Martin Panter16c7cfd2016-04-01 21:48:24 +0000743 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the
744 timestamp is converted to *tz*’s time zone. In this case the result is
Georg Brandl116aa622007-08-15 14:28:22 +0000745 equivalent to
746 ``tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))``.
747
Victor Stinnerecc6e662012-03-14 00:39:29 +0100748 :meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is out of
Georg Brandl60203b42010-10-06 10:11:56 +0000749 the range of values supported by the platform C :c:func:`localtime` or
Victor Stinnerecc6e662012-03-14 00:39:29 +0100750 :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or
751 :c:func:`gmtime` failure.
752 It's common for this to be restricted to years in
Georg Brandl116aa622007-08-15 14:28:22 +0000753 1970 through 2038. Note that on non-POSIX systems that include leap seconds in
754 their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`,
755 and then it's possible to have two timestamps differing by a second that yield
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300756 identical :class:`.datetime` objects. See also :meth:`utcfromtimestamp`.
Georg Brandl116aa622007-08-15 14:28:22 +0000757
Victor Stinner5d272cc2012-03-13 13:35:55 +0100758 .. versionchanged:: 3.3
759 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
760 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100761 :c:func:`localtime` or :c:func:`gmtime` functions. Raise :exc:`OSError`
762 instead of :exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime`
763 failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100764
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400765 .. versionchanged:: 3.6
766 :meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1.
Georg Brandl116aa622007-08-15 14:28:22 +0000767
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000768.. classmethod:: datetime.utcfromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000769
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300770 Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with
Martin Panter16c7cfd2016-04-01 21:48:24 +0000771 :attr:`.tzinfo` ``None``. This may raise :exc:`OverflowError`, if the timestamp is
Victor Stinnerecc6e662012-03-14 00:39:29 +0100772 out of the range of values supported by the platform C :c:func:`gmtime` function,
773 and :exc:`OSError` on :c:func:`gmtime` failure.
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500774 It's common for this to be restricted to years in 1970 through 2038.
Georg Brandl116aa622007-08-15 14:28:22 +0000775
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500776 To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`::
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400777
Alexander Belopolskye2e178e2015-03-01 14:52:07 -0500778 datetime.fromtimestamp(timestamp, timezone.utc)
779
780 On the POSIX compliant platforms, it is equivalent to the following
781 expression::
782
783 datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
784
785 except the latter formula always supports the full years range: between
786 :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400787
Victor Stinner5d272cc2012-03-13 13:35:55 +0100788 .. versionchanged:: 3.3
789 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp
790 is out of the range of values supported by the platform C
Victor Stinner21f58932012-03-14 00:15:40 +0100791 :c:func:`gmtime` function. Raise :exc:`OSError` instead of
792 :exc:`ValueError` on :c:func:`gmtime` failure.
Victor Stinner5d272cc2012-03-13 13:35:55 +0100793
Georg Brandl116aa622007-08-15 14:28:22 +0000794
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000795.. classmethod:: datetime.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000796
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300797 Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal,
Georg Brandl116aa622007-08-15 14:28:22 +0000798 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
799 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and
Martin Panter16c7cfd2016-04-01 21:48:24 +0000800 microsecond of the result are all 0, and :attr:`.tzinfo` is ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000801
802
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400803.. classmethod:: datetime.combine(date, time, tzinfo=self.tzinfo)
Georg Brandl116aa622007-08-15 14:28:22 +0000804
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300805 Return a new :class:`.datetime` object whose date components are equal to the
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400806 given :class:`date` object's, and whose time components
807 are equal to the given :class:`.time` object's. If the *tzinfo*
808 argument is provided, its value is used to set the :attr:`.tzinfo` attribute
809 of the result, otherwise the :attr:`~.time.tzinfo` attribute of the *time* argument
810 is used.
811
812 For any :class:`.datetime` object *d*,
813 ``d == datetime.combine(d.date(), d.time(), d.tzinfo)``. If date is a
Martin Panter16c7cfd2016-04-01 21:48:24 +0000814 :class:`.datetime` object, its time components and :attr:`.tzinfo` attributes
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800815 are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000816
Alexander Belopolsky43746c32016-08-02 17:49:30 -0400817 .. versionchanged:: 3.6
818 Added the *tzinfo* argument.
819
Georg Brandl116aa622007-08-15 14:28:22 +0000820
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000821.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +0000822
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300823 Return a :class:`.datetime` corresponding to *date_string*, parsed according to
Georg Brandl116aa622007-08-15 14:28:22 +0000824 *format*. This is equivalent to ``datetime(*(time.strptime(date_string,
825 format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
826 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 -0400827 time tuple. For a complete list of formatting directives, see
828 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000829
Georg Brandl116aa622007-08-15 14:28:22 +0000830
Georg Brandl116aa622007-08-15 14:28:22 +0000831
832Class attributes:
833
Georg Brandl116aa622007-08-15 14:28:22 +0000834.. attribute:: datetime.min
835
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300836 The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1,
Georg Brandl116aa622007-08-15 14:28:22 +0000837 tzinfo=None)``.
838
839
840.. attribute:: datetime.max
841
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300842 The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
Georg Brandl116aa622007-08-15 14:28:22 +0000843 59, 999999, tzinfo=None)``.
844
845
846.. attribute:: datetime.resolution
847
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300848 The smallest possible difference between non-equal :class:`.datetime` objects,
Georg Brandl116aa622007-08-15 14:28:22 +0000849 ``timedelta(microseconds=1)``.
850
Georg Brandl116aa622007-08-15 14:28:22 +0000851
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000852Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000853
854.. attribute:: datetime.year
855
856 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
857
858
859.. attribute:: datetime.month
860
861 Between 1 and 12 inclusive.
862
863
864.. attribute:: datetime.day
865
866 Between 1 and the number of days in the given month of the given year.
867
868
869.. attribute:: datetime.hour
870
871 In ``range(24)``.
872
873
874.. attribute:: datetime.minute
875
876 In ``range(60)``.
877
878
879.. attribute:: datetime.second
880
881 In ``range(60)``.
882
883
884.. attribute:: datetime.microsecond
885
886 In ``range(1000000)``.
887
888
889.. attribute:: datetime.tzinfo
890
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300891 The object passed as the *tzinfo* argument to the :class:`.datetime` constructor,
Georg Brandl116aa622007-08-15 14:28:22 +0000892 or ``None`` if none was passed.
893
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000894
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400895.. attribute:: datetime.fold
896
897 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
898 repeated interval occurs when clocks are rolled back at the end of daylight saving
899 time or when the UTC offset for the current zone is decreased for political reasons.)
900 The value 0 (1) represents the earlier (later) of the two moments with the same wall
901 time representation.
902
903 .. versionadded:: 3.6
904
Georg Brandl116aa622007-08-15 14:28:22 +0000905Supported operations:
906
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300907+---------------------------------------+--------------------------------+
908| Operation | Result |
909+=======================================+================================+
910| ``datetime2 = datetime1 + timedelta`` | \(1) |
911+---------------------------------------+--------------------------------+
912| ``datetime2 = datetime1 - timedelta`` | \(2) |
913+---------------------------------------+--------------------------------+
914| ``timedelta = datetime1 - datetime2`` | \(3) |
915+---------------------------------------+--------------------------------+
916| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
917| | :class:`.datetime`. (4) |
918+---------------------------------------+--------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000919
920(1)
921 datetime2 is a duration of timedelta removed from datetime1, moving forward in
922 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Martin Panter16c7cfd2016-04-01 21:48:24 +0000923 result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and
Senthil Kumarana6bac952011-07-04 11:28:30 -0700924 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
925 datetime2.year would be smaller than :const:`MINYEAR` or larger than
926 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
927 input is an aware object.
Georg Brandl116aa622007-08-15 14:28:22 +0000928
929(2)
930 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Martin Panter16c7cfd2016-04-01 21:48:24 +0000931 addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input
Senthil Kumarana6bac952011-07-04 11:28:30 -0700932 datetime, and no time zone adjustments are done even if the input is aware.
933 This isn't quite equivalent to datetime1 + (-timedelta), because -timedelta
934 in isolation can overflow in cases where datetime1 - timedelta does not.
Georg Brandl116aa622007-08-15 14:28:22 +0000935
936(3)
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300937 Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if
Georg Brandl116aa622007-08-15 14:28:22 +0000938 both operands are naive, or if both are aware. If one is aware and the other is
939 naive, :exc:`TypeError` is raised.
940
Martin Panter16c7cfd2016-04-01 21:48:24 +0000941 If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute,
942 the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Georg Brandl116aa622007-08-15 14:28:22 +0000943 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
944 are done in this case.
945
Martin Panter16c7cfd2016-04-01 21:48:24 +0000946 If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts
Senthil Kumarana6bac952011-07-04 11:28:30 -0700947 as if *a* and *b* were first converted to naive UTC datetimes first. The
948 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
949 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl116aa622007-08-15 14:28:22 +0000950
951(4)
952 *datetime1* is considered less than *datetime2* when *datetime1* precedes
953 *datetime2* in time.
954
Alexander Belopolsky08313822012-06-15 20:19:47 -0400955 If one comparand is naive and the other is aware, :exc:`TypeError`
956 is raised if an order comparison is attempted. For equality
957 comparisons, naive instances are never equal to aware instances.
958
Martin Panter16c7cfd2016-04-01 21:48:24 +0000959 If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the
960 common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are
961 compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -0700962 attributes, the comparands are first adjusted by subtracting their UTC
963 offsets (obtained from ``self.utcoffset()``).
Georg Brandl116aa622007-08-15 14:28:22 +0000964
Alexander Belopolsky08313822012-06-15 20:19:47 -0400965 .. versionchanged:: 3.3
Martin Panter16c7cfd2016-04-01 21:48:24 +0000966 Equality comparisons between naive and aware :class:`.datetime`
Éric Araujob0f08952012-06-24 16:22:09 -0400967 instances don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -0400968
Georg Brandl116aa622007-08-15 14:28:22 +0000969 .. note::
970
971 In order to stop comparison from falling back to the default scheme of comparing
972 object addresses, datetime comparison normally raises :exc:`TypeError` if the
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300973 other comparand isn't also a :class:`.datetime` object. However,
Georg Brandl116aa622007-08-15 14:28:22 +0000974 ``NotImplemented`` is returned instead if the other comparand has a
975 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300976 chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +0000977 object is compared to an object of a different type, :exc:`TypeError` is raised
978 unless the comparison is ``==`` or ``!=``. The latter cases return
979 :const:`False` or :const:`True`, respectively.
980
Ezio Melotti35ec7f72011-10-02 12:44:50 +0300981:class:`.datetime` objects can be used as dictionary keys. In Boolean contexts,
982all :class:`.datetime` objects are considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +0000983
984Instance methods:
985
Georg Brandl116aa622007-08-15 14:28:22 +0000986.. method:: datetime.date()
987
988 Return :class:`date` object with same year, month and day.
989
990
991.. method:: datetime.time()
992
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400993 Return :class:`.time` object with same hour, minute, second, microsecond and fold.
Martin Panter16c7cfd2016-04-01 21:48:24 +0000994 :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`.
Georg Brandl116aa622007-08-15 14:28:22 +0000995
Alexander Belopolsky53868aa2016-08-24 18:30:16 -0400996 .. versionchanged:: 3.6
997 The fold value is copied to the returned :class:`.time` object.
998
Georg Brandl116aa622007-08-15 14:28:22 +0000999
1000.. method:: datetime.timetz()
1001
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001002 Return :class:`.time` object with same hour, minute, second, microsecond, fold, and
Senthil Kumarana6bac952011-07-04 11:28:30 -07001003 tzinfo attributes. See also method :meth:`time`.
Georg Brandl116aa622007-08-15 14:28:22 +00001004
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001005 .. versionchanged:: 3.6
1006 The fold value is copied to the returned :class:`.time` object.
Georg Brandl116aa622007-08-15 14:28:22 +00001007
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001008
1009.. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \
1010 hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \
1011 tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001012
Senthil Kumarana6bac952011-07-04 11:28:30 -07001013 Return a datetime with the same attributes, except for those attributes given
1014 new values by whichever keyword arguments are specified. Note that
1015 ``tzinfo=None`` can be specified to create a naive datetime from an aware
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001016 datetime with no conversion of date and time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001017
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001018 .. versionadded:: 3.6
1019 Added the ``fold`` argument.
1020
Georg Brandl116aa622007-08-15 14:28:22 +00001021
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001022.. method:: datetime.astimezone(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001023
Martin Panter16c7cfd2016-04-01 21:48:24 +00001024 Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*,
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001025 adjusting the date and time data so the result is the same UTC time as
Senthil Kumarana6bac952011-07-04 11:28:30 -07001026 *self*, but in *tz*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001027
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001028 If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001029 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If *self*
1030 is naive (``self.tzinfo is None``), it is presumed to represent time in the
1031 system timezone.
Georg Brandl116aa622007-08-15 14:28:22 +00001032
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001033 If called without arguments (or with ``tz=None``) the system local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001034 timezone is assumed for the target timezone. The ``.tzinfo`` attribute of the converted
Alexander Belopolskyfdc860f2012-06-22 12:23:23 -04001035 datetime instance will be set to an instance of :class:`timezone`
1036 with the zone name and offset obtained from the OS.
1037
Georg Brandl116aa622007-08-15 14:28:22 +00001038 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001039 adjustment of date or time data is performed. Else the result is local
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001040 time in the timezone *tz*, representing the same UTC time as *self*: after
1041 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have
1042 the same date and time data as ``dt - dt.utcoffset()``.
Georg Brandl116aa622007-08-15 14:28:22 +00001043
1044 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001045 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl116aa622007-08-15 14:28:22 +00001046 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001047 conversion of date and time data, use ``dt.replace(tzinfo=None)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001048
1049 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
1050 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
1051 Ignoring error cases, :meth:`astimezone` acts like::
1052
1053 def astimezone(self, tz):
1054 if self.tzinfo is tz:
1055 return self
1056 # Convert self to UTC, and attach the new time zone object.
1057 utc = (self - self.utcoffset()).replace(tzinfo=tz)
1058 # Convert from UTC to tz's local time.
1059 return tz.fromutc(utc)
1060
Georg Brandlee0be402012-06-26 09:14:40 +02001061 .. versionchanged:: 3.3
1062 *tz* now can be omitted.
1063
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001064 .. versionchanged:: 3.6
1065 The :meth:`astimezone` method can now be called on naive instances that
1066 are presumed to represent system local time.
1067
Georg Brandl116aa622007-08-15 14:28:22 +00001068
1069.. method:: datetime.utcoffset()
1070
Martin Panter16c7cfd2016-04-01 21:48:24 +00001071 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001072 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
1073 return ``None``, or a :class:`timedelta` object representing a whole number of
1074 minutes with magnitude less than one day.
1075
1076
1077.. method:: datetime.dst()
1078
Martin Panter16c7cfd2016-04-01 21:48:24 +00001079 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001080 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
1081 ``None``, or a :class:`timedelta` object representing a whole number of minutes
1082 with magnitude less than one day.
1083
1084
1085.. method:: datetime.tzname()
1086
Martin Panter16c7cfd2016-04-01 21:48:24 +00001087 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001088 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
1089 ``None`` or a string object,
1090
1091
1092.. method:: datetime.timetuple()
1093
1094 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
1095 ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day,
Alexander Belopolsky64912482010-06-08 18:59:20 +00001096 d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday =
1097 d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within
1098 the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag
Martin Panter16c7cfd2016-04-01 21:48:24 +00001099 of the result is set according to the :meth:`dst` method: :attr:`.tzinfo` is
Georg Brandl682d7e02010-10-06 10:26:05 +00001100 ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``;
Alexander Belopolsky64912482010-06-08 18:59:20 +00001101 else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``;
Alexander Belopolskyda62f2f2010-06-09 17:11:01 +00001102 else :attr:`tm_isdst` is set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +00001103
1104
1105.. method:: datetime.utctimetuple()
1106
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001107 If :class:`.datetime` instance *d* is naive, this is the same as
Georg Brandl116aa622007-08-15 14:28:22 +00001108 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
1109 ``d.dst()`` returns. DST is never in effect for a UTC time.
1110
1111 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001112 ``d.utcoffset()``, and a :class:`time.struct_time` for the
1113 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
1114 that an :exc:`OverflowError` may be raised if *d*.year was
1115 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +00001116 boundary.
1117
1118
1119.. method:: datetime.toordinal()
1120
1121 Return the proleptic Gregorian ordinal of the date. The same as
1122 ``self.date().toordinal()``.
1123
Alexander Belopolskya4415142012-06-08 12:33:09 -04001124.. method:: datetime.timestamp()
1125
Martin Panter16c7cfd2016-04-01 21:48:24 +00001126 Return POSIX timestamp corresponding to the :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001127 instance. The return value is a :class:`float` similar to that
1128 returned by :func:`time.time`.
1129
Martin Panter16c7cfd2016-04-01 21:48:24 +00001130 Naive :class:`.datetime` instances are assumed to represent local
Alexander Belopolskya4415142012-06-08 12:33:09 -04001131 time and this method relies on the platform C :c:func:`mktime`
Martin Panter16c7cfd2016-04-01 21:48:24 +00001132 function to perform the conversion. Since :class:`.datetime`
Alexander Belopolskya4415142012-06-08 12:33:09 -04001133 supports wider range of values than :c:func:`mktime` on many
1134 platforms, this method may raise :exc:`OverflowError` for times far
1135 in the past or far in the future.
1136
Martin Panter16c7cfd2016-04-01 21:48:24 +00001137 For aware :class:`.datetime` instances, the return value is computed
Alexander Belopolskya4415142012-06-08 12:33:09 -04001138 as::
1139
1140 (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
1141
1142 .. versionadded:: 3.3
1143
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001144 .. versionchanged:: 3.6
1145 The :meth:`timestamp` method uses the :attr:`.fold` attribute to
1146 disambiguate the times during a repeated interval.
1147
Alexander Belopolskya4415142012-06-08 12:33:09 -04001148 .. note::
1149
1150 There is no method to obtain the POSIX timestamp directly from a
Martin Panter16c7cfd2016-04-01 21:48:24 +00001151 naive :class:`.datetime` instance representing UTC time. If your
Alexander Belopolskya4415142012-06-08 12:33:09 -04001152 application uses this convention and your system timezone is not
1153 set to UTC, you can obtain the POSIX timestamp by supplying
1154 ``tzinfo=timezone.utc``::
1155
1156 timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
1157
1158 or by calculating the timestamp directly::
1159
1160 timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
Georg Brandl116aa622007-08-15 14:28:22 +00001161
1162.. method:: datetime.weekday()
1163
1164 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1165 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1166
1167
1168.. method:: datetime.isoweekday()
1169
1170 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1171 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1172 :meth:`isocalendar`.
1173
1174
1175.. method:: datetime.isocalendar()
1176
1177 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
1178 ``self.date().isocalendar()``.
1179
1180
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001181.. method:: datetime.isoformat(sep='T', timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001182
1183 Return a string representing the date and time in ISO 8601 format,
1184 YYYY-MM-DDTHH:MM:SS.mmmmmm or, if :attr:`microsecond` is 0,
1185 YYYY-MM-DDTHH:MM:SS
1186
1187 If :meth:`utcoffset` does not return ``None``, a 6-character string is
1188 appended, giving the UTC offset in (signed) hours and minutes:
1189 YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM or, if :attr:`microsecond` is 0
1190 YYYY-MM-DDTHH:MM:SS+HH:MM
1191
1192 The optional argument *sep* (default ``'T'``) is a one-character separator,
Christian Heimesfe337bf2008-03-23 21:54:12 +00001193 placed between the date and time portions of the result. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00001194
1195 >>> from datetime import tzinfo, timedelta, datetime
1196 >>> class TZ(tzinfo):
1197 ... def utcoffset(self, dt): return timedelta(minutes=-399)
1198 ...
1199 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1200 '2002-12-25 00:00:00-06:39'
1201
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001202 The optional argument *timespec* specifies the number of additional
1203 components of the time to include (the default is ``'auto'``).
1204 It can be one of the following:
1205
1206 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1207 same as ``'microseconds'`` otherwise.
1208 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
1209 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
1210 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
1211 in HH:MM:SS format.
1212 - ``'milliseconds'``: Include full time, but truncate fractional second
1213 part to milliseconds. HH:MM:SS.sss format.
1214 - ``'microseconds'``: Include full time in HH:MM:SS.mmmmmm format.
1215
1216 .. note::
1217
1218 Excluded time components are truncated, not rounded.
1219
1220 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1221
1222
1223 >>> from datetime import datetime
Marco Buttu909a6f62017-03-18 17:59:33 +01001224 >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001225 '2002-12-25T00:00'
1226 >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
1227 >>> dt.isoformat(timespec='microseconds')
1228 '2015-01-01T12:30:59.000000'
1229
1230 .. versionadded:: 3.6
1231 Added the *timespec* argument.
1232
Georg Brandl116aa622007-08-15 14:28:22 +00001233
1234.. method:: datetime.__str__()
1235
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001236 For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to
Georg Brandl116aa622007-08-15 14:28:22 +00001237 ``d.isoformat(' ')``.
1238
1239
1240.. method:: datetime.ctime()
1241
1242 Return a string representing the date and time, for example ``datetime(2002, 12,
1243 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:40 2002'``. ``d.ctime()`` is
1244 equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the
Georg Brandl60203b42010-10-06 10:11:56 +00001245 native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +00001246 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
1247
1248
1249.. method:: datetime.strftime(format)
1250
1251 Return a string representing the date and time, controlled by an explicit format
David Wolever569a5fa2013-08-12 16:56:02 -04001252 string. For a complete list of formatting directives, see
1253 :ref:`strftime-strptime-behavior`.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001254
Georg Brandl116aa622007-08-15 14:28:22 +00001255
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001256.. method:: datetime.__format__(format)
1257
Martin Panterd5db1472016-02-08 01:34:09 +00001258 Same as :meth:`.datetime.strftime`. This makes it possible to specify a format
Martin Panterbc1ee462016-02-13 00:41:37 +00001259 string for a :class:`.datetime` object in :ref:`formatted string
1260 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001261 complete list of formatting directives, see
1262 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001263
1264
Christian Heimesfe337bf2008-03-23 21:54:12 +00001265Examples of working with datetime objects:
1266
1267.. doctest::
1268
Christian Heimes895627f2007-12-08 17:28:33 +00001269 >>> from datetime import datetime, date, time
1270 >>> # Using datetime.combine()
1271 >>> d = date(2005, 7, 14)
1272 >>> t = time(12, 30)
1273 >>> datetime.combine(d, t)
1274 datetime.datetime(2005, 7, 14, 12, 30)
1275 >>> # Using datetime.now() or datetime.utcnow()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001276 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001277 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Christian Heimesfe337bf2008-03-23 21:54:12 +00001278 >>> datetime.utcnow() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001279 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
1280 >>> # Using datetime.strptime()
1281 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1282 >>> dt
1283 datetime.datetime(2006, 11, 21, 16, 30)
1284 >>> # Using datetime.timetuple() to get tuple of all attributes
1285 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001286 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001287 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001288 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001289 2006 # year
1290 11 # month
1291 21 # day
1292 16 # hour
1293 30 # minute
1294 0 # second
1295 1 # weekday (0 = Monday)
1296 325 # number of days since 1st January
1297 -1 # dst - method tzinfo.dst() returned None
1298 >>> # Date in ISO format
1299 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001300 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001301 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001302 ...
1303 2006 # ISO year
1304 47 # ISO week
1305 2 # ISO weekday
1306 >>> # Formatting datetime
1307 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1308 'Tuesday, 21. November 2006 04:30PM'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001309 >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
1310 'The day is 21, the month is November, the time is 04:30PM.'
Christian Heimes895627f2007-12-08 17:28:33 +00001311
Christian Heimesfe337bf2008-03-23 21:54:12 +00001312Using datetime with tzinfo:
Christian Heimes895627f2007-12-08 17:28:33 +00001313
1314 >>> from datetime import timedelta, datetime, tzinfo
1315 >>> class GMT1(tzinfo):
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001316 ... def utcoffset(self, dt):
1317 ... return timedelta(hours=1) + self.dst(dt)
1318 ... def dst(self, dt):
1319 ... # DST starts last Sunday in March
Christian Heimes895627f2007-12-08 17:28:33 +00001320 ... d = datetime(dt.year, 4, 1) # ends last Sunday in October
1321 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001322 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001323 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001324 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1325 ... return timedelta(hours=1)
1326 ... else:
1327 ... return timedelta(0)
1328 ... def tzname(self,dt):
1329 ... return "GMT +1"
Georg Brandl48310cd2009-01-03 21:18:54 +00001330 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001331 >>> class GMT2(tzinfo):
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001332 ... def utcoffset(self, dt):
1333 ... return timedelta(hours=2) + self.dst(dt)
1334 ... def dst(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001335 ... d = datetime(dt.year, 4, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001336 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001337 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001338 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001339 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
Senthil Kumaran72a80e82012-06-26 20:00:15 +08001340 ... return timedelta(hours=1)
Christian Heimes895627f2007-12-08 17:28:33 +00001341 ... else:
1342 ... return timedelta(0)
1343 ... def tzname(self,dt):
1344 ... return "GMT +2"
Georg Brandl48310cd2009-01-03 21:18:54 +00001345 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001346 >>> gmt1 = GMT1()
1347 >>> # Daylight Saving Time
1348 >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
1349 >>> dt1.dst()
1350 datetime.timedelta(0)
1351 >>> dt1.utcoffset()
1352 datetime.timedelta(0, 3600)
1353 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
1354 >>> dt2.dst()
1355 datetime.timedelta(0, 3600)
1356 >>> dt2.utcoffset()
1357 datetime.timedelta(0, 7200)
1358 >>> # Convert datetime to another time zone
1359 >>> dt3 = dt2.astimezone(GMT2())
1360 >>> dt3 # doctest: +ELLIPSIS
1361 datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
1362 >>> dt2 # doctest: +ELLIPSIS
1363 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
1364 >>> dt2.utctimetuple() == dt3.utctimetuple()
1365 True
Georg Brandl48310cd2009-01-03 21:18:54 +00001366
Christian Heimes895627f2007-12-08 17:28:33 +00001367
Georg Brandl116aa622007-08-15 14:28:22 +00001368
1369.. _datetime-time:
1370
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001371:class:`.time` Objects
1372----------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001373
1374A time object represents a (local) time of day, independent of any particular
1375day, and subject to adjustment via a :class:`tzinfo` object.
1376
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001377.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001378
1379 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
Georg Brandl5c106642007-11-29 17:41:05 +00001380 :class:`tzinfo` subclass. The remaining arguments may be integers, in the
Georg Brandl116aa622007-08-15 14:28:22 +00001381 following ranges:
1382
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001383 * ``0 <= hour < 24``,
1384 * ``0 <= minute < 60``,
1385 * ``0 <= second < 60``,
1386 * ``0 <= microsecond < 1000000``,
1387 * ``fold in [0, 1]``.
Georg Brandl116aa622007-08-15 14:28:22 +00001388
1389 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
1390 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1391
1392Class attributes:
1393
1394
1395.. attribute:: time.min
1396
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001397 The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001398
1399
1400.. attribute:: time.max
1401
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001402 The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``.
Georg Brandl116aa622007-08-15 14:28:22 +00001403
1404
1405.. attribute:: time.resolution
1406
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001407 The smallest possible difference between non-equal :class:`.time` objects,
1408 ``timedelta(microseconds=1)``, although note that arithmetic on
1409 :class:`.time` objects is not supported.
Georg Brandl116aa622007-08-15 14:28:22 +00001410
Georg Brandl116aa622007-08-15 14:28:22 +00001411
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001412Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001413
1414.. attribute:: time.hour
1415
1416 In ``range(24)``.
1417
1418
1419.. attribute:: time.minute
1420
1421 In ``range(60)``.
1422
1423
1424.. attribute:: time.second
1425
1426 In ``range(60)``.
1427
1428
1429.. attribute:: time.microsecond
1430
1431 In ``range(1000000)``.
1432
1433
1434.. attribute:: time.tzinfo
1435
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001436 The object passed as the tzinfo argument to the :class:`.time` constructor, or
Georg Brandl116aa622007-08-15 14:28:22 +00001437 ``None`` if none was passed.
1438
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001439
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001440.. attribute:: time.fold
1441
1442 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A
1443 repeated interval occurs when clocks are rolled back at the end of daylight saving
1444 time or when the UTC offset for the current zone is decreased for political reasons.)
1445 The value 0 (1) represents the earlier (later) of the two moments with the same wall
1446 time representation.
1447
1448 .. versionadded:: 3.6
1449
1450
Georg Brandl116aa622007-08-15 14:28:22 +00001451Supported operations:
1452
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001453* comparison of :class:`.time` to :class:`.time`, where *a* is considered less
Georg Brandl116aa622007-08-15 14:28:22 +00001454 than *b* when *a* precedes *b* in time. If one comparand is naive and the other
Alexander Belopolsky08313822012-06-15 20:19:47 -04001455 is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality
1456 comparisons, naive instances are never equal to aware instances.
1457
1458 If both comparands are aware, and have
Martin Panter16c7cfd2016-04-01 21:48:24 +00001459 the same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is
Senthil Kumarana6bac952011-07-04 11:28:30 -07001460 ignored and the base times are compared. If both comparands are aware and
Martin Panter16c7cfd2016-04-01 21:48:24 +00001461 have different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by
Senthil Kumarana6bac952011-07-04 11:28:30 -07001462 subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1463 to stop mixed-type comparisons from falling back to the default comparison by
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001464 object address, when a :class:`.time` object is compared to an object of a
Senthil Kumaran3aac1792011-07-04 11:43:51 -07001465 different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
Senthil Kumarana6bac952011-07-04 11:28:30 -07001466 ``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl116aa622007-08-15 14:28:22 +00001467
Alexander Belopolsky08313822012-06-15 20:19:47 -04001468 .. versionchanged:: 3.3
Serhiy Storchakaee1b01a2016-12-02 23:13:53 +02001469 Equality comparisons between naive and aware :class:`~datetime.time` instances
Éric Araujob0f08952012-06-24 16:22:09 -04001470 don't raise :exc:`TypeError`.
Alexander Belopolsky08313822012-06-15 20:19:47 -04001471
Georg Brandl116aa622007-08-15 14:28:22 +00001472* hash, use as dict key
1473
1474* efficient pickling
1475
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001476In boolean contexts, a :class:`.time` object is always considered to be true.
Georg Brandl116aa622007-08-15 14:28:22 +00001477
Benjamin Petersonee6bdc02014-03-20 18:00:35 -05001478.. versionchanged:: 3.5
1479 Before Python 3.5, a :class:`.time` object was considered to be false if it
1480 represented midnight in UTC. This behavior was considered obscure and
1481 error-prone and has been removed in Python 3.5. See :issue:`13936` for full
1482 details.
Georg Brandl116aa622007-08-15 14:28:22 +00001483
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001484Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001485
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001486.. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \
1487 microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)
Georg Brandl116aa622007-08-15 14:28:22 +00001488
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001489 Return a :class:`.time` with the same value, except for those attributes given
Senthil Kumarana6bac952011-07-04 11:28:30 -07001490 new values by whichever keyword arguments are specified. Note that
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001491 ``tzinfo=None`` can be specified to create a naive :class:`.time` from an
1492 aware :class:`.time`, without conversion of the time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001493
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001494 .. versionadded:: 3.6
1495 Added the ``fold`` argument.
1496
Georg Brandl116aa622007-08-15 14:28:22 +00001497
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001498.. method:: time.isoformat(timespec='auto')
Georg Brandl116aa622007-08-15 14:28:22 +00001499
1500 Return a string representing the time in ISO 8601 format, HH:MM:SS.mmmmmm or, if
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001501 :attr:`microsecond` is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a
Georg Brandl116aa622007-08-15 14:28:22 +00001502 6-character string is appended, giving the UTC offset in (signed) hours and
1503 minutes: HH:MM:SS.mmmmmm+HH:MM or, if self.microsecond is 0, HH:MM:SS+HH:MM
1504
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001505 The optional argument *timespec* specifies the number of additional
1506 components of the time to include (the default is ``'auto'``).
1507 It can be one of the following:
1508
1509 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0,
1510 same as ``'microseconds'`` otherwise.
1511 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format.
1512 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format.
1513 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second`
1514 in HH:MM:SS format.
1515 - ``'milliseconds'``: Include full time, but truncate fractional second
1516 part to milliseconds. HH:MM:SS.sss format.
1517 - ``'microseconds'``: Include full time in HH:MM:SS.mmmmmm format.
1518
1519 .. note::
1520
1521 Excluded time components are truncated, not rounded.
1522
1523 :exc:`ValueError` will be raised on an invalid *timespec* argument.
1524
1525
1526 >>> from datetime import time
Berker Peksag94f89a62016-06-04 21:36:53 -07001527 >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001528 '12:34'
Berker Peksag94f89a62016-06-04 21:36:53 -07001529 >>> dt = time(hour=12, minute=34, second=56, microsecond=0)
Alexander Belopolskya2998a62016-03-06 14:58:43 -05001530 >>> dt.isoformat(timespec='microseconds')
1531 '12:34:56.000000'
1532 >>> dt.isoformat(timespec='auto')
1533 '12:34:56'
1534
1535 .. versionadded:: 3.6
1536 Added the *timespec* argument.
1537
Georg Brandl116aa622007-08-15 14:28:22 +00001538
1539.. method:: time.__str__()
1540
1541 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1542
1543
1544.. method:: time.strftime(format)
1545
David Wolever569a5fa2013-08-12 16:56:02 -04001546 Return a string representing the time, controlled by an explicit format
1547 string. For a complete list of formatting directives, see
David Woleverbbf4a462013-08-12 17:15:36 -04001548 :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001549
1550
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001551.. method:: time.__format__(format)
1552
Martin Panterd5db1472016-02-08 01:34:09 +00001553 Same as :meth:`.time.strftime`. This makes it possible to specify a format string
Martin Panterbc1ee462016-02-13 00:41:37 +00001554 for a :class:`.time` object in :ref:`formatted string
1555 literals <f-strings>` and when using :meth:`str.format`. For a
David Wolever569a5fa2013-08-12 16:56:02 -04001556 complete list of formatting directives, see
1557 :ref:`strftime-strptime-behavior`.
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001558
1559
Georg Brandl116aa622007-08-15 14:28:22 +00001560.. method:: time.utcoffset()
1561
Martin Panter16c7cfd2016-04-01 21:48:24 +00001562 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001563 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
1564 return ``None`` or a :class:`timedelta` object representing a whole number of
1565 minutes with magnitude less than one day.
1566
1567
1568.. method:: time.dst()
1569
Martin Panter16c7cfd2016-04-01 21:48:24 +00001570 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001571 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
1572 ``None``, or a :class:`timedelta` object representing a whole number of minutes
1573 with magnitude less than one day.
1574
1575
1576.. method:: time.tzname()
1577
Martin Panter16c7cfd2016-04-01 21:48:24 +00001578 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns
Georg Brandl116aa622007-08-15 14:28:22 +00001579 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1580 return ``None`` or a string object.
1581
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001582
Christian Heimesfe337bf2008-03-23 21:54:12 +00001583Example:
Georg Brandl48310cd2009-01-03 21:18:54 +00001584
Xiang Zhang6721c7c2016-12-27 12:23:59 +08001585 >>> from datetime import time, tzinfo, timedelta
Christian Heimes895627f2007-12-08 17:28:33 +00001586 >>> class GMT1(tzinfo):
1587 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001588 ... return timedelta(hours=1)
1589 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001590 ... return timedelta(0)
1591 ... def tzname(self,dt):
1592 ... return "Europe/Prague"
1593 ...
1594 >>> t = time(12, 10, 30, tzinfo=GMT1())
1595 >>> t # doctest: +ELLIPSIS
1596 datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>)
1597 >>> gmt = GMT1()
1598 >>> t.isoformat()
1599 '12:10:30+01:00'
1600 >>> t.dst()
1601 datetime.timedelta(0)
1602 >>> t.tzname()
1603 'Europe/Prague'
1604 >>> t.strftime("%H:%M:%S %Z")
1605 '12:10:30 Europe/Prague'
Ezio Melotti09f0dde2013-04-04 09:16:15 +03001606 >>> 'The {} is {:%H:%M}.'.format("time", t)
1607 'The time is 12:10.'
Christian Heimes895627f2007-12-08 17:28:33 +00001608
Georg Brandl116aa622007-08-15 14:28:22 +00001609
1610.. _datetime-tzinfo:
1611
1612:class:`tzinfo` Objects
1613-----------------------
1614
Martin Panter16c7cfd2016-04-01 21:48:24 +00001615.. class:: tzinfo()
Georg Brandl116aa622007-08-15 14:28:22 +00001616
Martin Panter16c7cfd2016-04-01 21:48:24 +00001617 This is an abstract base class, meaning that this class should not be
1618 instantiated directly. You need to derive a concrete subclass, and (at least)
1619 supply implementations of the standard :class:`tzinfo` methods needed by the
1620 :class:`.datetime` methods you use. The :mod:`datetime` module supplies
1621 a simple concrete subclass of :class:`tzinfo`, :class:`timezone`, which can represent
1622 timezones with fixed offset from UTC such as UTC itself or North American EST and
1623 EDT.
Georg Brandl116aa622007-08-15 14:28:22 +00001624
Martin Panter16c7cfd2016-04-01 21:48:24 +00001625 An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1626 constructors for :class:`.datetime` and :class:`.time` objects. The latter objects
1627 view their attributes as being in local time, and the :class:`tzinfo` object
1628 supports methods revealing offset of local time from UTC, the name of the time
1629 zone, and DST offset, all relative to a date or time object passed to them.
Georg Brandl116aa622007-08-15 14:28:22 +00001630
Martin Panter16c7cfd2016-04-01 21:48:24 +00001631 Special requirement for pickling: A :class:`tzinfo` subclass must have an
1632 :meth:`__init__` method that can be called with no arguments, else it can be
1633 pickled but possibly not unpickled again. This is a technical requirement that
1634 may be relaxed in the future.
1635
1636 A concrete subclass of :class:`tzinfo` may need to implement the following
1637 methods. Exactly which methods are needed depends on the uses made of aware
1638 :mod:`datetime` objects. If in doubt, simply implement all of them.
Georg Brandl116aa622007-08-15 14:28:22 +00001639
1640
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001641.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001642
1643 Return offset of local time from UTC, in minutes east of UTC. If local time is
1644 west of UTC, this should be negative. Note that this is intended to be the
1645 total offset from UTC; for example, if a :class:`tzinfo` object represents both
1646 time zone and DST adjustments, :meth:`utcoffset` should return their sum. If
1647 the UTC offset isn't known, return ``None``. Else the value returned must be a
1648 :class:`timedelta` object specifying a whole number of minutes in the range
1649 -1439 to 1439 inclusive (1440 = 24\*60; the magnitude of the offset must be less
1650 than one day). Most implementations of :meth:`utcoffset` will probably look
1651 like one of these two::
1652
1653 return CONSTANT # fixed-offset class
1654 return CONSTANT + self.dst(dt) # daylight-aware class
1655
1656 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1657 ``None`` either.
1658
1659 The default implementation of :meth:`utcoffset` raises
1660 :exc:`NotImplementedError`.
1661
1662
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001663.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001664
1665 Return the daylight saving time (DST) adjustment, in minutes east of UTC, or
1666 ``None`` if DST information isn't known. Return ``timedelta(0)`` if DST is not
1667 in effect. If DST is in effect, return the offset as a :class:`timedelta` object
1668 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1669 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1670 no need to consult :meth:`dst` unless you're interested in obtaining DST info
Martin Panter16c7cfd2016-04-01 21:48:24 +00001671 separately. For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001672 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1673 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1674 DST changes when crossing time zones.
Georg Brandl116aa622007-08-15 14:28:22 +00001675
1676 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1677 daylight times must be consistent in this sense:
1678
1679 ``tz.utcoffset(dt) - tz.dst(dt)``
1680
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001681 must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo ==
Georg Brandl116aa622007-08-15 14:28:22 +00001682 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1683 zone's "standard offset", which should not depend on the date or the time, but
1684 only on geographic location. The implementation of :meth:`datetime.astimezone`
1685 relies on this, but cannot detect violations; it's the programmer's
1686 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
1687 this, it may be able to override the default implementation of
1688 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
1689
1690 Most implementations of :meth:`dst` will probably look like one of these two::
1691
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001692 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001693 # a fixed-offset class: doesn't account for DST
1694 return timedelta(0)
1695
1696 or ::
1697
Sandro Tosi4bfe03a2011-11-01 10:32:05 +01001698 def dst(self, dt):
Georg Brandl116aa622007-08-15 14:28:22 +00001699 # Code to set dston and dstoff to the time zone's DST
1700 # transition times based on the input dt.year, and expressed
1701 # in standard local time. Then
1702
1703 if dston <= dt.replace(tzinfo=None) < dstoff:
1704 return timedelta(hours=1)
1705 else:
1706 return timedelta(0)
1707
1708 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
1709
1710
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001711.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001712
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001713 Return the time zone name corresponding to the :class:`.datetime` object *dt*, as
Georg Brandl116aa622007-08-15 14:28:22 +00001714 a string. Nothing about string names is defined by the :mod:`datetime` module,
1715 and there's no requirement that it mean anything in particular. For example,
1716 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
1717 valid replies. Return ``None`` if a string name isn't known. Note that this is
1718 a method rather than a fixed string primarily because some :class:`tzinfo`
1719 subclasses will wish to return different names depending on the specific value
1720 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
1721 daylight time.
1722
1723 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
1724
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001725
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001726These methods are called by a :class:`.datetime` or :class:`.time` object, in
1727response to their methods of the same names. A :class:`.datetime` object passes
1728itself as the argument, and a :class:`.time` object passes ``None`` as the
Georg Brandl116aa622007-08-15 14:28:22 +00001729argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001730accept a *dt* argument of ``None``, or of class :class:`.datetime`.
Georg Brandl116aa622007-08-15 14:28:22 +00001731
1732When ``None`` is passed, it's up to the class designer to decide the best
1733response. For example, returning ``None`` is appropriate if the class wishes to
1734say that time objects don't participate in the :class:`tzinfo` protocols. It
1735may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
1736there is no other convention for discovering the standard offset.
1737
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001738When a :class:`.datetime` object is passed in response to a :class:`.datetime`
Georg Brandl116aa622007-08-15 14:28:22 +00001739method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
1740rely on this, unless user code calls :class:`tzinfo` methods directly. The
1741intent is that the :class:`tzinfo` methods interpret *dt* as being in local
1742time, and not need worry about objects in other timezones.
1743
1744There is one more :class:`tzinfo` method that a subclass may wish to override:
1745
1746
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001747.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001748
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001749 This is called from the default :class:`datetime.astimezone()`
1750 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
1751 date and time data are to be viewed as expressing a UTC time. The purpose
1752 of :meth:`fromutc` is to adjust the date and time data, returning an
Senthil Kumarana6bac952011-07-04 11:28:30 -07001753 equivalent datetime in *self*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001754
1755 Most :class:`tzinfo` subclasses should be able to inherit the default
1756 :meth:`fromutc` implementation without problems. It's strong enough to handle
1757 fixed-offset time zones, and time zones accounting for both standard and
1758 daylight time, and the latter even if the DST transition times differ in
1759 different years. An example of a time zone the default :meth:`fromutc`
1760 implementation may not handle correctly in all cases is one where the standard
1761 offset (from UTC) depends on the specific date and time passed, which can happen
1762 for political reasons. The default implementations of :meth:`astimezone` and
1763 :meth:`fromutc` may not produce the result you want if the result is one of the
1764 hours straddling the moment the standard offset changes.
1765
1766 Skipping code for error cases, the default :meth:`fromutc` implementation acts
1767 like::
1768
1769 def fromutc(self, dt):
1770 # raise ValueError error if dt.tzinfo is not self
1771 dtoff = dt.utcoffset()
1772 dtdst = dt.dst()
1773 # raise ValueError if dtoff is None or dtdst is None
1774 delta = dtoff - dtdst # this is self's standard offset
1775 if delta:
1776 dt += delta # convert to standard local time
1777 dtdst = dt.dst()
1778 # raise ValueError if dtdst is None
1779 if dtdst:
1780 return dt + dtdst
1781 else:
1782 return dt
1783
Marco Buttu909a6f62017-03-18 17:59:33 +01001784In the following :download:`tzinfo_examples.py
1785<../includes/tzinfo_examples.py>` file there are some examples of
1786:class:`tzinfo` classes:
Georg Brandl116aa622007-08-15 14:28:22 +00001787
Marco Buttu909a6f62017-03-18 17:59:33 +01001788.. literalinclude:: ../includes/tzinfo_examples.py
Georg Brandl116aa622007-08-15 14:28:22 +00001789
Georg Brandl116aa622007-08-15 14:28:22 +00001790Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
1791subclass accounting for both standard and daylight time, at the DST transition
1792points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00001793minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
17941:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00001795
1796 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
1797 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
1798 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
1799
1800 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
1801
1802 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
1803
1804When DST starts (the "start" line), the local wall clock leaps from 1:59 to
18053:00. A wall time of the form 2:MM doesn't really make sense on that day, so
1806``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001807begins. For example, at the Spring forward transition of 2016, we get
1808
Marco Buttu909a6f62017-03-18 17:59:33 +01001809 >>> from datetime import datetime, timezone
1810 >>> from tzinfo_examples import HOUR, Eastern
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001811 >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
1812 >>> for i in range(4):
1813 ... u = u0 + i*HOUR
1814 ... t = u.astimezone(Eastern)
1815 ... print(u.time(), 'UTC =', t.time(), t.tzname())
1816 ...
1817 05:00:00 UTC = 00:00:00 EST
1818 06:00:00 UTC = 01:00:00 EST
1819 07:00:00 UTC = 03:00:00 EDT
1820 08:00:00 UTC = 04:00:00 EDT
1821
Georg Brandl116aa622007-08-15 14:28:22 +00001822
1823When DST ends (the "end" line), there's a potentially worse problem: there's an
1824hour that can't be spelled unambiguously in local wall time: the last hour of
1825daylight time. In Eastern, that's times of the form 5:MM UTC on the day
1826daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
1827to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
1828:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
1829hours into the same local hour then. In the Eastern example, UTC times of the
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001830form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times
1831have the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1.
1832For example, at the Fall back transition of 2016, we get
Georg Brandl116aa622007-08-15 14:28:22 +00001833
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001834 >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
1835 >>> for i in range(4):
1836 ... u = u0 + i*HOUR
1837 ... t = u.astimezone(Eastern)
1838 ... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
1839 ...
1840 04:00:00 UTC = 00:00:00 EDT 0
1841 05:00:00 UTC = 01:00:00 EDT 0
1842 06:00:00 UTC = 01:00:00 EST 1
1843 07:00:00 UTC = 02:00:00 EST 0
1844
1845Note that the :class:`datetime` instances that differ only by the value of the
1846:attr:`~datetime.fold` attribute are considered equal in comparisons.
1847
1848Applications that can't bear wall-time ambiguities should explicitly check the
Raymond Hettinger15f44ab2016-08-30 10:47:49 -07001849value of the :attr:`~datetime.fold` attribute or avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001850:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
1851or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
1852only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
1853
Sandro Tosid11d0d62012-04-24 19:46:06 +02001854.. seealso::
1855
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001856 `datetuil.tz <https://dateutil.readthedocs.io/en/stable/tz.html>`_
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001857 The standard library has :class:`timezone` class for handling arbitrary
1858 fixed offsets from UTC and :attr:`timezone.utc` as UTC timezone instance.
Sandro Tosid11d0d62012-04-24 19:46:06 +02001859
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001860 *datetuil.tz* library brings the *IANA timezone database* (also known as the
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001861 Olson database) to Python and its usage is recommended.
Sandro Tosi100b8892012-04-28 11:19:37 +02001862
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03001863 `IANA timezone database <https://www.iana.org/time-zones>`_
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001864 The Time Zone Database (often called tz, tzdata or zoneinfo) contains code and
Sandro Tosi100b8892012-04-28 11:19:37 +02001865 data that represent the history of local time for many representative
1866 locations around the globe. It is updated periodically to reflect changes
1867 made by political bodies to time zone boundaries, UTC offsets, and
1868 daylight-saving rules.
Sandro Tosid11d0d62012-04-24 19:46:06 +02001869
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001870
1871.. _datetime-timezone:
1872
1873:class:`timezone` Objects
1874--------------------------
1875
Alexander Belopolsky6d3c9a62011-05-04 10:28:26 -04001876The :class:`timezone` class is a subclass of :class:`tzinfo`, each
1877instance of which represents a timezone defined by a fixed offset from
1878UTC. Note that objects of this class cannot be used to represent
1879timezone information in the locations where different offsets are used
1880in different days of the year or where historical changes have been
1881made to civil time.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001882
1883
Alexander Belopolsky53868aa2016-08-24 18:30:16 -04001884.. class:: timezone(offset, name=None)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001885
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001886 The *offset* argument must be specified as a :class:`timedelta`
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001887 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001888 be strictly between ``-timedelta(hours=24)`` and
1889 ``timedelta(hours=24)`` and represent a whole number of minutes,
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001890 otherwise :exc:`ValueError` is raised.
1891
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001892 The *name* argument is optional. If specified it must be a string that
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001893 will be used as the value returned by the :meth:`datetime.tzname` method.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001894
Benjamin Peterson9b29acd2014-06-22 16:26:39 -07001895 .. versionadded:: 3.2
1896
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001897.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001898
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001899 Return the fixed value specified when the :class:`timezone` instance is
1900 constructed. The *dt* argument is ignored. The return value is a
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001901 :class:`timedelta` instance equal to the difference between the
1902 local time and UTC.
1903
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001904.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001905
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001906 Return the fixed value specified when the :class:`timezone` instance
1907 is constructed. If *name* is not provided in the constructor, the
1908 name returned by ``tzname(dt)`` is generated from the value of the
1909 ``offset`` as follows. If *offset* is ``timedelta(0)``, the name
1910 is "UTC", otherwise it is a string 'UTC±HH:MM', where ± is the sign
1911 of ``offset``, HH and MM are two digits of ``offset.hours`` and
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001912 ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001913
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001914 .. versionchanged:: 3.6
Berker Peksagdf326eb2015-09-09 18:32:50 +03001915 Name generated from ``offset=timedelta(0)`` is now plain 'UTC', not
1916 'UTC+00:00'.
Alexander Belopolsky7827a5b2015-09-06 13:07:21 -04001917
1918
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001919.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001920
1921 Always returns ``None``.
1922
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001923.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001924
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001925 Return ``dt + offset``. The *dt* argument must be an aware
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001926 :class:`.datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001927
1928Class attributes:
1929
1930.. attribute:: timezone.utc
1931
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001932 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00001933
Georg Brandl116aa622007-08-15 14:28:22 +00001934
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001935.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00001936
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001937:meth:`strftime` and :meth:`strptime` Behavior
1938----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001939
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001940:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a
Georg Brandl116aa622007-08-15 14:28:22 +00001941``strftime(format)`` method, to create a string representing the time under the
1942control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
1943acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
1944although not all objects support a :meth:`timetuple` method.
1945
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001946Conversely, the :meth:`datetime.strptime` class method creates a
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001947:class:`.datetime` object from a string representing a date and time and a
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001948corresponding format string. ``datetime.strptime(date_string, format)`` is
1949equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``.
1950
Ezio Melotti35ec7f72011-10-02 12:44:50 +03001951For :class:`.time` objects, the format codes for year, month, and day should not
Georg Brandl116aa622007-08-15 14:28:22 +00001952be used, as time objects have no such values. If they're used anyway, ``1900``
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001953is substituted for the year, and ``1`` for the month and day.
Georg Brandl116aa622007-08-15 14:28:22 +00001954
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001955For :class:`date` objects, the format codes for hours, minutes, seconds, and
1956microseconds should not be used, as :class:`date` objects have no such
1957values. If they're used anyway, ``0`` is substituted for them.
1958
Georg Brandl116aa622007-08-15 14:28:22 +00001959The full set of format codes supported varies across platforms, because Python
1960calls the platform C library's :func:`strftime` function, and platform
Georg Brandlb7117af2013-10-13 18:28:25 +02001961variations are common. To see the full set of format codes supported on your
1962platform, consult the :manpage:`strftime(3)` documentation.
Christian Heimes895627f2007-12-08 17:28:33 +00001963
1964The following is a list of all the format codes that the C standard (1989
1965version) requires, and these work on all platforms with a standard C
1966implementation. Note that the 1999 version of the C standard added additional
1967format codes.
Georg Brandl116aa622007-08-15 14:28:22 +00001968
David Wolever569a5fa2013-08-12 16:56:02 -04001969+-----------+--------------------------------+------------------------+-------+
1970| Directive | Meaning | Example | Notes |
1971+===========+================================+========================+=======+
1972| ``%a`` | Weekday as locale's || Sun, Mon, ..., Sat | \(1) |
1973| | abbreviated name. | (en_US); | |
1974| | || So, Mo, ..., Sa | |
1975| | | (de_DE) | |
1976+-----------+--------------------------------+------------------------+-------+
1977| ``%A`` | Weekday as locale's full name. || Sunday, Monday, ..., | \(1) |
1978| | | Saturday (en_US); | |
1979| | || Sonntag, Montag, ..., | |
1980| | | Samstag (de_DE) | |
1981+-----------+--------------------------------+------------------------+-------+
1982| ``%w`` | Weekday as a decimal number, | 0, 1, ..., 6 | |
1983| | where 0 is Sunday and 6 is | | |
1984| | Saturday. | | |
1985+-----------+--------------------------------+------------------------+-------+
1986| ``%d`` | Day of the month as a | 01, 02, ..., 31 | |
1987| | zero-padded decimal number. | | |
1988+-----------+--------------------------------+------------------------+-------+
1989| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
1990| | name. | (en_US); | |
1991| | || Jan, Feb, ..., Dez | |
1992| | | (de_DE) | |
1993+-----------+--------------------------------+------------------------+-------+
1994| ``%B`` | Month as locale's full name. || January, February, | \(1) |
1995| | | ..., December (en_US);| |
1996| | || Januar, Februar, ..., | |
1997| | | Dezember (de_DE) | |
1998+-----------+--------------------------------+------------------------+-------+
1999| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | |
2000| | decimal number. | | |
2001+-----------+--------------------------------+------------------------+-------+
2002| ``%y`` | Year without century as a | 00, 01, ..., 99 | |
2003| | zero-padded decimal number. | | |
2004+-----------+--------------------------------+------------------------+-------+
2005| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
David Wolever5d07e702013-08-14 14:41:48 -04002006| | number. | 2014, ..., 9998, 9999 | |
David Wolever569a5fa2013-08-12 16:56:02 -04002007+-----------+--------------------------------+------------------------+-------+
2008| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | |
2009| | zero-padded decimal number. | | |
2010+-----------+--------------------------------+------------------------+-------+
2011| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | |
2012| | zero-padded decimal number. | | |
2013+-----------+--------------------------------+------------------------+-------+
2014| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
2015| | AM or PM. || am, pm (de_DE) | \(3) |
2016+-----------+--------------------------------+------------------------+-------+
2017| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | |
2018| | decimal number. | | |
2019+-----------+--------------------------------+------------------------+-------+
2020| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4) |
2021| | decimal number. | | |
2022+-----------+--------------------------------+------------------------+-------+
2023| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
2024| | number, zero-padded on the | 999999 | |
2025| | left. | | |
2026+-----------+--------------------------------+------------------------+-------+
2027| ``%z`` | UTC offset in the form +HHMM | (empty), +0000, -0400, | \(6) |
2028| | or -HHMM (empty string if the | +1030 | |
Berker Peksagbace9762016-05-04 23:25:44 +03002029| | object is naive). | | |
David Wolever569a5fa2013-08-12 16:56:02 -04002030+-----------+--------------------------------+------------------------+-------+
2031| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | |
2032| | if the object is naive). | | |
2033+-----------+--------------------------------+------------------------+-------+
2034| ``%j`` | Day of the year as a | 001, 002, ..., 366 | |
2035| | zero-padded decimal number. | | |
2036+-----------+--------------------------------+------------------------+-------+
2037| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7) |
2038| | (Sunday as the first day of | | |
2039| | the week) as a zero padded | | |
2040| | decimal number. All days in a | | |
2041| | new year preceding the first | | |
2042| | Sunday are considered to be in | | |
2043| | week 0. | | |
2044+-----------+--------------------------------+------------------------+-------+
2045| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7) |
2046| | (Monday as the first day of | | |
2047| | the week) as a decimal number. | | |
2048| | All days in a new year | | |
2049| | preceding the first Monday | | |
2050| | are considered to be in | | |
2051| | week 0. | | |
2052+-----------+--------------------------------+------------------------+-------+
2053| ``%c`` | Locale's appropriate date and || Tue Aug 16 21:30:00 | \(1) |
2054| | time representation. | 1988 (en_US); | |
2055| | || Di 16 Aug 21:30:00 | |
2056| | | 1988 (de_DE) | |
2057+-----------+--------------------------------+------------------------+-------+
2058| ``%x`` | Locale's appropriate date || 08/16/88 (None); | \(1) |
2059| | representation. || 08/16/1988 (en_US); | |
2060| | || 16.08.1988 (de_DE) | |
2061+-----------+--------------------------------+------------------------+-------+
2062| ``%X`` | Locale's appropriate time || 21:30:00 (en_US); | \(1) |
2063| | representation. || 21:30:00 (de_DE) | |
2064+-----------+--------------------------------+------------------------+-------+
2065| ``%%`` | A literal ``'%'`` character. | % | |
2066+-----------+--------------------------------+------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00002067
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002068Several additional directives not required by the C89 standard are included for
2069convenience. These parameters all correspond to ISO 8601 date values. These
2070may not be available on all platforms when used with the :meth:`strftime`
2071method. The ISO 8601 year and ISO 8601 week directives are not interchangeable
2072with the year and week number directives above. Calling :meth:`strptime` with
2073incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
2074
2075+-----------+--------------------------------+------------------------+-------+
2076| Directive | Meaning | Example | Notes |
2077+===========+================================+========================+=======+
2078| ``%G`` | ISO 8601 year with century | 0001, 0002, ..., 2013, | \(8) |
2079| | representing the year that | 2014, ..., 9998, 9999 | |
2080| | contains the greater part of | | |
2081| | the ISO week (``%V``). | | |
2082+-----------+--------------------------------+------------------------+-------+
2083| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
2084| | number where 1 is Monday. | | |
2085+-----------+--------------------------------+------------------------+-------+
2086| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8) |
2087| | number with Monday as | | |
2088| | the first day of the week. | | |
2089| | Week 01 is the week containing | | |
2090| | Jan 4. | | |
2091+-----------+--------------------------------+------------------------+-------+
2092
2093.. versionadded:: 3.6
2094 ``%G``, ``%u`` and ``%V`` were added.
2095
Christian Heimes895627f2007-12-08 17:28:33 +00002096Notes:
2097
2098(1)
David Wolever569a5fa2013-08-12 16:56:02 -04002099 Because the format depends on the current locale, care should be taken when
2100 making assumptions about the output value. Field orderings will vary (for
2101 example, "month/day/year" versus "day/month/year"), and the output may
2102 contain Unicode characters encoded using the locale's default encoding (for
Georg Brandlad321532013-10-29 08:05:10 +01002103 example, if the current locale is ``ja_JP``, the default encoding could be
David Wolever569a5fa2013-08-12 16:56:02 -04002104 any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale`
2105 to determine the current locale's encoding).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002106
2107(2)
David Wolever569a5fa2013-08-12 16:56:02 -04002108 The :meth:`strptime` method can parse years in the full [1, 9999] range, but
2109 years < 1000 must be zero-filled to 4-digit width.
Alexander Belopolsky085556a2011-01-10 23:28:33 +00002110
2111 .. versionchanged:: 3.2
2112 In previous versions, :meth:`strftime` method was restricted to
2113 years >= 1900.
2114
Alexander Belopolsky5611a1c2011-05-02 14:14:48 -04002115 .. versionchanged:: 3.3
2116 In version 3.2, :meth:`strftime` method was restricted to
2117 years >= 1000.
2118
David Wolever569a5fa2013-08-12 16:56:02 -04002119(3)
2120 When used with the :meth:`strptime` method, the ``%p`` directive only affects
2121 the output hour field if the ``%I`` directive is used to parse the hour.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00002122
David Wolever569a5fa2013-08-12 16:56:02 -04002123(4)
2124 Unlike the :mod:`time` module, the :mod:`datetime` module does not support
2125 leap seconds.
2126
2127(5)
2128 When used with the :meth:`strptime` method, the ``%f`` directive
2129 accepts from one to six digits and zero pads on the right. ``%f`` is
2130 an extension to the set of format characters in the C standard (but
2131 implemented separately in datetime objects, and therefore always
2132 available).
2133
2134(6)
2135 For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
2136 strings.
2137
2138 For an aware object:
2139
2140 ``%z``
2141 :meth:`utcoffset` is transformed into a 5-character string of the form
2142 +HHMM or -HHMM, where HH is a 2-digit string giving the number of UTC
2143 offset hours, and MM is a 2-digit string giving the number of UTC offset
2144 minutes. For example, if :meth:`utcoffset` returns
2145 ``timedelta(hours=-3, minutes=-30)``, ``%z`` is replaced with the string
2146 ``'-0330'``.
2147
2148 ``%Z``
2149 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty
2150 string. Otherwise ``%Z`` is replaced by the returned value, which must
2151 be a string.
2152
2153 .. versionchanged:: 3.2
2154 When the ``%z`` directive is provided to the :meth:`strptime` method, an
2155 aware :class:`.datetime` object will be produced. The ``tzinfo`` of the
2156 result will be set to a :class:`timezone` instance.
2157
2158(7)
2159 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used
Alexander Belopolsky68713e42015-10-06 13:29:56 -04002160 in calculations when the day of the week and the calendar year (``%Y``)
2161 are specified.
2162
2163(8)
2164 Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the
2165 day of the week and the ISO year (``%G``) are specified in a
2166 :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
Martin Panterf1579822016-05-26 06:03:33 +00002167 interchangeable.
R David Murray9075d8b2012-05-14 22:14:46 -04002168
2169.. rubric:: Footnotes
2170
2171.. [#] If, that is, we ignore the effects of Relativity