blob: 73b3901ffb3a8f5b13b4250d1e3b1832a0e40828 [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 Kumaran023c6f72011-07-17 19:01:14 +080028have an optional time zone information attribute, :attr:`tzinfo`, that can be
29set to an instance of a subclass of the abstract :class:`tzinfo` class. These
Georg Brandl116aa622007-08-15 14:28:22 +000030: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
Georg Brandl75546062011-09-17 20:20:04 +020033:mod:`datetime` module. The :class:`timezone` class can represent simple
Alexander Belopolsky4e749a12010-06-14 14:15:50 +000034timezones 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 Kumaran023c6f72011-07-17 19:01:14 +0800751 Return a new :class:`datetime` object whose date components are equal to the
752 given :class:`date` object's, and whose time components and :attr:`tzinfo`
753 attributes are equal to the given :class:`time` object's. For any
754 :class:`datetime` object *d*,
755 ``d == datetime.combine(d.date(), d.timetz())``. If date is a
756 :class:`datetime` object, its time components and :attr:`tzinfo` attributes
757 are ignored.
Georg Brandl116aa622007-08-15 14:28:22 +0000758
759
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000760.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +0000761
762 Return a :class:`datetime` corresponding to *date_string*, parsed according to
763 *format*. This is equivalent to ``datetime(*(time.strptime(date_string,
764 format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
765 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 +0000766 time tuple. See section :ref:`strftime-strptime-behavior`.
767
Georg Brandl116aa622007-08-15 14:28:22 +0000768
Georg Brandl116aa622007-08-15 14:28:22 +0000769
770Class attributes:
771
Georg Brandl116aa622007-08-15 14:28:22 +0000772.. attribute:: datetime.min
773
774 The earliest representable :class:`datetime`, ``datetime(MINYEAR, 1, 1,
775 tzinfo=None)``.
776
777
778.. attribute:: datetime.max
779
780 The latest representable :class:`datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
781 59, 999999, tzinfo=None)``.
782
783
784.. attribute:: datetime.resolution
785
786 The smallest possible difference between non-equal :class:`datetime` objects,
787 ``timedelta(microseconds=1)``.
788
Georg Brandl116aa622007-08-15 14:28:22 +0000789
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000790Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000791
792.. attribute:: datetime.year
793
794 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
795
796
797.. attribute:: datetime.month
798
799 Between 1 and 12 inclusive.
800
801
802.. attribute:: datetime.day
803
804 Between 1 and the number of days in the given month of the given year.
805
806
807.. attribute:: datetime.hour
808
809 In ``range(24)``.
810
811
812.. attribute:: datetime.minute
813
814 In ``range(60)``.
815
816
817.. attribute:: datetime.second
818
819 In ``range(60)``.
820
821
822.. attribute:: datetime.microsecond
823
824 In ``range(1000000)``.
825
826
827.. attribute:: datetime.tzinfo
828
829 The object passed as the *tzinfo* argument to the :class:`datetime` constructor,
830 or ``None`` if none was passed.
831
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000832
Georg Brandl116aa622007-08-15 14:28:22 +0000833Supported operations:
834
835+---------------------------------------+-------------------------------+
836| Operation | Result |
837+=======================================+===============================+
838| ``datetime2 = datetime1 + timedelta`` | \(1) |
839+---------------------------------------+-------------------------------+
840| ``datetime2 = datetime1 - timedelta`` | \(2) |
841+---------------------------------------+-------------------------------+
842| ``timedelta = datetime1 - datetime2`` | \(3) |
843+---------------------------------------+-------------------------------+
844| ``datetime1 < datetime2`` | Compares :class:`datetime` to |
845| | :class:`datetime`. (4) |
846+---------------------------------------+-------------------------------+
847
848(1)
849 datetime2 is a duration of timedelta removed from datetime1, moving forward in
850 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Senthil Kumarana6bac952011-07-04 11:28:30 -0700851 result has the same :attr:`tzinfo` attribute as the input datetime, and
852 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
853 datetime2.year would be smaller than :const:`MINYEAR` or larger than
854 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
855 input is an aware object.
Georg Brandl116aa622007-08-15 14:28:22 +0000856
857(2)
858 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Senthil Kumarana6bac952011-07-04 11:28:30 -0700859 addition, the result has the same :attr:`tzinfo` attribute as the input
860 datetime, and no time zone adjustments are done even if the input is aware.
861 This isn't quite equivalent to datetime1 + (-timedelta), because -timedelta
862 in isolation can overflow in cases where datetime1 - timedelta does not.
Georg Brandl116aa622007-08-15 14:28:22 +0000863
864(3)
865 Subtraction of a :class:`datetime` from a :class:`datetime` is defined only if
866 both operands are naive, or if both are aware. If one is aware and the other is
867 naive, :exc:`TypeError` is raised.
868
Senthil Kumarana6bac952011-07-04 11:28:30 -0700869 If both are naive, or both are aware and have the same :attr:`tzinfo` attribute,
870 the :attr:`tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Georg Brandl116aa622007-08-15 14:28:22 +0000871 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
872 are done in this case.
873
Senthil Kumarana6bac952011-07-04 11:28:30 -0700874 If both are aware and have different :attr:`tzinfo` attributes, ``a-b`` acts
875 as if *a* and *b* were first converted to naive UTC datetimes first. The
876 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
877 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl116aa622007-08-15 14:28:22 +0000878
879(4)
880 *datetime1* is considered less than *datetime2* when *datetime1* precedes
881 *datetime2* in time.
882
883 If one comparand is naive and the other is aware, :exc:`TypeError` is raised.
Senthil Kumarana6bac952011-07-04 11:28:30 -0700884 If both comparands are aware, and have the same :attr:`tzinfo` attribute, the
885 common :attr:`tzinfo` attribute is ignored and the base datetimes are
886 compared. If both comparands are aware and have different :attr:`tzinfo`
887 attributes, the comparands are first adjusted by subtracting their UTC
888 offsets (obtained from ``self.utcoffset()``).
Georg Brandl116aa622007-08-15 14:28:22 +0000889
890 .. note::
891
892 In order to stop comparison from falling back to the default scheme of comparing
893 object addresses, datetime comparison normally raises :exc:`TypeError` if the
894 other comparand isn't also a :class:`datetime` object. However,
895 ``NotImplemented`` is returned instead if the other comparand has a
896 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
897 chance at implementing mixed-type comparison. If not, when a :class:`datetime`
898 object is compared to an object of a different type, :exc:`TypeError` is raised
899 unless the comparison is ``==`` or ``!=``. The latter cases return
900 :const:`False` or :const:`True`, respectively.
901
902:class:`datetime` objects can be used as dictionary keys. In Boolean contexts,
903all :class:`datetime` objects are considered to be true.
904
905Instance methods:
906
Georg Brandl116aa622007-08-15 14:28:22 +0000907.. method:: datetime.date()
908
909 Return :class:`date` object with same year, month and day.
910
911
912.. method:: datetime.time()
913
914 Return :class:`time` object with same hour, minute, second and microsecond.
915 :attr:`tzinfo` is ``None``. See also method :meth:`timetz`.
916
917
918.. method:: datetime.timetz()
919
920 Return :class:`time` object with same hour, minute, second, microsecond, and
Senthil Kumarana6bac952011-07-04 11:28:30 -0700921 tzinfo attributes. See also method :meth:`time`.
Georg Brandl116aa622007-08-15 14:28:22 +0000922
923
924.. method:: datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
925
Senthil Kumarana6bac952011-07-04 11:28:30 -0700926 Return a datetime with the same attributes, except for those attributes given
927 new values by whichever keyword arguments are specified. Note that
928 ``tzinfo=None`` can be specified to create a naive datetime from an aware
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800929 datetime with no conversion of date and time data.
Georg Brandl116aa622007-08-15 14:28:22 +0000930
931
932.. method:: datetime.astimezone(tz)
933
Senthil Kumarana6bac952011-07-04 11:28:30 -0700934 Return a :class:`datetime` object with new :attr:`tzinfo` attribute *tz*,
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800935 adjusting the date and time data so the result is the same UTC time as
Senthil Kumarana6bac952011-07-04 11:28:30 -0700936 *self*, but in *tz*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +0000937
938 *tz* must be an instance of a :class:`tzinfo` subclass, and its
939 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. *self* must
940 be aware (``self.tzinfo`` must not be ``None``, and ``self.utcoffset()`` must
941 not return ``None``).
942
943 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800944 adjustment of date or time data is performed. Else the result is local
Senthil Kumarana6bac952011-07-04 11:28:30 -0700945 time in time zone *tz*, representing the same UTC time as *self*: after
946 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will usually have
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800947 the same date and time data as ``dt - dt.utcoffset()``. The discussion
Senthil Kumarana6bac952011-07-04 11:28:30 -0700948 of class :class:`tzinfo` explains the cases at Daylight Saving Time transition
949 boundaries where this cannot be achieved (an issue only if *tz* models both
950 standard and daylight time).
Georg Brandl116aa622007-08-15 14:28:22 +0000951
952 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800953 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl116aa622007-08-15 14:28:22 +0000954 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumaran023c6f72011-07-17 19:01:14 +0800955 conversion of date and time data, use ``dt.replace(tzinfo=None)``.
Georg Brandl116aa622007-08-15 14:28:22 +0000956
957 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
958 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
959 Ignoring error cases, :meth:`astimezone` acts like::
960
961 def astimezone(self, tz):
962 if self.tzinfo is tz:
963 return self
964 # Convert self to UTC, and attach the new time zone object.
965 utc = (self - self.utcoffset()).replace(tzinfo=tz)
966 # Convert from UTC to tz's local time.
967 return tz.fromutc(utc)
968
969
970.. method:: datetime.utcoffset()
971
972 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
973 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
974 return ``None``, or a :class:`timedelta` object representing a whole number of
975 minutes with magnitude less than one day.
976
977
978.. method:: datetime.dst()
979
980 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
981 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
982 ``None``, or a :class:`timedelta` object representing a whole number of minutes
983 with magnitude less than one day.
984
985
986.. method:: datetime.tzname()
987
988 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
989 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
990 ``None`` or a string object,
991
992
993.. method:: datetime.timetuple()
994
995 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
996 ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day,
Alexander Belopolsky64912482010-06-08 18:59:20 +0000997 d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday =
998 d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within
999 the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag
1000 of the result is set according to the :meth:`dst` method: :attr:`tzinfo` is
Georg Brandl682d7e02010-10-06 10:26:05 +00001001 ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``;
Alexander Belopolsky64912482010-06-08 18:59:20 +00001002 else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``;
Alexander Belopolskyda62f2f2010-06-09 17:11:01 +00001003 else :attr:`tm_isdst` is set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +00001004
1005
1006.. method:: datetime.utctimetuple()
1007
1008 If :class:`datetime` instance *d* is naive, this is the same as
1009 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
1010 ``d.dst()`` returns. DST is never in effect for a UTC time.
1011
1012 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +00001013 ``d.utcoffset()``, and a :class:`time.struct_time` for the
1014 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
1015 that an :exc:`OverflowError` may be raised if *d*.year was
1016 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +00001017 boundary.
1018
1019
1020.. method:: datetime.toordinal()
1021
1022 Return the proleptic Gregorian ordinal of the date. The same as
1023 ``self.date().toordinal()``.
1024
1025
1026.. method:: datetime.weekday()
1027
1028 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1029 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1030
1031
1032.. method:: datetime.isoweekday()
1033
1034 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1035 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1036 :meth:`isocalendar`.
1037
1038
1039.. method:: datetime.isocalendar()
1040
1041 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
1042 ``self.date().isocalendar()``.
1043
1044
Georg Brandlc2a4f4f2009-04-10 09:03:43 +00001045.. method:: datetime.isoformat(sep='T')
Georg Brandl116aa622007-08-15 14:28:22 +00001046
1047 Return a string representing the date and time in ISO 8601 format,
1048 YYYY-MM-DDTHH:MM:SS.mmmmmm or, if :attr:`microsecond` is 0,
1049 YYYY-MM-DDTHH:MM:SS
1050
1051 If :meth:`utcoffset` does not return ``None``, a 6-character string is
1052 appended, giving the UTC offset in (signed) hours and minutes:
1053 YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM or, if :attr:`microsecond` is 0
1054 YYYY-MM-DDTHH:MM:SS+HH:MM
1055
1056 The optional argument *sep* (default ``'T'``) is a one-character separator,
Christian Heimesfe337bf2008-03-23 21:54:12 +00001057 placed between the date and time portions of the result. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00001058
1059 >>> from datetime import tzinfo, timedelta, datetime
1060 >>> class TZ(tzinfo):
1061 ... def utcoffset(self, dt): return timedelta(minutes=-399)
1062 ...
1063 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1064 '2002-12-25 00:00:00-06:39'
1065
1066
1067.. method:: datetime.__str__()
1068
1069 For a :class:`datetime` instance *d*, ``str(d)`` is equivalent to
1070 ``d.isoformat(' ')``.
1071
1072
1073.. method:: datetime.ctime()
1074
1075 Return a string representing the date and time, for example ``datetime(2002, 12,
1076 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:40 2002'``. ``d.ctime()`` is
1077 equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the
Georg Brandl60203b42010-10-06 10:11:56 +00001078 native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +00001079 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
1080
1081
1082.. method:: datetime.strftime(format)
1083
1084 Return a string representing the date and time, controlled by an explicit format
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001085 string. See section :ref:`strftime-strptime-behavior`.
1086
Georg Brandl116aa622007-08-15 14:28:22 +00001087
Christian Heimesfe337bf2008-03-23 21:54:12 +00001088Examples of working with datetime objects:
1089
1090.. doctest::
1091
Christian Heimes895627f2007-12-08 17:28:33 +00001092 >>> from datetime import datetime, date, time
1093 >>> # Using datetime.combine()
1094 >>> d = date(2005, 7, 14)
1095 >>> t = time(12, 30)
1096 >>> datetime.combine(d, t)
1097 datetime.datetime(2005, 7, 14, 12, 30)
1098 >>> # Using datetime.now() or datetime.utcnow()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001099 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001100 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Christian Heimesfe337bf2008-03-23 21:54:12 +00001101 >>> datetime.utcnow() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001102 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
1103 >>> # Using datetime.strptime()
1104 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1105 >>> dt
1106 datetime.datetime(2006, 11, 21, 16, 30)
1107 >>> # Using datetime.timetuple() to get tuple of all attributes
1108 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001109 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001110 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001111 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001112 2006 # year
1113 11 # month
1114 21 # day
1115 16 # hour
1116 30 # minute
1117 0 # second
1118 1 # weekday (0 = Monday)
1119 325 # number of days since 1st January
1120 -1 # dst - method tzinfo.dst() returned None
1121 >>> # Date in ISO format
1122 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001123 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001124 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001125 ...
1126 2006 # ISO year
1127 47 # ISO week
1128 2 # ISO weekday
1129 >>> # Formatting datetime
1130 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1131 'Tuesday, 21. November 2006 04:30PM'
1132
Christian Heimesfe337bf2008-03-23 21:54:12 +00001133Using datetime with tzinfo:
Christian Heimes895627f2007-12-08 17:28:33 +00001134
1135 >>> from datetime import timedelta, datetime, tzinfo
1136 >>> class GMT1(tzinfo):
1137 ... def __init__(self): # DST starts last Sunday in March
1138 ... d = datetime(dt.year, 4, 1) # ends last Sunday in October
1139 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001140 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001141 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
1142 ... def utcoffset(self, dt):
1143 ... return timedelta(hours=1) + self.dst(dt)
Georg Brandl48310cd2009-01-03 21:18:54 +00001144 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001145 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1146 ... return timedelta(hours=1)
1147 ... else:
1148 ... return timedelta(0)
1149 ... def tzname(self,dt):
1150 ... return "GMT +1"
Georg Brandl48310cd2009-01-03 21:18:54 +00001151 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001152 >>> class GMT2(tzinfo):
1153 ... def __init__(self):
Georg Brandl48310cd2009-01-03 21:18:54 +00001154 ... d = datetime(dt.year, 4, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001155 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001156 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001157 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
1158 ... def utcoffset(self, dt):
1159 ... return timedelta(hours=1) + self.dst(dt)
1160 ... def dst(self, dt):
1161 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1162 ... return timedelta(hours=2)
1163 ... else:
1164 ... return timedelta(0)
1165 ... def tzname(self,dt):
1166 ... return "GMT +2"
Georg Brandl48310cd2009-01-03 21:18:54 +00001167 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001168 >>> gmt1 = GMT1()
1169 >>> # Daylight Saving Time
1170 >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
1171 >>> dt1.dst()
1172 datetime.timedelta(0)
1173 >>> dt1.utcoffset()
1174 datetime.timedelta(0, 3600)
1175 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
1176 >>> dt2.dst()
1177 datetime.timedelta(0, 3600)
1178 >>> dt2.utcoffset()
1179 datetime.timedelta(0, 7200)
1180 >>> # Convert datetime to another time zone
1181 >>> dt3 = dt2.astimezone(GMT2())
1182 >>> dt3 # doctest: +ELLIPSIS
1183 datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
1184 >>> dt2 # doctest: +ELLIPSIS
1185 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
1186 >>> dt2.utctimetuple() == dt3.utctimetuple()
1187 True
Georg Brandl48310cd2009-01-03 21:18:54 +00001188
Christian Heimes895627f2007-12-08 17:28:33 +00001189
Georg Brandl116aa622007-08-15 14:28:22 +00001190
1191.. _datetime-time:
1192
1193:class:`time` Objects
1194---------------------
1195
1196A time object represents a (local) time of day, independent of any particular
1197day, and subject to adjustment via a :class:`tzinfo` object.
1198
Georg Brandlc2a4f4f2009-04-10 09:03:43 +00001199.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001200
1201 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
Georg Brandl5c106642007-11-29 17:41:05 +00001202 :class:`tzinfo` subclass. The remaining arguments may be integers, in the
Georg Brandl116aa622007-08-15 14:28:22 +00001203 following ranges:
1204
1205 * ``0 <= hour < 24``
1206 * ``0 <= minute < 60``
1207 * ``0 <= second < 60``
1208 * ``0 <= microsecond < 1000000``.
1209
1210 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
1211 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1212
1213Class attributes:
1214
1215
1216.. attribute:: time.min
1217
1218 The earliest representable :class:`time`, ``time(0, 0, 0, 0)``.
1219
1220
1221.. attribute:: time.max
1222
1223 The latest representable :class:`time`, ``time(23, 59, 59, 999999)``.
1224
1225
1226.. attribute:: time.resolution
1227
1228 The smallest possible difference between non-equal :class:`time` objects,
1229 ``timedelta(microseconds=1)``, although note that arithmetic on :class:`time`
1230 objects is not supported.
1231
Georg Brandl116aa622007-08-15 14:28:22 +00001232
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001233Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001234
1235.. attribute:: time.hour
1236
1237 In ``range(24)``.
1238
1239
1240.. attribute:: time.minute
1241
1242 In ``range(60)``.
1243
1244
1245.. attribute:: time.second
1246
1247 In ``range(60)``.
1248
1249
1250.. attribute:: time.microsecond
1251
1252 In ``range(1000000)``.
1253
1254
1255.. attribute:: time.tzinfo
1256
1257 The object passed as the tzinfo argument to the :class:`time` constructor, or
1258 ``None`` if none was passed.
1259
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001260
Georg Brandl116aa622007-08-15 14:28:22 +00001261Supported operations:
1262
1263* comparison of :class:`time` to :class:`time`, where *a* is considered less
1264 than *b* when *a* precedes *b* in time. If one comparand is naive and the other
1265 is aware, :exc:`TypeError` is raised. If both comparands are aware, and have
Senthil Kumarana6bac952011-07-04 11:28:30 -07001266 the same :attr:`tzinfo` attribute, the common :attr:`tzinfo` attribute is
1267 ignored and the base times are compared. If both comparands are aware and
1268 have different :attr:`tzinfo` attributes, the comparands are first adjusted by
1269 subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1270 to stop mixed-type comparisons from falling back to the default comparison by
1271 object address, when a :class:`time` object is compared to an object of a
Senthil Kumaran3aac1792011-07-04 11:43:51 -07001272 different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
Senthil Kumarana6bac952011-07-04 11:28:30 -07001273 ``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl116aa622007-08-15 14:28:22 +00001274
1275* hash, use as dict key
1276
1277* efficient pickling
1278
1279* in Boolean contexts, a :class:`time` object is considered to be true if and
1280 only if, after converting it to minutes and subtracting :meth:`utcoffset` (or
1281 ``0`` if that's ``None``), the result is non-zero.
1282
Georg Brandl116aa622007-08-15 14:28:22 +00001283
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001284Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001285
1286.. method:: time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
1287
Senthil Kumarana6bac952011-07-04 11:28:30 -07001288 Return a :class:`time` with the same value, except for those attributes given
1289 new values by whichever keyword arguments are specified. Note that
1290 ``tzinfo=None`` can be specified to create a naive :class:`time` from an
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001291 aware :class:`time`, without conversion of the time data.
Georg Brandl116aa622007-08-15 14:28:22 +00001292
1293
1294.. method:: time.isoformat()
1295
1296 Return a string representing the time in ISO 8601 format, HH:MM:SS.mmmmmm or, if
1297 self.microsecond is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a
1298 6-character string is appended, giving the UTC offset in (signed) hours and
1299 minutes: HH:MM:SS.mmmmmm+HH:MM or, if self.microsecond is 0, HH:MM:SS+HH:MM
1300
1301
1302.. method:: time.__str__()
1303
1304 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1305
1306
1307.. method:: time.strftime(format)
1308
1309 Return a string representing the time, controlled by an explicit format string.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001310 See section :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001311
1312
1313.. method:: time.utcoffset()
1314
1315 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1316 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
1317 return ``None`` or a :class:`timedelta` object representing a whole number of
1318 minutes with magnitude less than one day.
1319
1320
1321.. method:: time.dst()
1322
1323 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1324 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
1325 ``None``, or a :class:`timedelta` object representing a whole number of minutes
1326 with magnitude less than one day.
1327
1328
1329.. method:: time.tzname()
1330
1331 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1332 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1333 return ``None`` or a string object.
1334
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001335
Christian Heimesfe337bf2008-03-23 21:54:12 +00001336Example:
Georg Brandl48310cd2009-01-03 21:18:54 +00001337
Christian Heimes895627f2007-12-08 17:28:33 +00001338 >>> from datetime import time, tzinfo
1339 >>> class GMT1(tzinfo):
1340 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001341 ... return timedelta(hours=1)
1342 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001343 ... return timedelta(0)
1344 ... def tzname(self,dt):
1345 ... return "Europe/Prague"
1346 ...
1347 >>> t = time(12, 10, 30, tzinfo=GMT1())
1348 >>> t # doctest: +ELLIPSIS
1349 datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>)
1350 >>> gmt = GMT1()
1351 >>> t.isoformat()
1352 '12:10:30+01:00'
1353 >>> t.dst()
1354 datetime.timedelta(0)
1355 >>> t.tzname()
1356 'Europe/Prague'
1357 >>> t.strftime("%H:%M:%S %Z")
1358 '12:10:30 Europe/Prague'
1359
Georg Brandl116aa622007-08-15 14:28:22 +00001360
1361.. _datetime-tzinfo:
1362
1363:class:`tzinfo` Objects
1364-----------------------
1365
Brett Cannone1327f72009-01-29 04:10:21 +00001366:class:`tzinfo` is an abstract base class, meaning that this class should not be
Georg Brandl116aa622007-08-15 14:28:22 +00001367instantiated directly. You need to derive a concrete subclass, and (at least)
1368supply implementations of the standard :class:`tzinfo` methods needed by the
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001369:class:`datetime` methods you use. The :mod:`datetime` module supplies
1370a simple concrete subclass of :class:`tzinfo` :class:`timezone` which can reprsent
1371timezones with fixed offset from UTC such as UTC itself or North American EST and
1372EDT.
Georg Brandl116aa622007-08-15 14:28:22 +00001373
1374An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1375constructors for :class:`datetime` and :class:`time` objects. The latter objects
Senthil Kumarana6bac952011-07-04 11:28:30 -07001376view their attributes as being in local time, and the :class:`tzinfo` object
Georg Brandl116aa622007-08-15 14:28:22 +00001377supports methods revealing offset of local time from UTC, the name of the time
1378zone, and DST offset, all relative to a date or time object passed to them.
1379
1380Special requirement for pickling: A :class:`tzinfo` subclass must have an
1381:meth:`__init__` method that can be called with no arguments, else it can be
1382pickled but possibly not unpickled again. This is a technical requirement that
1383may be relaxed in the future.
1384
1385A concrete subclass of :class:`tzinfo` may need to implement the following
1386methods. Exactly which methods are needed depends on the uses made of aware
1387:mod:`datetime` objects. If in doubt, simply implement all of them.
1388
1389
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001390.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001391
1392 Return offset of local time from UTC, in minutes east of UTC. If local time is
1393 west of UTC, this should be negative. Note that this is intended to be the
1394 total offset from UTC; for example, if a :class:`tzinfo` object represents both
1395 time zone and DST adjustments, :meth:`utcoffset` should return their sum. If
1396 the UTC offset isn't known, return ``None``. Else the value returned must be a
1397 :class:`timedelta` object specifying a whole number of minutes in the range
1398 -1439 to 1439 inclusive (1440 = 24\*60; the magnitude of the offset must be less
1399 than one day). Most implementations of :meth:`utcoffset` will probably look
1400 like one of these two::
1401
1402 return CONSTANT # fixed-offset class
1403 return CONSTANT + self.dst(dt) # daylight-aware class
1404
1405 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1406 ``None`` either.
1407
1408 The default implementation of :meth:`utcoffset` raises
1409 :exc:`NotImplementedError`.
1410
1411
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001412.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001413
1414 Return the daylight saving time (DST) adjustment, in minutes east of UTC, or
1415 ``None`` if DST information isn't known. Return ``timedelta(0)`` if DST is not
1416 in effect. If DST is in effect, return the offset as a :class:`timedelta` object
1417 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1418 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1419 no need to consult :meth:`dst` unless you're interested in obtaining DST info
1420 separately. For example, :meth:`datetime.timetuple` calls its :attr:`tzinfo`
Senthil Kumarana6bac952011-07-04 11:28:30 -07001421 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1422 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1423 DST changes when crossing time zones.
Georg Brandl116aa622007-08-15 14:28:22 +00001424
1425 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1426 daylight times must be consistent in this sense:
1427
1428 ``tz.utcoffset(dt) - tz.dst(dt)``
1429
1430 must return the same result for every :class:`datetime` *dt* with ``dt.tzinfo ==
1431 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1432 zone's "standard offset", which should not depend on the date or the time, but
1433 only on geographic location. The implementation of :meth:`datetime.astimezone`
1434 relies on this, but cannot detect violations; it's the programmer's
1435 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
1436 this, it may be able to override the default implementation of
1437 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
1438
1439 Most implementations of :meth:`dst` will probably look like one of these two::
1440
1441 def dst(self):
1442 # a fixed-offset class: doesn't account for DST
1443 return timedelta(0)
1444
1445 or ::
1446
1447 def dst(self):
1448 # Code to set dston and dstoff to the time zone's DST
1449 # transition times based on the input dt.year, and expressed
1450 # in standard local time. Then
1451
1452 if dston <= dt.replace(tzinfo=None) < dstoff:
1453 return timedelta(hours=1)
1454 else:
1455 return timedelta(0)
1456
1457 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
1458
1459
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001460.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001461
1462 Return the time zone name corresponding to the :class:`datetime` object *dt*, as
1463 a string. Nothing about string names is defined by the :mod:`datetime` module,
1464 and there's no requirement that it mean anything in particular. For example,
1465 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
1466 valid replies. Return ``None`` if a string name isn't known. Note that this is
1467 a method rather than a fixed string primarily because some :class:`tzinfo`
1468 subclasses will wish to return different names depending on the specific value
1469 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
1470 daylight time.
1471
1472 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
1473
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001474
Georg Brandl116aa622007-08-15 14:28:22 +00001475These methods are called by a :class:`datetime` or :class:`time` object, in
1476response to their methods of the same names. A :class:`datetime` object passes
1477itself as the argument, and a :class:`time` object passes ``None`` as the
1478argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
1479accept a *dt* argument of ``None``, or of class :class:`datetime`.
1480
1481When ``None`` is passed, it's up to the class designer to decide the best
1482response. For example, returning ``None`` is appropriate if the class wishes to
1483say that time objects don't participate in the :class:`tzinfo` protocols. It
1484may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
1485there is no other convention for discovering the standard offset.
1486
1487When a :class:`datetime` object is passed in response to a :class:`datetime`
1488method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
1489rely on this, unless user code calls :class:`tzinfo` methods directly. The
1490intent is that the :class:`tzinfo` methods interpret *dt* as being in local
1491time, and not need worry about objects in other timezones.
1492
1493There is one more :class:`tzinfo` method that a subclass may wish to override:
1494
1495
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001496.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001497
Senthil Kumaran023c6f72011-07-17 19:01:14 +08001498 This is called from the default :class:`datetime.astimezone()`
1499 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
1500 date and time data are to be viewed as expressing a UTC time. The purpose
1501 of :meth:`fromutc` is to adjust the date and time data, returning an
Senthil Kumarana6bac952011-07-04 11:28:30 -07001502 equivalent datetime in *self*'s local time.
Georg Brandl116aa622007-08-15 14:28:22 +00001503
1504 Most :class:`tzinfo` subclasses should be able to inherit the default
1505 :meth:`fromutc` implementation without problems. It's strong enough to handle
1506 fixed-offset time zones, and time zones accounting for both standard and
1507 daylight time, and the latter even if the DST transition times differ in
1508 different years. An example of a time zone the default :meth:`fromutc`
1509 implementation may not handle correctly in all cases is one where the standard
1510 offset (from UTC) depends on the specific date and time passed, which can happen
1511 for political reasons. The default implementations of :meth:`astimezone` and
1512 :meth:`fromutc` may not produce the result you want if the result is one of the
1513 hours straddling the moment the standard offset changes.
1514
1515 Skipping code for error cases, the default :meth:`fromutc` implementation acts
1516 like::
1517
1518 def fromutc(self, dt):
1519 # raise ValueError error if dt.tzinfo is not self
1520 dtoff = dt.utcoffset()
1521 dtdst = dt.dst()
1522 # raise ValueError if dtoff is None or dtdst is None
1523 delta = dtoff - dtdst # this is self's standard offset
1524 if delta:
1525 dt += delta # convert to standard local time
1526 dtdst = dt.dst()
1527 # raise ValueError if dtdst is None
1528 if dtdst:
1529 return dt + dtdst
1530 else:
1531 return dt
1532
1533Example :class:`tzinfo` classes:
1534
1535.. literalinclude:: ../includes/tzinfo-examples.py
1536
1537
1538Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
1539subclass accounting for both standard and daylight time, at the DST transition
1540points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00001541minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
15421:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00001543
1544 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
1545 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
1546 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
1547
1548 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
1549
1550 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
1551
1552When DST starts (the "start" line), the local wall clock leaps from 1:59 to
15533:00. A wall time of the form 2:MM doesn't really make sense on that day, so
1554``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
1555begins. In order for :meth:`astimezone` to make this guarantee, the
1556:meth:`rzinfo.dst` method must consider times in the "missing hour" (2:MM for
1557Eastern) to be in daylight time.
1558
1559When DST ends (the "end" line), there's a potentially worse problem: there's an
1560hour that can't be spelled unambiguously in local wall time: the last hour of
1561daylight time. In Eastern, that's times of the form 5:MM UTC on the day
1562daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
1563to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
1564:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
1565hours into the same local hour then. In the Eastern example, UTC times of the
1566form 5:MM and 6:MM both map to 1:MM when converted to Eastern. In order for
1567:meth:`astimezone` to make this guarantee, the :meth:`tzinfo.dst` method must
1568consider times in the "repeated hour" to be in standard time. This is easily
1569arranged, as in the example, by expressing DST switch times in the time zone's
1570standard local time.
1571
1572Applications that can't bear such ambiguities should avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001573:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
1574or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
1575only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
1576
1577
1578.. _datetime-timezone:
1579
1580:class:`timezone` Objects
1581--------------------------
1582
Alexander Belopolsky6d3c9a62011-05-04 10:28:26 -04001583The :class:`timezone` class is a subclass of :class:`tzinfo`, each
1584instance of which represents a timezone defined by a fixed offset from
1585UTC. Note that objects of this class cannot be used to represent
1586timezone information in the locations where different offsets are used
1587in different days of the year or where historical changes have been
1588made to civil time.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001589
1590
1591.. class:: timezone(offset[, name])
1592
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001593 The *offset* argument must be specified as a :class:`timedelta`
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001594 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001595 be strictly between ``-timedelta(hours=24)`` and
1596 ``timedelta(hours=24)`` and represent a whole number of minutes,
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001597 otherwise :exc:`ValueError` is raised.
1598
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001599 The *name* argument is optional. If specified it must be a string that
1600 is used as the value returned by the ``tzname(dt)`` method. Otherwise,
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001601 ``tzname(dt)`` returns a string 'UTCsHH:MM', where s is the sign of
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001602 *offset*, HH and MM are two digits of ``offset.hours`` and
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001603 ``offset.minutes`` respectively.
1604
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001605.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001606
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001607 Return the fixed value specified when the :class:`timezone` instance is
1608 constructed. The *dt* argument is ignored. The return value is a
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001609 :class:`timedelta` instance equal to the difference between the
1610 local time and UTC.
1611
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001612.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001613
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001614 Return the fixed value specified when the :class:`timezone` instance is
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001615 constructed or a string 'UTCsHH:MM', where s is the sign of
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001616 *offset*, HH and MM are two digits of ``offset.hours`` and
1617 ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001618
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001619.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001620
1621 Always returns ``None``.
1622
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001623.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001624
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001625 Return ``dt + offset``. The *dt* argument must be an aware
1626 :class:`datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001627
1628Class attributes:
1629
1630.. attribute:: timezone.utc
1631
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001632 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00001633
Georg Brandl116aa622007-08-15 14:28:22 +00001634
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001635.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00001636
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001637:meth:`strftime` and :meth:`strptime` Behavior
1638----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001639
1640:class:`date`, :class:`datetime`, and :class:`time` objects all support a
1641``strftime(format)`` method, to create a string representing the time under the
1642control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
1643acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
1644although not all objects support a :meth:`timetuple` method.
1645
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001646Conversely, the :meth:`datetime.strptime` class method creates a
1647:class:`datetime` object from a string representing a date and time and a
1648corresponding format string. ``datetime.strptime(date_string, format)`` is
1649equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``.
1650
Georg Brandl116aa622007-08-15 14:28:22 +00001651For :class:`time` objects, the format codes for year, month, and day should not
1652be used, as time objects have no such values. If they're used anyway, ``1900``
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001653is substituted for the year, and ``1`` for the month and day.
Georg Brandl116aa622007-08-15 14:28:22 +00001654
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001655For :class:`date` objects, the format codes for hours, minutes, seconds, and
1656microseconds should not be used, as :class:`date` objects have no such
1657values. If they're used anyway, ``0`` is substituted for them.
1658
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001659For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
1660strings.
1661
1662For an aware object:
1663
1664``%z``
1665 :meth:`utcoffset` is transformed into a 5-character string of the form +HHMM or
1666 -HHMM, where HH is a 2-digit string giving the number of UTC offset hours, and
1667 MM is a 2-digit string giving the number of UTC offset minutes. For example, if
1668 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
1669 replaced with the string ``'-0330'``.
1670
1671``%Z``
1672 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty string.
1673 Otherwise ``%Z`` is replaced by the returned value, which must be a string.
Georg Brandl116aa622007-08-15 14:28:22 +00001674
Georg Brandl116aa622007-08-15 14:28:22 +00001675The full set of format codes supported varies across platforms, because Python
1676calls the platform C library's :func:`strftime` function, and platform
Georg Brandl48310cd2009-01-03 21:18:54 +00001677variations are common.
Christian Heimes895627f2007-12-08 17:28:33 +00001678
1679The following is a list of all the format codes that the C standard (1989
1680version) requires, and these work on all platforms with a standard C
1681implementation. Note that the 1999 version of the C standard added additional
1682format codes.
Georg Brandl116aa622007-08-15 14:28:22 +00001683
Christian Heimes895627f2007-12-08 17:28:33 +00001684+-----------+--------------------------------+-------+
1685| Directive | Meaning | Notes |
1686+===========+================================+=======+
1687| ``%a`` | Locale's abbreviated weekday | |
1688| | name. | |
1689+-----------+--------------------------------+-------+
1690| ``%A`` | Locale's full weekday name. | |
1691+-----------+--------------------------------+-------+
1692| ``%b`` | Locale's abbreviated month | |
1693| | name. | |
1694+-----------+--------------------------------+-------+
1695| ``%B`` | Locale's full month name. | |
1696+-----------+--------------------------------+-------+
1697| ``%c`` | Locale's appropriate date and | |
1698| | time representation. | |
1699+-----------+--------------------------------+-------+
1700| ``%d`` | Day of the month as a decimal | |
1701| | number [01,31]. | |
1702+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001703| ``%f`` | Microsecond as a decimal | \(1) |
1704| | number [0,999999], zero-padded | |
1705| | on the left | |
1706+-----------+--------------------------------+-------+
Christian Heimes895627f2007-12-08 17:28:33 +00001707| ``%H`` | Hour (24-hour clock) as a | |
1708| | decimal number [00,23]. | |
1709+-----------+--------------------------------+-------+
1710| ``%I`` | Hour (12-hour clock) as a | |
1711| | decimal number [01,12]. | |
1712+-----------+--------------------------------+-------+
1713| ``%j`` | Day of the year as a decimal | |
1714| | number [001,366]. | |
1715+-----------+--------------------------------+-------+
1716| ``%m`` | Month as a decimal number | |
1717| | [01,12]. | |
1718+-----------+--------------------------------+-------+
1719| ``%M`` | Minute as a decimal number | |
1720| | [00,59]. | |
1721+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001722| ``%p`` | Locale's equivalent of either | \(2) |
Christian Heimes895627f2007-12-08 17:28:33 +00001723| | AM or PM. | |
1724+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001725| ``%S`` | Second as a decimal number | \(3) |
Alexander Belopolsky9971e002011-01-10 22:56:14 +00001726| | [00,59]. | |
Christian Heimes895627f2007-12-08 17:28:33 +00001727+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001728| ``%U`` | Week number of the year | \(4) |
Christian Heimes895627f2007-12-08 17:28:33 +00001729| | (Sunday as the first day of | |
1730| | the week) as a decimal number | |
1731| | [00,53]. All days in a new | |
1732| | year preceding the first | |
1733| | Sunday are considered to be in | |
1734| | week 0. | |
1735+-----------+--------------------------------+-------+
1736| ``%w`` | Weekday as a decimal number | |
1737| | [0(Sunday),6]. | |
1738+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001739| ``%W`` | Week number of the year | \(4) |
Christian Heimes895627f2007-12-08 17:28:33 +00001740| | (Monday as the first day of | |
1741| | the week) as a decimal number | |
1742| | [00,53]. All days in a new | |
1743| | year preceding the first | |
1744| | Monday are considered to be in | |
1745| | week 0. | |
1746+-----------+--------------------------------+-------+
1747| ``%x`` | Locale's appropriate date | |
1748| | representation. | |
1749+-----------+--------------------------------+-------+
1750| ``%X`` | Locale's appropriate time | |
1751| | representation. | |
1752+-----------+--------------------------------+-------+
1753| ``%y`` | Year without century as a | |
1754| | decimal number [00,99]. | |
1755+-----------+--------------------------------+-------+
Alexander Belopolsky085556a2011-01-10 23:28:33 +00001756| ``%Y`` | Year with century as a decimal | \(5) |
Alexander Belopolsky89da3492011-05-02 13:14:24 -04001757| | number [0001,9999]. | |
Christian Heimes895627f2007-12-08 17:28:33 +00001758+-----------+--------------------------------+-------+
Alexander Belopolsky085556a2011-01-10 23:28:33 +00001759| ``%z`` | UTC offset in the form +HHMM | \(6) |
Christian Heimes895627f2007-12-08 17:28:33 +00001760| | or -HHMM (empty string if the | |
1761| | the object is naive). | |
1762+-----------+--------------------------------+-------+
1763| ``%Z`` | Time zone name (empty string | |
1764| | if the object is naive). | |
1765+-----------+--------------------------------+-------+
1766| ``%%`` | A literal ``'%'`` character. | |
1767+-----------+--------------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00001768
Christian Heimes895627f2007-12-08 17:28:33 +00001769Notes:
1770
1771(1)
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001772 When used with the :meth:`strptime` method, the ``%f`` directive
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001773 accepts from one to six digits and zero pads on the right. ``%f`` is
Benjamin Petersonb58dda72009-01-18 22:27:04 +00001774 an extension to the set of format characters in the C standard (but
1775 implemented separately in datetime objects, and therefore always
1776 available).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001777
1778(2)
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001779 When used with the :meth:`strptime` method, the ``%p`` directive only affects
Christian Heimes895627f2007-12-08 17:28:33 +00001780 the output hour field if the ``%I`` directive is used to parse the hour.
1781
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001782(3)
Alexander Belopolsky9971e002011-01-10 22:56:14 +00001783 Unlike :mod:`time` module, :mod:`datetime` module does not support
1784 leap seconds.
Christian Heimes895627f2007-12-08 17:28:33 +00001785
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001786(4)
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001787 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used in
Christian Heimes895627f2007-12-08 17:28:33 +00001788 calculations when the day of the week and the year are specified.
1789
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001790(5)
Alexander Belopolsky89da3492011-05-02 13:14:24 -04001791 The :meth:`strptime` method can
Alexander Belopolsky5fc850b2011-01-10 23:31:51 +00001792 parse years in the full [1, 9999] range, but years < 1000 must be
1793 zero-filled to 4-digit width.
Alexander Belopolsky085556a2011-01-10 23:28:33 +00001794
1795 .. versionchanged:: 3.2
1796 In previous versions, :meth:`strftime` method was restricted to
1797 years >= 1900.
1798
Alexander Belopolsky5611a1c2011-05-02 14:14:48 -04001799 .. versionchanged:: 3.3
1800 In version 3.2, :meth:`strftime` method was restricted to
1801 years >= 1000.
1802
Alexander Belopolsky085556a2011-01-10 23:28:33 +00001803(6)
Christian Heimes895627f2007-12-08 17:28:33 +00001804 For example, if :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``,
1805 ``%z`` is replaced with the string ``'-0330'``.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00001806
Georg Brandl67b21b72010-08-17 15:07:14 +00001807.. versionchanged:: 3.2
1808 When the ``%z`` directive is provided to the :meth:`strptime` method, an
1809 aware :class:`datetime` object will be produced. The ``tzinfo`` of the
1810 result will be set to a :class:`timezone` instance.