blob: 3bda2abe5b0426f372a45ddc29397fedada7b319 [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.
6.. moduleauthor:: Tim Peters <tim@zope.com>
7.. sectionauthor:: Tim Peters <tim@zope.com>
8.. sectionauthor:: A.M. Kuchling <amk@amk.ca>
9
Christian Heimes5b5e81c2007-12-31 16:14:33 +000010.. XXX what order should the types be discussed in?
Georg Brandl116aa622007-08-15 14:28:22 +000011
Georg Brandl116aa622007-08-15 14:28:22 +000012The :mod:`datetime` module supplies classes for manipulating dates and times in
13both simple and complex ways. While date and time arithmetic is supported, the
Senthil Kumarana6bac952011-07-04 11:28:30 -070014focus of the implementation is on efficient attribute extraction for output
Georg Brandl116aa622007-08-15 14:28:22 +000015formatting and manipulation. For related
16functionality, see also the :mod:`time` and :mod:`calendar` modules.
17
18There are two kinds of date and time objects: "naive" and "aware". This
19distinction refers to whether the object has any notion of time zone, daylight
20saving time, or other kind of algorithmic or political time adjustment. Whether
21a naive :class:`datetime` object represents Coordinated Universal Time (UTC),
22local time, or time in some other timezone is purely up to the program, just
23like it's up to the program whether a particular number represents metres,
24miles, or mass. Naive :class:`datetime` objects are easy to understand and to
25work with, at the cost of ignoring some aspects of reality.
26
27For applications requiring more, :class:`datetime` and :class:`time` objects
Senthil Kumarana6bac952011-07-04 11:28:30 -070028have an optional time zone information attribute, :attr:`tzinfo`, that can contain
Georg Brandl116aa622007-08-15 14:28:22 +000029an instance of a subclass of the abstract :class:`tzinfo` class. These
30:class:`tzinfo` objects capture information about the offset from UTC time, the
Alexander Belopolsky4e749a12010-06-14 14:15:50 +000031time zone name, and whether Daylight Saving Time is in effect. Note that only
32one concrete :class:`tzinfo` class, the :class:`timezone` class, is supplied by the
33:mod:`datetime` module. The :class:`timezone` class can reprsent simple
34timezones with fixed offset from UTC such as UTC itself or North American EST and
35EDT timezones. Supporting timezones at whatever level of detail is
36required is up to the application. The rules for time adjustment across the
37world are more political than rational, change frequently, and there is no
38standard suitable for every application aside from UTC.
Georg Brandl116aa622007-08-15 14:28:22 +000039
40The :mod:`datetime` module exports the following constants:
41
Georg Brandl116aa622007-08-15 14:28:22 +000042.. data:: MINYEAR
43
44 The smallest year number allowed in a :class:`date` or :class:`datetime` object.
45 :const:`MINYEAR` is ``1``.
46
47
48.. data:: MAXYEAR
49
50 The largest year number allowed in a :class:`date` or :class:`datetime` object.
51 :const:`MAXYEAR` is ``9999``.
52
53
54.. seealso::
55
56 Module :mod:`calendar`
57 General calendar related functions.
58
59 Module :mod:`time`
60 Time access and conversions.
61
62
63Available Types
64---------------
65
Georg Brandl116aa622007-08-15 14:28:22 +000066.. class:: date
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000067 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000068
69 An idealized naive date, assuming the current Gregorian calendar always was, and
70 always will be, in effect. Attributes: :attr:`year`, :attr:`month`, and
71 :attr:`day`.
72
73
74.. class:: time
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000075 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000076
77 An idealized time, independent of any particular day, assuming that every day
78 has exactly 24\*60\*60 seconds (there is no notion of "leap seconds" here).
79 Attributes: :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
80 and :attr:`tzinfo`.
81
82
83.. class:: datetime
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000084 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000085
86 A combination of a date and a time. Attributes: :attr:`year`, :attr:`month`,
87 :attr:`day`, :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
88 and :attr:`tzinfo`.
89
90
91.. class:: timedelta
Benjamin Peterson4ac9ce42009-10-04 14:49:41 +000092 :noindex:
Georg Brandl116aa622007-08-15 14:28:22 +000093
94 A duration expressing the difference between two :class:`date`, :class:`time`,
95 or :class:`datetime` instances to microsecond resolution.
96
97
98.. class:: tzinfo
99
100 An abstract base class for time zone information objects. These are used by the
101 :class:`datetime` and :class:`time` classes to provide a customizable notion of
102 time adjustment (for example, to account for time zone and/or daylight saving
103 time).
104
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000105.. class:: timezone
106
107 A class that implements the :class:`tzinfo` abstract base class as a
108 fixed offset from the UTC.
109
110 .. versionadded:: 3.2
111
112
Georg Brandl116aa622007-08-15 14:28:22 +0000113Objects of these types are immutable.
114
115Objects of the :class:`date` type are always naive.
116
117An object *d* of type :class:`time` or :class:`datetime` may be naive or aware.
118*d* is aware if ``d.tzinfo`` is not ``None`` and ``d.tzinfo.utcoffset(d)`` does
119not return ``None``. If ``d.tzinfo`` is ``None``, or if ``d.tzinfo`` is not
120``None`` but ``d.tzinfo.utcoffset(d)`` returns ``None``, *d* is naive.
121
122The distinction between naive and aware doesn't apply to :class:`timedelta`
123objects.
124
125Subclass relationships::
126
127 object
128 timedelta
129 tzinfo
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000130 timezone
Georg Brandl116aa622007-08-15 14:28:22 +0000131 time
132 date
133 datetime
134
135
136.. _datetime-timedelta:
137
138:class:`timedelta` Objects
139--------------------------
140
141A :class:`timedelta` object represents a duration, the difference between two
142dates or times.
143
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000144.. class:: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Georg Brandl116aa622007-08-15 14:28:22 +0000145
Georg Brandl5c106642007-11-29 17:41:05 +0000146 All arguments are optional and default to ``0``. Arguments may be integers
Georg Brandl116aa622007-08-15 14:28:22 +0000147 or floats, and may be positive or negative.
148
149 Only *days*, *seconds* and *microseconds* are stored internally. Arguments are
150 converted to those units:
151
152 * A millisecond is converted to 1000 microseconds.
153 * A minute is converted to 60 seconds.
154 * An hour is converted to 3600 seconds.
155 * A week is converted to 7 days.
156
157 and days, seconds and microseconds are then normalized so that the
158 representation is unique, with
159
160 * ``0 <= microseconds < 1000000``
161 * ``0 <= seconds < 3600*24`` (the number of seconds in one day)
162 * ``-999999999 <= days <= 999999999``
163
164 If any argument is a float and there are fractional microseconds, the fractional
165 microseconds left over from all arguments are combined and their sum is rounded
166 to the nearest microsecond. If no argument is a float, the conversion and
167 normalization processes are exact (no information is lost).
168
169 If the normalized value of days lies outside the indicated range,
170 :exc:`OverflowError` is raised.
171
172 Note that normalization of negative values may be surprising at first. For
Christian Heimesfe337bf2008-03-23 21:54:12 +0000173 example,
Georg Brandl116aa622007-08-15 14:28:22 +0000174
Christian Heimes895627f2007-12-08 17:28:33 +0000175 >>> from datetime import timedelta
Georg Brandl116aa622007-08-15 14:28:22 +0000176 >>> d = timedelta(microseconds=-1)
177 >>> (d.days, d.seconds, d.microseconds)
178 (-1, 86399, 999999)
179
Georg Brandl116aa622007-08-15 14:28:22 +0000180
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000181Class attributes are:
Georg Brandl116aa622007-08-15 14:28:22 +0000182
183.. attribute:: timedelta.min
184
185 The most negative :class:`timedelta` object, ``timedelta(-999999999)``.
186
187
188.. attribute:: timedelta.max
189
190 The most positive :class:`timedelta` object, ``timedelta(days=999999999,
191 hours=23, minutes=59, seconds=59, microseconds=999999)``.
192
193
194.. attribute:: timedelta.resolution
195
196 The smallest possible difference between non-equal :class:`timedelta` objects,
197 ``timedelta(microseconds=1)``.
198
199Note that, because of normalization, ``timedelta.max`` > ``-timedelta.min``.
200``-timedelta.max`` is not representable as a :class:`timedelta` object.
201
202Instance attributes (read-only):
203
204+------------------+--------------------------------------------+
205| Attribute | Value |
206+==================+============================================+
207| ``days`` | Between -999999999 and 999999999 inclusive |
208+------------------+--------------------------------------------+
209| ``seconds`` | Between 0 and 86399 inclusive |
210+------------------+--------------------------------------------+
211| ``microseconds`` | Between 0 and 999999 inclusive |
212+------------------+--------------------------------------------+
213
214Supported operations:
215
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000216.. XXX this table is too wide!
Georg Brandl116aa622007-08-15 14:28:22 +0000217
218+--------------------------------+-----------------------------------------------+
219| Operation | Result |
220+================================+===============================================+
221| ``t1 = t2 + t3`` | Sum of *t2* and *t3*. Afterwards *t1*-*t2* == |
222| | *t3* and *t1*-*t3* == *t2* are true. (1) |
223+--------------------------------+-----------------------------------------------+
224| ``t1 = t2 - t3`` | Difference of *t2* and *t3*. Afterwards *t1* |
225| | == *t2* - *t3* and *t2* == *t1* + *t3* are |
226| | true. (1) |
227+--------------------------------+-----------------------------------------------+
Georg Brandl5c106642007-11-29 17:41:05 +0000228| ``t1 = t2 * i or t1 = i * t2`` | Delta multiplied by an integer. |
Georg Brandl116aa622007-08-15 14:28:22 +0000229| | Afterwards *t1* // i == *t2* is true, |
230| | provided ``i != 0``. |
231+--------------------------------+-----------------------------------------------+
232| | In general, *t1* \* i == *t1* \* (i-1) + *t1* |
233| | is true. (1) |
234+--------------------------------+-----------------------------------------------+
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000235| ``t1 = t2 * f or t1 = f * t2`` | Delta multiplied by a float. The result is |
236| | rounded to the nearest multiple of |
237| | timedelta.resolution using round-half-to-even.|
238+--------------------------------+-----------------------------------------------+
Mark Dickinson7c186e22010-04-20 22:32:49 +0000239| ``f = t2 / t3`` | Division (3) of *t2* by *t3*. Returns a |
240| | :class:`float` object. |
241+--------------------------------+-----------------------------------------------+
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000242| ``t1 = t2 / f or t1 = t2 / i`` | Delta divided by a float or an int. The result|
243| | is rounded to the nearest multiple of |
244| | timedelta.resolution using round-half-to-even.|
245+--------------------------------+-----------------------------------------------+
Mark Dickinson7c186e22010-04-20 22:32:49 +0000246| ``t1 = t2 // i`` or | The floor is computed and the remainder (if |
247| ``t1 = t2 // t3`` | any) is thrown away. In the second case, an |
Alexander Belopolsky1790bc42010-05-31 17:33:47 +0000248| | integer is returned. (3) |
Mark Dickinson7c186e22010-04-20 22:32:49 +0000249+--------------------------------+-----------------------------------------------+
250| ``t1 = t2 % t3`` | The remainder is computed as a |
251| | :class:`timedelta` object. (3) |
252+--------------------------------+-----------------------------------------------+
253| ``q, r = divmod(t1, t2)`` | Computes the quotient and the remainder: |
254| | ``q = t1 // t2`` (3) and ``r = t1 % t2``. |
255| | q is an integer and r is a :class:`timedelta` |
256| | object. |
Georg Brandl116aa622007-08-15 14:28:22 +0000257+--------------------------------+-----------------------------------------------+
258| ``+t1`` | Returns a :class:`timedelta` object with the |
259| | same value. (2) |
260+--------------------------------+-----------------------------------------------+
261| ``-t1`` | equivalent to :class:`timedelta`\ |
262| | (-*t1.days*, -*t1.seconds*, |
263| | -*t1.microseconds*), and to *t1*\* -1. (1)(4) |
264+--------------------------------+-----------------------------------------------+
Georg Brandl495f7b52009-10-27 15:28:25 +0000265| ``abs(t)`` | equivalent to +\ *t* when ``t.days >= 0``, and|
Georg Brandl116aa622007-08-15 14:28:22 +0000266| | to -*t* when ``t.days < 0``. (2) |
267+--------------------------------+-----------------------------------------------+
Georg Brandlf55c3152010-07-31 11:40:07 +0000268| ``str(t)`` | Returns a string in the form |
269| | ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D |
270| | is negative for negative ``t``. (5) |
271+--------------------------------+-----------------------------------------------+
272| ``repr(t)`` | Returns a string in the form |
273| | ``datetime.timedelta(D[, S[, U]])``, where D |
274| | is negative for negative ``t``. (5) |
275+--------------------------------+-----------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000276
277Notes:
278
279(1)
280 This is exact, but may overflow.
281
282(2)
283 This is exact, and cannot overflow.
284
285(3)
286 Division by 0 raises :exc:`ZeroDivisionError`.
287
288(4)
289 -*timedelta.max* is not representable as a :class:`timedelta` object.
290
Georg Brandlf55c3152010-07-31 11:40:07 +0000291(5)
292 String representations of :class:`timedelta` objects are normalized
293 similarly to their internal representation. This leads to somewhat
294 unusual results for negative timedeltas. For example:
295
296 >>> timedelta(hours=-5)
297 datetime.timedelta(-1, 68400)
298 >>> print(_)
299 -1 day, 19:00:00
300
Georg Brandl116aa622007-08-15 14:28:22 +0000301In addition to the operations listed above :class:`timedelta` objects support
302certain additions and subtractions with :class:`date` and :class:`datetime`
303objects (see below).
304
Georg Brandl67b21b72010-08-17 15:07:14 +0000305.. versionchanged:: 3.2
306 Floor division and true division of a :class:`timedelta` object by another
307 :class:`timedelta` object are now supported, as are remainder operations and
308 the :func:`divmod` function. True division and multiplication of a
309 :class:`timedelta` object by a :class:`float` object are now supported.
Mark Dickinson7c186e22010-04-20 22:32:49 +0000310
311
Georg Brandl116aa622007-08-15 14:28:22 +0000312Comparisons of :class:`timedelta` objects are supported with the
313:class:`timedelta` object representing the smaller duration considered to be the
314smaller timedelta. In order to stop mixed-type comparisons from falling back to
315the default comparison by object address, when a :class:`timedelta` object is
316compared to an object of a different type, :exc:`TypeError` is raised unless the
317comparison is ``==`` or ``!=``. The latter cases return :const:`False` or
318:const:`True`, respectively.
319
Guido van Rossum2cc30da2007-11-02 23:46:40 +0000320:class:`timedelta` objects are :term:`hashable` (usable as dictionary keys), support
Georg Brandl116aa622007-08-15 14:28:22 +0000321efficient pickling, and in Boolean contexts, a :class:`timedelta` object is
322considered to be true if and only if it isn't equal to ``timedelta(0)``.
323
Antoine Pitroube6859d2009-11-25 23:02:32 +0000324Instance methods:
325
326.. method:: timedelta.total_seconds()
327
328 Return the total number of seconds contained in the duration. Equivalent to
Mark Dickinson0381e3f2010-05-08 14:35:02 +0000329 ``td / timedelta(seconds=1)``.
330
331 Note that for very large time intervals (greater than 270 years on
332 most platforms) this method will lose microsecond accuracy.
Antoine Pitroube6859d2009-11-25 23:02:32 +0000333
334 .. versionadded:: 3.2
335
336
Christian Heimesfe337bf2008-03-23 21:54:12 +0000337Example usage:
Georg Brandl48310cd2009-01-03 21:18:54 +0000338
Christian Heimes895627f2007-12-08 17:28:33 +0000339 >>> from datetime import timedelta
340 >>> year = timedelta(days=365)
Georg Brandl48310cd2009-01-03 21:18:54 +0000341 >>> another_year = timedelta(weeks=40, days=84, hours=23,
Christian Heimes895627f2007-12-08 17:28:33 +0000342 ... minutes=50, seconds=600) # adds up to 365 days
Antoine Pitroube6859d2009-11-25 23:02:32 +0000343 >>> year.total_seconds()
344 31536000.0
Christian Heimes895627f2007-12-08 17:28:33 +0000345 >>> year == another_year
346 True
347 >>> ten_years = 10 * year
348 >>> ten_years, ten_years.days // 365
349 (datetime.timedelta(3650), 10)
350 >>> nine_years = ten_years - year
351 >>> nine_years, nine_years.days // 365
352 (datetime.timedelta(3285), 9)
353 >>> three_years = nine_years // 3;
354 >>> three_years, three_years.days // 365
355 (datetime.timedelta(1095), 3)
356 >>> abs(three_years - ten_years) == 2 * three_years + year
357 True
358
Georg Brandl116aa622007-08-15 14:28:22 +0000359
360.. _datetime-date:
361
362:class:`date` Objects
363---------------------
364
365A :class:`date` object represents a date (year, month and day) in an idealized
366calendar, the current Gregorian calendar indefinitely extended in both
367directions. January 1 of year 1 is called day number 1, January 2 of year 1 is
368called day number 2, and so on. This matches the definition of the "proleptic
369Gregorian" calendar in Dershowitz and Reingold's book Calendrical Calculations,
370where it's the base calendar for all computations. See the book for algorithms
371for converting between proleptic Gregorian ordinals and many other calendar
372systems.
373
374
375.. class:: date(year, month, day)
376
Georg Brandl5c106642007-11-29 17:41:05 +0000377 All arguments are required. Arguments may be integers, in the following
Georg Brandl116aa622007-08-15 14:28:22 +0000378 ranges:
379
380 * ``MINYEAR <= year <= MAXYEAR``
381 * ``1 <= month <= 12``
382 * ``1 <= day <= number of days in the given month and year``
383
384 If an argument outside those ranges is given, :exc:`ValueError` is raised.
385
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000386
Georg Brandl116aa622007-08-15 14:28:22 +0000387Other constructors, all class methods:
388
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000389.. classmethod:: date.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000390
391 Return the current local date. This is equivalent to
392 ``date.fromtimestamp(time.time())``.
393
394
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000395.. classmethod:: date.fromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000396
397 Return the local date corresponding to the POSIX timestamp, such as is returned
398 by :func:`time.time`. This may raise :exc:`ValueError`, if the timestamp is out
Georg Brandl60203b42010-10-06 10:11:56 +0000399 of the range of values supported by the platform C :c:func:`localtime` function.
Georg Brandl116aa622007-08-15 14:28:22 +0000400 It's common for this to be restricted to years from 1970 through 2038. Note
401 that on non-POSIX systems that include leap seconds in their notion of a
402 timestamp, leap seconds are ignored by :meth:`fromtimestamp`.
403
404
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000405.. classmethod:: date.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000406
407 Return the date corresponding to the proleptic Gregorian ordinal, where January
408 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 <= ordinal <=
409 date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) ==
410 d``.
411
Georg Brandl116aa622007-08-15 14:28:22 +0000412
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000413Class attributes:
Georg Brandl116aa622007-08-15 14:28:22 +0000414
415.. attribute:: date.min
416
417 The earliest representable date, ``date(MINYEAR, 1, 1)``.
418
419
420.. attribute:: date.max
421
422 The latest representable date, ``date(MAXYEAR, 12, 31)``.
423
424
425.. attribute:: date.resolution
426
427 The smallest possible difference between non-equal date objects,
428 ``timedelta(days=1)``.
429
Georg Brandl116aa622007-08-15 14:28:22 +0000430
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000431Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000432
433.. attribute:: date.year
434
435 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
436
437
438.. attribute:: date.month
439
440 Between 1 and 12 inclusive.
441
442
443.. attribute:: date.day
444
445 Between 1 and the number of days in the given month of the given year.
446
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000447
Georg Brandl116aa622007-08-15 14:28:22 +0000448Supported operations:
449
450+-------------------------------+----------------------------------------------+
451| Operation | Result |
452+===============================+==============================================+
453| ``date2 = date1 + timedelta`` | *date2* is ``timedelta.days`` days removed |
454| | from *date1*. (1) |
455+-------------------------------+----------------------------------------------+
456| ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 + |
457| | timedelta == date1``. (2) |
458+-------------------------------+----------------------------------------------+
459| ``timedelta = date1 - date2`` | \(3) |
460+-------------------------------+----------------------------------------------+
461| ``date1 < date2`` | *date1* is considered less than *date2* when |
462| | *date1* precedes *date2* in time. (4) |
463+-------------------------------+----------------------------------------------+
464
465Notes:
466
467(1)
468 *date2* is moved forward in time if ``timedelta.days > 0``, or backward if
469 ``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``.
470 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
471 :exc:`OverflowError` is raised if ``date2.year`` would be smaller than
472 :const:`MINYEAR` or larger than :const:`MAXYEAR`.
473
474(2)
475 This isn't quite equivalent to date1 + (-timedelta), because -timedelta in
476 isolation can overflow in cases where date1 - timedelta does not.
477 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
478
479(3)
480 This is exact, and cannot overflow. timedelta.seconds and
481 timedelta.microseconds are 0, and date2 + timedelta == date1 after.
482
483(4)
484 In other words, ``date1 < date2`` if and only if ``date1.toordinal() <
485 date2.toordinal()``. In order to stop comparison from falling back to the
486 default scheme of comparing object addresses, date comparison normally raises
487 :exc:`TypeError` if the other comparand isn't also a :class:`date` object.
488 However, ``NotImplemented`` is returned instead if the other comparand has a
489 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
490 chance at implementing mixed-type comparison. If not, when a :class:`date`
491 object is compared to an object of a different type, :exc:`TypeError` is raised
492 unless the comparison is ``==`` or ``!=``. The latter cases return
493 :const:`False` or :const:`True`, respectively.
494
495Dates can be used as dictionary keys. In Boolean contexts, all :class:`date`
496objects are considered to be true.
497
498Instance methods:
499
Georg Brandl116aa622007-08-15 14:28:22 +0000500.. method:: date.replace(year, month, day)
501
Senthil Kumarana6bac952011-07-04 11:28:30 -0700502 Return a date with the same value, except for those parameters given new
503 values by whichever keyword arguments are specified. For example, if ``d ==
504 date(2002, 12, 31)``, then ``d.replace(day=26) == date(2002, 12, 26)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000505
506
507.. method:: date.timetuple()
508
509 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
510 The hours, minutes and seconds are 0, and the DST flag is -1. ``d.timetuple()``
511 is equivalent to ``time.struct_time((d.year, d.month, d.day, 0, 0, 0,
Alexander Belopolsky64912482010-06-08 18:59:20 +0000512 d.weekday(), yday, -1))``, where ``yday = d.toordinal() - date(d.year, 1,
513 1).toordinal() + 1`` is the day number within the current year starting with
514 ``1`` for January 1st.
Georg Brandl116aa622007-08-15 14:28:22 +0000515
516
517.. method:: date.toordinal()
518
519 Return the proleptic Gregorian ordinal of the date, where January 1 of year 1
520 has ordinal 1. For any :class:`date` object *d*,
521 ``date.fromordinal(d.toordinal()) == d``.
522
523
524.. method:: date.weekday()
525
526 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
527 For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also
528 :meth:`isoweekday`.
529
530
531.. method:: date.isoweekday()
532
533 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
534 For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also
535 :meth:`weekday`, :meth:`isocalendar`.
536
537
538.. method:: date.isocalendar()
539
540 Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
541
542 The ISO calendar is a widely used variant of the Gregorian calendar. See
Mark Dickinsonf964ac22009-11-03 16:29:10 +0000543 http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm for a good
544 explanation.
Georg Brandl116aa622007-08-15 14:28:22 +0000545
546 The ISO year consists of 52 or 53 full weeks, and where a week starts on a
547 Monday and ends on a Sunday. The first week of an ISO year is the first
548 (Gregorian) calendar week of a year containing a Thursday. This is called week
549 number 1, and the ISO year of that Thursday is the same as its Gregorian year.
550
551 For example, 2004 begins on a Thursday, so the first week of ISO year 2004
552 begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004, so that
553 ``date(2003, 12, 29).isocalendar() == (2004, 1, 1)`` and ``date(2004, 1,
554 4).isocalendar() == (2004, 1, 7)``.
555
556
557.. method:: date.isoformat()
558
559 Return a string representing the date in ISO 8601 format, 'YYYY-MM-DD'. For
560 example, ``date(2002, 12, 4).isoformat() == '2002-12-04'``.
561
562
563.. method:: date.__str__()
564
565 For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``.
566
567
568.. method:: date.ctime()
569
570 Return a string representing the date, for example ``date(2002, 12,
571 4).ctime() == 'Wed Dec 4 00:00:00 2002'``. ``d.ctime()`` is equivalent to
572 ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the native C
Georg Brandl60203b42010-10-06 10:11:56 +0000573 :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +0000574 :meth:`date.ctime` does not invoke) conforms to the C standard.
575
576
577.. method:: date.strftime(format)
578
579 Return a string representing the date, controlled by an explicit format string.
580 Format codes referring to hours, minutes or seconds will see 0 values. See
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000581 section :ref:`strftime-strptime-behavior`.
582
Georg Brandl116aa622007-08-15 14:28:22 +0000583
Christian Heimes895627f2007-12-08 17:28:33 +0000584Example of counting days to an event::
585
586 >>> import time
587 >>> from datetime import date
588 >>> today = date.today()
589 >>> today
590 datetime.date(2007, 12, 5)
591 >>> today == date.fromtimestamp(time.time())
592 True
593 >>> my_birthday = date(today.year, 6, 24)
594 >>> if my_birthday < today:
Georg Brandl48310cd2009-01-03 21:18:54 +0000595 ... my_birthday = my_birthday.replace(year=today.year + 1)
Christian Heimes895627f2007-12-08 17:28:33 +0000596 >>> my_birthday
597 datetime.date(2008, 6, 24)
Georg Brandl48310cd2009-01-03 21:18:54 +0000598 >>> time_to_birthday = abs(my_birthday - today)
Christian Heimes895627f2007-12-08 17:28:33 +0000599 >>> time_to_birthday.days
600 202
601
Christian Heimesfe337bf2008-03-23 21:54:12 +0000602Example of working with :class:`date`:
603
604.. doctest::
Christian Heimes895627f2007-12-08 17:28:33 +0000605
606 >>> from datetime import date
607 >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
608 >>> d
609 datetime.date(2002, 3, 11)
610 >>> t = d.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000611 >>> for i in t: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000612 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000613 2002 # year
614 3 # month
615 11 # day
616 0
617 0
618 0
619 0 # weekday (0 = Monday)
620 70 # 70th day in the year
621 -1
622 >>> ic = d.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +0000623 >>> for i in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +0000624 ... print(i)
Christian Heimes895627f2007-12-08 17:28:33 +0000625 2002 # ISO year
626 11 # ISO week number
627 1 # ISO day number ( 1 = Monday )
628 >>> d.isoformat()
629 '2002-03-11'
630 >>> d.strftime("%d/%m/%y")
631 '11/03/02'
632 >>> d.strftime("%A %d. %B %Y")
633 'Monday 11. March 2002'
634
Georg Brandl116aa622007-08-15 14:28:22 +0000635
636.. _datetime-datetime:
637
638:class:`datetime` Objects
639-------------------------
640
641A :class:`datetime` object is a single object containing all the information
642from a :class:`date` object and a :class:`time` object. Like a :class:`date`
643object, :class:`datetime` assumes the current Gregorian calendar extended in
644both directions; like a time object, :class:`datetime` assumes there are exactly
6453600\*24 seconds in every day.
646
647Constructor:
648
Georg Brandlc2a4f4f2009-04-10 09:03:43 +0000649.. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000650
651 The year, month and day arguments are required. *tzinfo* may be ``None``, or an
Georg Brandl5c106642007-11-29 17:41:05 +0000652 instance of a :class:`tzinfo` subclass. The remaining arguments may be integers,
653 in the following ranges:
Georg Brandl116aa622007-08-15 14:28:22 +0000654
655 * ``MINYEAR <= year <= MAXYEAR``
656 * ``1 <= month <= 12``
657 * ``1 <= day <= number of days in the given month and year``
658 * ``0 <= hour < 24``
659 * ``0 <= minute < 60``
660 * ``0 <= second < 60``
661 * ``0 <= microsecond < 1000000``
662
663 If an argument outside those ranges is given, :exc:`ValueError` is raised.
664
665Other constructors, all class methods:
666
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000667.. classmethod:: datetime.today()
Georg Brandl116aa622007-08-15 14:28:22 +0000668
669 Return the current local datetime, with :attr:`tzinfo` ``None``. This is
670 equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`,
671 :meth:`fromtimestamp`.
672
673
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000674.. classmethod:: datetime.now(tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000675
676 Return the current local date and time. If optional argument *tz* is ``None``
677 or not specified, this is like :meth:`today`, but, if possible, supplies more
678 precision than can be gotten from going through a :func:`time.time` timestamp
679 (for example, this may be possible on platforms supplying the C
Georg Brandl60203b42010-10-06 10:11:56 +0000680 :c:func:`gettimeofday` function).
Georg Brandl116aa622007-08-15 14:28:22 +0000681
682 Else *tz* must be an instance of a class :class:`tzinfo` subclass, and the
683 current date and time are converted to *tz*'s time zone. In this case the
684 result is equivalent to ``tz.fromutc(datetime.utcnow().replace(tzinfo=tz))``.
685 See also :meth:`today`, :meth:`utcnow`.
686
687
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000688.. classmethod:: datetime.utcnow()
Georg Brandl116aa622007-08-15 14:28:22 +0000689
690 Return the current UTC date and time, with :attr:`tzinfo` ``None``. This is like
691 :meth:`now`, but returns the current UTC date and time, as a naive
Alexander Belopolsky4e749a12010-06-14 14:15:50 +0000692 :class:`datetime` object. An aware current UTC datetime can be obtained by
693 calling ``datetime.now(timezone.utc)``. See also :meth:`now`.
Georg Brandl116aa622007-08-15 14:28:22 +0000694
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000695.. classmethod:: datetime.fromtimestamp(timestamp, tz=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000696
697 Return the local date and time corresponding to the POSIX timestamp, such as is
698 returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
699 specified, the timestamp is converted to the platform's local date and time, and
700 the returned :class:`datetime` object is naive.
701
702 Else *tz* must be an instance of a class :class:`tzinfo` subclass, and the
703 timestamp is converted to *tz*'s time zone. In this case the result is
704 equivalent to
705 ``tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))``.
706
707 :meth:`fromtimestamp` may raise :exc:`ValueError`, if the timestamp is out of
Georg Brandl60203b42010-10-06 10:11:56 +0000708 the range of values supported by the platform C :c:func:`localtime` or
709 :c:func:`gmtime` functions. It's common for this to be restricted to years in
Georg Brandl116aa622007-08-15 14:28:22 +0000710 1970 through 2038. Note that on non-POSIX systems that include leap seconds in
711 their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`,
712 and then it's possible to have two timestamps differing by a second that yield
713 identical :class:`datetime` objects. See also :meth:`utcfromtimestamp`.
714
715
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000716.. classmethod:: datetime.utcfromtimestamp(timestamp)
Georg Brandl116aa622007-08-15 14:28:22 +0000717
718 Return the UTC :class:`datetime` corresponding to the POSIX timestamp, with
719 :attr:`tzinfo` ``None``. This may raise :exc:`ValueError`, if the timestamp is
Georg Brandl60203b42010-10-06 10:11:56 +0000720 out of the range of values supported by the platform C :c:func:`gmtime` function.
Georg Brandl116aa622007-08-15 14:28:22 +0000721 It's common for this to be restricted to years in 1970 through 2038. See also
722 :meth:`fromtimestamp`.
723
Alexander Belopolsky54afa552011-04-25 13:00:40 -0400724 On the POSIX compliant platforms, ``utcfromtimestamp(timestamp)``
725 is equivalent to the following expression::
726
727 datetime(1970, 1, 1) + timedelta(seconds=timestamp)
728
729 There is no method to obtain the timestamp from a :class:`datetime`
730 instance, but POSIX timestamp corresponding to a :class:`datetime`
731 instance ``dt`` can be easily calculated as follows. For a naive
732 ``dt``::
733
734 timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
735
736 And for an aware ``dt``::
737
738 timestamp = (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)) / timedelta(seconds=1)
739
Georg Brandl116aa622007-08-15 14:28:22 +0000740
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000741.. classmethod:: datetime.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000742
743 Return the :class:`datetime` corresponding to the proleptic Gregorian ordinal,
744 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
745 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and
746 microsecond of the result are all 0, and :attr:`tzinfo` is ``None``.
747
748
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000749.. classmethod:: datetime.combine(date, time)
Georg Brandl116aa622007-08-15 14:28:22 +0000750
Senthil Kumarana6bac952011-07-04 11:28:30 -0700751 Return a new :class:`datetime` object whose date attributes are equal to the
752 given :class:`date` object's, and whose time and :attr:`tzinfo` attributes are
753 equal to the given :class:`time` object's. For any :class:`datetime` object
754 *d*, ``d == datetime.combine(d.date(), d.timetz())``. If date is a
755 :class:`datetime` object, its time and :attr:`tzinfo` attributes are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000756
757
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000758.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +0000759
760 Return a :class:`datetime` corresponding to *date_string*, parsed according to
761 *format*. This is equivalent to ``datetime(*(time.strptime(date_string,
762 format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
763 can't be parsed by :func:`time.strptime` or if it returns a value which isn't a
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000764 time tuple. See section :ref:`strftime-strptime-behavior`.
765
Georg Brandl116aa622007-08-15 14:28:22 +0000766
Georg Brandl116aa622007-08-15 14:28:22 +0000767
768Class attributes:
769
Georg Brandl116aa622007-08-15 14:28:22 +0000770.. attribute:: datetime.min
771
772 The earliest representable :class:`datetime`, ``datetime(MINYEAR, 1, 1,
773 tzinfo=None)``.
774
775
776.. attribute:: datetime.max
777
778 The latest representable :class:`datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
779 59, 999999, tzinfo=None)``.
780
781
782.. attribute:: datetime.resolution
783
784 The smallest possible difference between non-equal :class:`datetime` objects,
785 ``timedelta(microseconds=1)``.
786
Georg Brandl116aa622007-08-15 14:28:22 +0000787
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000788Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000789
790.. attribute:: datetime.year
791
792 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
793
794
795.. attribute:: datetime.month
796
797 Between 1 and 12 inclusive.
798
799
800.. attribute:: datetime.day
801
802 Between 1 and the number of days in the given month of the given year.
803
804
805.. attribute:: datetime.hour
806
807 In ``range(24)``.
808
809
810.. attribute:: datetime.minute
811
812 In ``range(60)``.
813
814
815.. attribute:: datetime.second
816
817 In ``range(60)``.
818
819
820.. attribute:: datetime.microsecond
821
822 In ``range(1000000)``.
823
824
825.. attribute:: datetime.tzinfo
826
827 The object passed as the *tzinfo* argument to the :class:`datetime` constructor,
828 or ``None`` if none was passed.
829
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000830
Georg Brandl116aa622007-08-15 14:28:22 +0000831Supported operations:
832
833+---------------------------------------+-------------------------------+
834| Operation | Result |
835+=======================================+===============================+
836| ``datetime2 = datetime1 + timedelta`` | \(1) |
837+---------------------------------------+-------------------------------+
838| ``datetime2 = datetime1 - timedelta`` | \(2) |
839+---------------------------------------+-------------------------------+
840| ``timedelta = datetime1 - datetime2`` | \(3) |
841+---------------------------------------+-------------------------------+
842| ``datetime1 < datetime2`` | Compares :class:`datetime` to |
843| | :class:`datetime`. (4) |
844+---------------------------------------+-------------------------------+
845
846(1)
847 datetime2 is a duration of timedelta removed from datetime1, moving forward in
848 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Senthil Kumarana6bac952011-07-04 11:28:30 -0700849 result has the same :attr:`tzinfo` attribute as the input datetime, and
850 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
851 datetime2.year would be smaller than :const:`MINYEAR` or larger than
852 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
853 input is an aware object.
Georg Brandl116aa622007-08-15 14:28:22 +0000854
855(2)
856 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Senthil Kumarana6bac952011-07-04 11:28:30 -0700857 addition, the result has the same :attr:`tzinfo` attribute as the input
858 datetime, and no time zone adjustments are done even if the input is aware.
859 This isn't quite equivalent to datetime1 + (-timedelta), because -timedelta
860 in isolation can overflow in cases where datetime1 - timedelta does not.
Georg Brandl116aa622007-08-15 14:28:22 +0000861
862(3)
863 Subtraction of a :class:`datetime` from a :class:`datetime` is defined only if
864 both operands are naive, or if both are aware. If one is aware and the other is
865 naive, :exc:`TypeError` is raised.
866
Senthil Kumarana6bac952011-07-04 11:28:30 -0700867 If both are naive, or both are aware and have the same :attr:`tzinfo` attribute,
868 the :attr:`tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Georg Brandl116aa622007-08-15 14:28:22 +0000869 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
870 are done in this case.
871
Senthil Kumarana6bac952011-07-04 11:28:30 -0700872 If both are aware and have different :attr:`tzinfo` attributes, ``a-b`` acts
873 as if *a* and *b* were first converted to naive UTC datetimes first. The
874 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
875 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl116aa622007-08-15 14:28:22 +0000876
877(4)
878 *datetime1* is considered less than *datetime2* when *datetime1* precedes
879 *datetime2* in time.
880
881 If one comparand is naive and the other is aware, :exc:`TypeError` is raised.
Senthil Kumarana6bac952011-07-04 11:28:30 -0700882 If both comparands are aware, and have the same :attr:`tzinfo` attribute, the
883 common :attr:`tzinfo` attribute is ignored and the base datetimes are
884 compared. If both comparands are aware and have different :attr:`tzinfo`
885 attributes, the comparands are first adjusted by subtracting their UTC
886 offsets (obtained from ``self.utcoffset()``).
Georg Brandl116aa622007-08-15 14:28:22 +0000887
888 .. note::
889
890 In order to stop comparison from falling back to the default scheme of comparing
891 object addresses, datetime comparison normally raises :exc:`TypeError` if the
892 other comparand isn't also a :class:`datetime` object. However,
893 ``NotImplemented`` is returned instead if the other comparand has a
894 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
895 chance at implementing mixed-type comparison. If not, when a :class:`datetime`
896 object is compared to an object of a different type, :exc:`TypeError` is raised
897 unless the comparison is ``==`` or ``!=``. The latter cases return
898 :const:`False` or :const:`True`, respectively.
899
900:class:`datetime` objects can be used as dictionary keys. In Boolean contexts,
901all :class:`datetime` objects are considered to be true.
902
903Instance methods:
904
Georg Brandl116aa622007-08-15 14:28:22 +0000905.. method:: datetime.date()
906
907 Return :class:`date` object with same year, month and day.
908
909
910.. method:: datetime.time()
911
912 Return :class:`time` object with same hour, minute, second and microsecond.
913 :attr:`tzinfo` is ``None``. See also method :meth:`timetz`.
914
915
916.. method:: datetime.timetz()
917
918 Return :class:`time` object with same hour, minute, second, microsecond, and
Senthil Kumarana6bac952011-07-04 11:28:30 -0700919 tzinfo attributes. See also method :meth:`time`.
Georg Brandl116aa622007-08-15 14:28:22 +0000920
921
922.. method:: datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
923
Senthil Kumarana6bac952011-07-04 11:28:30 -0700924 Return a datetime with the same attributes, except for those attributes given
925 new values by whichever keyword arguments are specified. Note that
926 ``tzinfo=None`` can be specified to create a naive datetime from an aware
927 datetime with no conversion of date and time attributes.
Georg Brandl116aa622007-08-15 14:28:22 +0000928
929
930.. method:: datetime.astimezone(tz)
931
Senthil Kumarana6bac952011-07-04 11:28:30 -0700932 Return a :class:`datetime` object with new :attr:`tzinfo` attribute *tz*,
933 adjusting the date and time attributes so the result is the same UTC time as
934 *self*, but in *tz*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +0000935
936 *tz* must be an instance of a :class:`tzinfo` subclass, and its
937 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. *self* must
938 be aware (``self.tzinfo`` must not be ``None``, and ``self.utcoffset()`` must
939 not return ``None``).
940
941 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumarana6bac952011-07-04 11:28:30 -0700942 adjustment of date or time attributes is performed. Else the result is local
943 time in time zone *tz*, representing the same UTC time as *self*: after
944 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will usually have
945 the same date and time attributes as ``dt - dt.utcoffset()``. The discussion
946 of class :class:`tzinfo` explains the cases at Daylight Saving Time transition
947 boundaries where this cannot be achieved (an issue only if *tz* models both
948 standard and daylight time).
Georg Brandl116aa622007-08-15 14:28:22 +0000949
950 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Senthil Kumarana6bac952011-07-04 11:28:30 -0700951 adjustment of date and time attributes, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl116aa622007-08-15 14:28:22 +0000952 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumarana6bac952011-07-04 11:28:30 -0700953 conversion of date and time attributes, use ``dt.replace(tzinfo=None)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000954
955 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
956 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
957 Ignoring error cases, :meth:`astimezone` acts like::
958
959 def astimezone(self, tz):
960 if self.tzinfo is tz:
961 return self
962 # Convert self to UTC, and attach the new time zone object.
963 utc = (self - self.utcoffset()).replace(tzinfo=tz)
964 # Convert from UTC to tz's local time.
965 return tz.fromutc(utc)
966
967
968.. method:: datetime.utcoffset()
969
970 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
971 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
972 return ``None``, or a :class:`timedelta` object representing a whole number of
973 minutes with magnitude less than one day.
974
975
976.. method:: datetime.dst()
977
978 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
979 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
980 ``None``, or a :class:`timedelta` object representing a whole number of minutes
981 with magnitude less than one day.
982
983
984.. method:: datetime.tzname()
985
986 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
987 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
988 ``None`` or a string object,
989
990
991.. method:: datetime.timetuple()
992
993 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
994 ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day,
Alexander Belopolsky64912482010-06-08 18:59:20 +0000995 d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday =
996 d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within
997 the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag
998 of the result is set according to the :meth:`dst` method: :attr:`tzinfo` is
Georg Brandl682d7e02010-10-06 10:26:05 +0000999 ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``;
Alexander Belopolsky64912482010-06-08 18:59:20 +00001000 else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``;
Alexander Belopolskyda62f2f2010-06-09 17:11:01 +00001001 else :attr:`tm_isdst` is set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +00001002
1003
1004.. method:: datetime.utctimetuple()
1005
1006 If :class:`datetime` instance *d* is naive, this is the same as
1007 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
1008 ``d.dst()`` returns. DST is never in effect for a UTC time.
1009
1010 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001011 ``d.utcoffset()``, and a :class:`time.struct_time` for the
1012 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
1013 that an :exc:`OverflowError` may be raised if *d*.year was
1014 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +00001015 boundary.
1016
1017
1018.. method:: datetime.toordinal()
1019
1020 Return the proleptic Gregorian ordinal of the date. The same as
1021 ``self.date().toordinal()``.
1022
1023
1024.. method:: datetime.weekday()
1025
1026 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1027 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1028
1029
1030.. method:: datetime.isoweekday()
1031
1032 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1033 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1034 :meth:`isocalendar`.
1035
1036
1037.. method:: datetime.isocalendar()
1038
1039 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
1040 ``self.date().isocalendar()``.
1041
1042
Georg Brandlc2a4f4f2009-04-10 09:03:43 +00001043.. method:: datetime.isoformat(sep='T')
Georg Brandl116aa622007-08-15 14:28:22 +00001044
1045 Return a string representing the date and time in ISO 8601 format,
1046 YYYY-MM-DDTHH:MM:SS.mmmmmm or, if :attr:`microsecond` is 0,
1047 YYYY-MM-DDTHH:MM:SS
1048
1049 If :meth:`utcoffset` does not return ``None``, a 6-character string is
1050 appended, giving the UTC offset in (signed) hours and minutes:
1051 YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM or, if :attr:`microsecond` is 0
1052 YYYY-MM-DDTHH:MM:SS+HH:MM
1053
1054 The optional argument *sep* (default ``'T'``) is a one-character separator,
Christian Heimesfe337bf2008-03-23 21:54:12 +00001055 placed between the date and time portions of the result. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00001056
1057 >>> from datetime import tzinfo, timedelta, datetime
1058 >>> class TZ(tzinfo):
1059 ... def utcoffset(self, dt): return timedelta(minutes=-399)
1060 ...
1061 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1062 '2002-12-25 00:00:00-06:39'
1063
1064
1065.. method:: datetime.__str__()
1066
1067 For a :class:`datetime` instance *d*, ``str(d)`` is equivalent to
1068 ``d.isoformat(' ')``.
1069
1070
1071.. method:: datetime.ctime()
1072
1073 Return a string representing the date and time, for example ``datetime(2002, 12,
1074 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:40 2002'``. ``d.ctime()`` is
1075 equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the
Georg Brandl60203b42010-10-06 10:11:56 +00001076 native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +00001077 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
1078
1079
1080.. method:: datetime.strftime(format)
1081
1082 Return a string representing the date and time, controlled by an explicit format
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001083 string. See section :ref:`strftime-strptime-behavior`.
1084
Georg Brandl116aa622007-08-15 14:28:22 +00001085
Christian Heimesfe337bf2008-03-23 21:54:12 +00001086Examples of working with datetime objects:
1087
1088.. doctest::
1089
Christian Heimes895627f2007-12-08 17:28:33 +00001090 >>> from datetime import datetime, date, time
1091 >>> # Using datetime.combine()
1092 >>> d = date(2005, 7, 14)
1093 >>> t = time(12, 30)
1094 >>> datetime.combine(d, t)
1095 datetime.datetime(2005, 7, 14, 12, 30)
1096 >>> # Using datetime.now() or datetime.utcnow()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001097 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001098 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Christian Heimesfe337bf2008-03-23 21:54:12 +00001099 >>> datetime.utcnow() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001100 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
1101 >>> # Using datetime.strptime()
1102 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1103 >>> dt
1104 datetime.datetime(2006, 11, 21, 16, 30)
1105 >>> # Using datetime.timetuple() to get tuple of all attributes
1106 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001107 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001108 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001109 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001110 2006 # year
1111 11 # month
1112 21 # day
1113 16 # hour
1114 30 # minute
1115 0 # second
1116 1 # weekday (0 = Monday)
1117 325 # number of days since 1st January
1118 -1 # dst - method tzinfo.dst() returned None
1119 >>> # Date in ISO format
1120 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001121 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001122 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001123 ...
1124 2006 # ISO year
1125 47 # ISO week
1126 2 # ISO weekday
1127 >>> # Formatting datetime
1128 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1129 'Tuesday, 21. November 2006 04:30PM'
1130
Christian Heimesfe337bf2008-03-23 21:54:12 +00001131Using datetime with tzinfo:
Christian Heimes895627f2007-12-08 17:28:33 +00001132
1133 >>> from datetime import timedelta, datetime, tzinfo
1134 >>> class GMT1(tzinfo):
1135 ... def __init__(self): # DST starts last Sunday in March
1136 ... d = datetime(dt.year, 4, 1) # ends last Sunday in October
1137 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001138 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001139 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
1140 ... def utcoffset(self, dt):
1141 ... return timedelta(hours=1) + self.dst(dt)
Georg Brandl48310cd2009-01-03 21:18:54 +00001142 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001143 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1144 ... return timedelta(hours=1)
1145 ... else:
1146 ... return timedelta(0)
1147 ... def tzname(self,dt):
1148 ... return "GMT +1"
Georg Brandl48310cd2009-01-03 21:18:54 +00001149 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001150 >>> class GMT2(tzinfo):
1151 ... def __init__(self):
Georg Brandl48310cd2009-01-03 21:18:54 +00001152 ... d = datetime(dt.year, 4, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001153 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001154 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001155 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
1156 ... def utcoffset(self, dt):
1157 ... return timedelta(hours=1) + self.dst(dt)
1158 ... def dst(self, dt):
1159 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1160 ... return timedelta(hours=2)
1161 ... else:
1162 ... return timedelta(0)
1163 ... def tzname(self,dt):
1164 ... return "GMT +2"
Georg Brandl48310cd2009-01-03 21:18:54 +00001165 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001166 >>> gmt1 = GMT1()
1167 >>> # Daylight Saving Time
1168 >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
1169 >>> dt1.dst()
1170 datetime.timedelta(0)
1171 >>> dt1.utcoffset()
1172 datetime.timedelta(0, 3600)
1173 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
1174 >>> dt2.dst()
1175 datetime.timedelta(0, 3600)
1176 >>> dt2.utcoffset()
1177 datetime.timedelta(0, 7200)
1178 >>> # Convert datetime to another time zone
1179 >>> dt3 = dt2.astimezone(GMT2())
1180 >>> dt3 # doctest: +ELLIPSIS
1181 datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
1182 >>> dt2 # doctest: +ELLIPSIS
1183 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
1184 >>> dt2.utctimetuple() == dt3.utctimetuple()
1185 True
Georg Brandl48310cd2009-01-03 21:18:54 +00001186
Christian Heimes895627f2007-12-08 17:28:33 +00001187
Georg Brandl116aa622007-08-15 14:28:22 +00001188
1189.. _datetime-time:
1190
1191:class:`time` Objects
1192---------------------
1193
1194A time object represents a (local) time of day, independent of any particular
1195day, and subject to adjustment via a :class:`tzinfo` object.
1196
Georg Brandlc2a4f4f2009-04-10 09:03:43 +00001197.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001198
1199 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
Georg Brandl5c106642007-11-29 17:41:05 +00001200 :class:`tzinfo` subclass. The remaining arguments may be integers, in the
Georg Brandl116aa622007-08-15 14:28:22 +00001201 following ranges:
1202
1203 * ``0 <= hour < 24``
1204 * ``0 <= minute < 60``
1205 * ``0 <= second < 60``
1206 * ``0 <= microsecond < 1000000``.
1207
1208 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
1209 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1210
1211Class attributes:
1212
1213
1214.. attribute:: time.min
1215
1216 The earliest representable :class:`time`, ``time(0, 0, 0, 0)``.
1217
1218
1219.. attribute:: time.max
1220
1221 The latest representable :class:`time`, ``time(23, 59, 59, 999999)``.
1222
1223
1224.. attribute:: time.resolution
1225
1226 The smallest possible difference between non-equal :class:`time` objects,
1227 ``timedelta(microseconds=1)``, although note that arithmetic on :class:`time`
1228 objects is not supported.
1229
Georg Brandl116aa622007-08-15 14:28:22 +00001230
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001231Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001232
1233.. attribute:: time.hour
1234
1235 In ``range(24)``.
1236
1237
1238.. attribute:: time.minute
1239
1240 In ``range(60)``.
1241
1242
1243.. attribute:: time.second
1244
1245 In ``range(60)``.
1246
1247
1248.. attribute:: time.microsecond
1249
1250 In ``range(1000000)``.
1251
1252
1253.. attribute:: time.tzinfo
1254
1255 The object passed as the tzinfo argument to the :class:`time` constructor, or
1256 ``None`` if none was passed.
1257
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001258
Georg Brandl116aa622007-08-15 14:28:22 +00001259Supported operations:
1260
1261* comparison of :class:`time` to :class:`time`, where *a* is considered less
1262 than *b* when *a* precedes *b* in time. If one comparand is naive and the other
1263 is aware, :exc:`TypeError` is raised. If both comparands are aware, and have
Senthil Kumarana6bac952011-07-04 11:28:30 -07001264 the same :attr:`tzinfo` attribute, the common :attr:`tzinfo` attribute is
1265 ignored and the base times are compared. If both comparands are aware and
1266 have different :attr:`tzinfo` attributes, the comparands are first adjusted by
1267 subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1268 to stop mixed-type comparisons from falling back to the default comparison by
1269 object address, when a :class:`time` object is compared to an object of a
Senthil Kumaran3aac1792011-07-04 11:43:51 -07001270 different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
Senthil Kumarana6bac952011-07-04 11:28:30 -07001271 ``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl116aa622007-08-15 14:28:22 +00001272
1273* hash, use as dict key
1274
1275* efficient pickling
1276
1277* in Boolean contexts, a :class:`time` object is considered to be true if and
1278 only if, after converting it to minutes and subtracting :meth:`utcoffset` (or
1279 ``0`` if that's ``None``), the result is non-zero.
1280
Georg Brandl116aa622007-08-15 14:28:22 +00001281
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001282Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001283
1284.. method:: time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
1285
Senthil Kumarana6bac952011-07-04 11:28:30 -07001286 Return a :class:`time` with the same value, except for those attributes given
1287 new values by whichever keyword arguments are specified. Note that
1288 ``tzinfo=None`` can be specified to create a naive :class:`time` from an
1289 aware :class:`time`, without conversion of the time attributes.
Georg Brandl116aa622007-08-15 14:28:22 +00001290
1291
1292.. method:: time.isoformat()
1293
1294 Return a string representing the time in ISO 8601 format, HH:MM:SS.mmmmmm or, if
1295 self.microsecond is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a
1296 6-character string is appended, giving the UTC offset in (signed) hours and
1297 minutes: HH:MM:SS.mmmmmm+HH:MM or, if self.microsecond is 0, HH:MM:SS+HH:MM
1298
1299
1300.. method:: time.__str__()
1301
1302 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1303
1304
1305.. method:: time.strftime(format)
1306
1307 Return a string representing the time, controlled by an explicit format string.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001308 See section :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001309
1310
1311.. method:: time.utcoffset()
1312
1313 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1314 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
1315 return ``None`` or a :class:`timedelta` object representing a whole number of
1316 minutes with magnitude less than one day.
1317
1318
1319.. method:: time.dst()
1320
1321 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1322 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
1323 ``None``, or a :class:`timedelta` object representing a whole number of minutes
1324 with magnitude less than one day.
1325
1326
1327.. method:: time.tzname()
1328
1329 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1330 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1331 return ``None`` or a string object.
1332
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001333
Christian Heimesfe337bf2008-03-23 21:54:12 +00001334Example:
Georg Brandl48310cd2009-01-03 21:18:54 +00001335
Christian Heimes895627f2007-12-08 17:28:33 +00001336 >>> from datetime import time, tzinfo
1337 >>> class GMT1(tzinfo):
1338 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001339 ... return timedelta(hours=1)
1340 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001341 ... return timedelta(0)
1342 ... def tzname(self,dt):
1343 ... return "Europe/Prague"
1344 ...
1345 >>> t = time(12, 10, 30, tzinfo=GMT1())
1346 >>> t # doctest: +ELLIPSIS
1347 datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>)
1348 >>> gmt = GMT1()
1349 >>> t.isoformat()
1350 '12:10:30+01:00'
1351 >>> t.dst()
1352 datetime.timedelta(0)
1353 >>> t.tzname()
1354 'Europe/Prague'
1355 >>> t.strftime("%H:%M:%S %Z")
1356 '12:10:30 Europe/Prague'
1357
Georg Brandl116aa622007-08-15 14:28:22 +00001358
1359.. _datetime-tzinfo:
1360
1361:class:`tzinfo` Objects
1362-----------------------
1363
Brett Cannone1327f72009-01-29 04:10:21 +00001364:class:`tzinfo` is an abstract base class, meaning that this class should not be
Georg Brandl116aa622007-08-15 14:28:22 +00001365instantiated directly. You need to derive a concrete subclass, and (at least)
1366supply implementations of the standard :class:`tzinfo` methods needed by the
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001367:class:`datetime` methods you use. The :mod:`datetime` module supplies
1368a simple concrete subclass of :class:`tzinfo` :class:`timezone` which can reprsent
1369timezones with fixed offset from UTC such as UTC itself or North American EST and
1370EDT.
Georg Brandl116aa622007-08-15 14:28:22 +00001371
1372An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1373constructors for :class:`datetime` and :class:`time` objects. The latter objects
Senthil Kumarana6bac952011-07-04 11:28:30 -07001374view their attributes as being in local time, and the :class:`tzinfo` object
Georg Brandl116aa622007-08-15 14:28:22 +00001375supports methods revealing offset of local time from UTC, the name of the time
1376zone, and DST offset, all relative to a date or time object passed to them.
1377
1378Special requirement for pickling: A :class:`tzinfo` subclass must have an
1379:meth:`__init__` method that can be called with no arguments, else it can be
1380pickled but possibly not unpickled again. This is a technical requirement that
1381may be relaxed in the future.
1382
1383A concrete subclass of :class:`tzinfo` may need to implement the following
1384methods. Exactly which methods are needed depends on the uses made of aware
1385:mod:`datetime` objects. If in doubt, simply implement all of them.
1386
1387
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001388.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001389
1390 Return offset of local time from UTC, in minutes east of UTC. If local time is
1391 west of UTC, this should be negative. Note that this is intended to be the
1392 total offset from UTC; for example, if a :class:`tzinfo` object represents both
1393 time zone and DST adjustments, :meth:`utcoffset` should return their sum. If
1394 the UTC offset isn't known, return ``None``. Else the value returned must be a
1395 :class:`timedelta` object specifying a whole number of minutes in the range
1396 -1439 to 1439 inclusive (1440 = 24\*60; the magnitude of the offset must be less
1397 than one day). Most implementations of :meth:`utcoffset` will probably look
1398 like one of these two::
1399
1400 return CONSTANT # fixed-offset class
1401 return CONSTANT + self.dst(dt) # daylight-aware class
1402
1403 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1404 ``None`` either.
1405
1406 The default implementation of :meth:`utcoffset` raises
1407 :exc:`NotImplementedError`.
1408
1409
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001410.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001411
1412 Return the daylight saving time (DST) adjustment, in minutes east of UTC, or
1413 ``None`` if DST information isn't known. Return ``timedelta(0)`` if DST is not
1414 in effect. If DST is in effect, return the offset as a :class:`timedelta` object
1415 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1416 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1417 no need to consult :meth:`dst` unless you're interested in obtaining DST info
1418 separately. For example, :meth:`datetime.timetuple` calls its :attr:`tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001419 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1420 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1421 DST changes when crossing time zones.
Georg Brandl116aa622007-08-15 14:28:22 +00001422
1423 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1424 daylight times must be consistent in this sense:
1425
1426 ``tz.utcoffset(dt) - tz.dst(dt)``
1427
1428 must return the same result for every :class:`datetime` *dt* with ``dt.tzinfo ==
1429 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1430 zone's "standard offset", which should not depend on the date or the time, but
1431 only on geographic location. The implementation of :meth:`datetime.astimezone`
1432 relies on this, but cannot detect violations; it's the programmer's
1433 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
1434 this, it may be able to override the default implementation of
1435 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
1436
1437 Most implementations of :meth:`dst` will probably look like one of these two::
1438
1439 def dst(self):
1440 # a fixed-offset class: doesn't account for DST
1441 return timedelta(0)
1442
1443 or ::
1444
1445 def dst(self):
1446 # Code to set dston and dstoff to the time zone's DST
1447 # transition times based on the input dt.year, and expressed
1448 # in standard local time. Then
1449
1450 if dston <= dt.replace(tzinfo=None) < dstoff:
1451 return timedelta(hours=1)
1452 else:
1453 return timedelta(0)
1454
1455 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
1456
1457
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001458.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001459
1460 Return the time zone name corresponding to the :class:`datetime` object *dt*, as
1461 a string. Nothing about string names is defined by the :mod:`datetime` module,
1462 and there's no requirement that it mean anything in particular. For example,
1463 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
1464 valid replies. Return ``None`` if a string name isn't known. Note that this is
1465 a method rather than a fixed string primarily because some :class:`tzinfo`
1466 subclasses will wish to return different names depending on the specific value
1467 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
1468 daylight time.
1469
1470 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
1471
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001472
Georg Brandl116aa622007-08-15 14:28:22 +00001473These methods are called by a :class:`datetime` or :class:`time` object, in
1474response to their methods of the same names. A :class:`datetime` object passes
1475itself as the argument, and a :class:`time` object passes ``None`` as the
1476argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
1477accept a *dt* argument of ``None``, or of class :class:`datetime`.
1478
1479When ``None`` is passed, it's up to the class designer to decide the best
1480response. For example, returning ``None`` is appropriate if the class wishes to
1481say that time objects don't participate in the :class:`tzinfo` protocols. It
1482may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
1483there is no other convention for discovering the standard offset.
1484
1485When a :class:`datetime` object is passed in response to a :class:`datetime`
1486method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
1487rely on this, unless user code calls :class:`tzinfo` methods directly. The
1488intent is that the :class:`tzinfo` methods interpret *dt* as being in local
1489time, and not need worry about objects in other timezones.
1490
1491There is one more :class:`tzinfo` method that a subclass may wish to override:
1492
1493
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001494.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001495
1496 This is called from the default :class:`datetime.astimezone()` implementation.
Senthil Kumarana6bac952011-07-04 11:28:30 -07001497 When called from that, ``dt.tzinfo`` is *self*, and *dt*'s date and time
1498 attributes are to be viewed as expressing a UTC time. The purpose of
1499 :meth:`fromutc` is to adjust the date and time attributes, returning an
1500 equivalent datetime in *self*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001501
1502 Most :class:`tzinfo` subclasses should be able to inherit the default
1503 :meth:`fromutc` implementation without problems. It's strong enough to handle
1504 fixed-offset time zones, and time zones accounting for both standard and
1505 daylight time, and the latter even if the DST transition times differ in
1506 different years. An example of a time zone the default :meth:`fromutc`
1507 implementation may not handle correctly in all cases is one where the standard
1508 offset (from UTC) depends on the specific date and time passed, which can happen
1509 for political reasons. The default implementations of :meth:`astimezone` and
1510 :meth:`fromutc` may not produce the result you want if the result is one of the
1511 hours straddling the moment the standard offset changes.
1512
1513 Skipping code for error cases, the default :meth:`fromutc` implementation acts
1514 like::
1515
1516 def fromutc(self, dt):
1517 # raise ValueError error if dt.tzinfo is not self
1518 dtoff = dt.utcoffset()
1519 dtdst = dt.dst()
1520 # raise ValueError if dtoff is None or dtdst is None
1521 delta = dtoff - dtdst # this is self's standard offset
1522 if delta:
1523 dt += delta # convert to standard local time
1524 dtdst = dt.dst()
1525 # raise ValueError if dtdst is None
1526 if dtdst:
1527 return dt + dtdst
1528 else:
1529 return dt
1530
1531Example :class:`tzinfo` classes:
1532
1533.. literalinclude:: ../includes/tzinfo-examples.py
1534
1535
1536Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
1537subclass accounting for both standard and daylight time, at the DST transition
1538points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00001539minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
15401:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00001541
1542 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
1543 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
1544 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
1545
1546 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
1547
1548 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
1549
1550When DST starts (the "start" line), the local wall clock leaps from 1:59 to
15513:00. A wall time of the form 2:MM doesn't really make sense on that day, so
1552``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
1553begins. In order for :meth:`astimezone` to make this guarantee, the
1554:meth:`rzinfo.dst` method must consider times in the "missing hour" (2:MM for
1555Eastern) to be in daylight time.
1556
1557When DST ends (the "end" line), there's a potentially worse problem: there's an
1558hour that can't be spelled unambiguously in local wall time: the last hour of
1559daylight time. In Eastern, that's times of the form 5:MM UTC on the day
1560daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
1561to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
1562:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
1563hours into the same local hour then. In the Eastern example, UTC times of the
1564form 5:MM and 6:MM both map to 1:MM when converted to Eastern. In order for
1565:meth:`astimezone` to make this guarantee, the :meth:`tzinfo.dst` method must
1566consider times in the "repeated hour" to be in standard time. This is easily
1567arranged, as in the example, by expressing DST switch times in the time zone's
1568standard local time.
1569
1570Applications that can't bear such ambiguities should avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001571:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
1572or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
1573only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
1574
1575
1576.. _datetime-timezone:
1577
1578:class:`timezone` Objects
1579--------------------------
1580
Alexander Belopolsky6d3c9a62011-05-04 10:28:26 -04001581The :class:`timezone` class is a subclass of :class:`tzinfo`, each
1582instance of which represents a timezone defined by a fixed offset from
1583UTC. Note that objects of this class cannot be used to represent
1584timezone information in the locations where different offsets are used
1585in different days of the year or where historical changes have been
1586made to civil time.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001587
1588
1589.. class:: timezone(offset[, name])
1590
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001591 The *offset* argument must be specified as a :class:`timedelta`
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001592 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001593 be strictly between ``-timedelta(hours=24)`` and
1594 ``timedelta(hours=24)`` and represent a whole number of minutes,
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001595 otherwise :exc:`ValueError` is raised.
1596
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001597 The *name* argument is optional. If specified it must be a string that
1598 is used as the value returned by the ``tzname(dt)`` method. Otherwise,
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001599 ``tzname(dt)`` returns a string 'UTCsHH:MM', where s is the sign of
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001600 *offset*, HH and MM are two digits of ``offset.hours`` and
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001601 ``offset.minutes`` respectively.
1602
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001603.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001604
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001605 Return the fixed value specified when the :class:`timezone` instance is
1606 constructed. The *dt* argument is ignored. The return value is a
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001607 :class:`timedelta` instance equal to the difference between the
1608 local time and UTC.
1609
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001610.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001611
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001612 Return the fixed value specified when the :class:`timezone` instance is
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001613 constructed or a string 'UTCsHH:MM', where s is the sign of
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001614 *offset*, HH and MM are two digits of ``offset.hours`` and
1615 ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001616
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001617.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001618
1619 Always returns ``None``.
1620
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001621.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001622
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001623 Return ``dt + offset``. The *dt* argument must be an aware
1624 :class:`datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001625
1626Class attributes:
1627
1628.. attribute:: timezone.utc
1629
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001630 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00001631
Georg Brandl116aa622007-08-15 14:28:22 +00001632
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001633.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00001634
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001635:meth:`strftime` and :meth:`strptime` Behavior
1636----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001637
1638:class:`date`, :class:`datetime`, and :class:`time` objects all support a
1639``strftime(format)`` method, to create a string representing the time under the
1640control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
1641acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
1642although not all objects support a :meth:`timetuple` method.
1643
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001644Conversely, the :meth:`datetime.strptime` class method creates a
1645:class:`datetime` object from a string representing a date and time and a
1646corresponding format string. ``datetime.strptime(date_string, format)`` is
1647equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``.
1648
Georg Brandl116aa622007-08-15 14:28:22 +00001649For :class:`time` objects, the format codes for year, month, and day should not
1650be used, as time objects have no such values. If they're used anyway, ``1900``
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001651is substituted for the year, and ``1`` for the month and day.
Georg Brandl116aa622007-08-15 14:28:22 +00001652
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001653For :class:`date` objects, the format codes for hours, minutes, seconds, and
1654microseconds should not be used, as :class:`date` objects have no such
1655values. If they're used anyway, ``0`` is substituted for them.
1656
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001657For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
1658strings.
1659
1660For an aware object:
1661
1662``%z``
1663 :meth:`utcoffset` is transformed into a 5-character string of the form +HHMM or
1664 -HHMM, where HH is a 2-digit string giving the number of UTC offset hours, and
1665 MM is a 2-digit string giving the number of UTC offset minutes. For example, if
1666 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
1667 replaced with the string ``'-0330'``.
1668
1669``%Z``
1670 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty string.
1671 Otherwise ``%Z`` is replaced by the returned value, which must be a string.
Georg Brandl116aa622007-08-15 14:28:22 +00001672
Georg Brandl116aa622007-08-15 14:28:22 +00001673The full set of format codes supported varies across platforms, because Python
1674calls the platform C library's :func:`strftime` function, and platform
Georg Brandl48310cd2009-01-03 21:18:54 +00001675variations are common.
Christian Heimes895627f2007-12-08 17:28:33 +00001676
1677The following is a list of all the format codes that the C standard (1989
1678version) requires, and these work on all platforms with a standard C
1679implementation. Note that the 1999 version of the C standard added additional
1680format codes.
Georg Brandl116aa622007-08-15 14:28:22 +00001681
Christian Heimes895627f2007-12-08 17:28:33 +00001682+-----------+--------------------------------+-------+
1683| Directive | Meaning | Notes |
1684+===========+================================+=======+
1685| ``%a`` | Locale's abbreviated weekday | |
1686| | name. | |
1687+-----------+--------------------------------+-------+
1688| ``%A`` | Locale's full weekday name. | |
1689+-----------+--------------------------------+-------+
1690| ``%b`` | Locale's abbreviated month | |
1691| | name. | |
1692+-----------+--------------------------------+-------+
1693| ``%B`` | Locale's full month name. | |
1694+-----------+--------------------------------+-------+
1695| ``%c`` | Locale's appropriate date and | |
1696| | time representation. | |
1697+-----------+--------------------------------+-------+
1698| ``%d`` | Day of the month as a decimal | |
1699| | number [01,31]. | |
1700+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001701| ``%f`` | Microsecond as a decimal | \(1) |
1702| | number [0,999999], zero-padded | |
1703| | on the left | |
1704+-----------+--------------------------------+-------+
Christian Heimes895627f2007-12-08 17:28:33 +00001705| ``%H`` | Hour (24-hour clock) as a | |
1706| | decimal number [00,23]. | |
1707+-----------+--------------------------------+-------+
1708| ``%I`` | Hour (12-hour clock) as a | |
1709| | decimal number [01,12]. | |
1710+-----------+--------------------------------+-------+
1711| ``%j`` | Day of the year as a decimal | |
1712| | number [001,366]. | |
1713+-----------+--------------------------------+-------+
1714| ``%m`` | Month as a decimal number | |
1715| | [01,12]. | |
1716+-----------+--------------------------------+-------+
1717| ``%M`` | Minute as a decimal number | |
1718| | [00,59]. | |
1719+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001720| ``%p`` | Locale's equivalent of either | \(2) |
Christian Heimes895627f2007-12-08 17:28:33 +00001721| | AM or PM. | |
1722+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001723| ``%S`` | Second as a decimal number | \(3) |
Alexander Belopolsky9971e002011-01-10 22:56:14 +00001724| | [00,59]. | |
Christian Heimes895627f2007-12-08 17:28:33 +00001725+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001726| ``%U`` | Week number of the year | \(4) |
Christian Heimes895627f2007-12-08 17:28:33 +00001727| | (Sunday as the first day of | |
1728| | the week) as a decimal number | |
1729| | [00,53]. All days in a new | |
1730| | year preceding the first | |
1731| | Sunday are considered to be in | |
1732| | week 0. | |
1733+-----------+--------------------------------+-------+
1734| ``%w`` | Weekday as a decimal number | |
1735| | [0(Sunday),6]. | |
1736+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001737| ``%W`` | Week number of the year | \(4) |
Christian Heimes895627f2007-12-08 17:28:33 +00001738| | (Monday as the first day of | |
1739| | the week) as a decimal number | |
1740| | [00,53]. All days in a new | |
1741| | year preceding the first | |
1742| | Monday are considered to be in | |
1743| | week 0. | |
1744+-----------+--------------------------------+-------+
1745| ``%x`` | Locale's appropriate date | |
1746| | representation. | |
1747+-----------+--------------------------------+-------+
1748| ``%X`` | Locale's appropriate time | |
1749| | representation. | |
1750+-----------+--------------------------------+-------+
1751| ``%y`` | Year without century as a | |
1752| | decimal number [00,99]. | |
1753+-----------+--------------------------------+-------+
Alexander Belopolsky085556a2011-01-10 23:28:33 +00001754| ``%Y`` | Year with century as a decimal | \(5) |
Alexander Belopolsky89da3492011-05-02 13:14:24 -04001755| | number [0001,9999]. | |
Christian Heimes895627f2007-12-08 17:28:33 +00001756+-----------+--------------------------------+-------+
Alexander Belopolsky085556a2011-01-10 23:28:33 +00001757| ``%z`` | UTC offset in the form +HHMM | \(6) |
Christian Heimes895627f2007-12-08 17:28:33 +00001758| | or -HHMM (empty string if the | |
1759| | the object is naive). | |
1760+-----------+--------------------------------+-------+
1761| ``%Z`` | Time zone name (empty string | |
1762| | if the object is naive). | |
1763+-----------+--------------------------------+-------+
1764| ``%%`` | A literal ``'%'`` character. | |
1765+-----------+--------------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00001766
Christian Heimes895627f2007-12-08 17:28:33 +00001767Notes:
1768
1769(1)
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001770 When used with the :meth:`strptime` method, the ``%f`` directive
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001771 accepts from one to six digits and zero pads on the right. ``%f`` is
Benjamin Petersonb58dda72009-01-18 22:27:04 +00001772 an extension to the set of format characters in the C standard (but
1773 implemented separately in datetime objects, and therefore always
1774 available).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001775
1776(2)
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001777 When used with the :meth:`strptime` method, the ``%p`` directive only affects
Christian Heimes895627f2007-12-08 17:28:33 +00001778 the output hour field if the ``%I`` directive is used to parse the hour.
1779
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001780(3)
Alexander Belopolsky9971e002011-01-10 22:56:14 +00001781 Unlike :mod:`time` module, :mod:`datetime` module does not support
1782 leap seconds.
Christian Heimes895627f2007-12-08 17:28:33 +00001783
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001784(4)
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001785 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used in
Christian Heimes895627f2007-12-08 17:28:33 +00001786 calculations when the day of the week and the year are specified.
1787
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001788(5)
Alexander Belopolsky89da3492011-05-02 13:14:24 -04001789 The :meth:`strptime` method can
Alexander Belopolsky5fc850b2011-01-10 23:31:51 +00001790 parse years in the full [1, 9999] range, but years < 1000 must be
1791 zero-filled to 4-digit width.
Alexander Belopolsky085556a2011-01-10 23:28:33 +00001792
1793 .. versionchanged:: 3.2
1794 In previous versions, :meth:`strftime` method was restricted to
1795 years >= 1900.
1796
Alexander Belopolsky5611a1c2011-05-02 14:14:48 -04001797 .. versionchanged:: 3.3
1798 In version 3.2, :meth:`strftime` method was restricted to
1799 years >= 1000.
1800
Alexander Belopolsky085556a2011-01-10 23:28:33 +00001801(6)
Christian Heimes895627f2007-12-08 17:28:33 +00001802 For example, if :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``,
1803 ``%z`` is replaced with the string ``'-0330'``.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00001804
Georg Brandl67b21b72010-08-17 15:07:14 +00001805.. versionchanged:: 3.2
1806 When the ``%z`` directive is provided to the :meth:`strptime` method, an
1807 aware :class:`datetime` object will be produced. The ``tzinfo`` of the
1808 result will be set to a :class:`timezone` instance.