blob: b9adbcca349bb16c4bfbf2bbaa8eeb218c8580c5 [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
14focus of the implementation is on efficient member extraction for output
15formatting 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
28have an optional time zone information member, :attr:`tzinfo`, that can contain
29an 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
502 Return a date with the same value, except for those members given new values by
503 whichever keyword arguments are specified. For example, if ``d == date(2002,
504 12, 31)``, then ``d.replace(day=26) == date(2002, 12, 26)``.
505
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
724
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000725.. classmethod:: datetime.fromordinal(ordinal)
Georg Brandl116aa622007-08-15 14:28:22 +0000726
727 Return the :class:`datetime` corresponding to the proleptic Gregorian ordinal,
728 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
729 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and
730 microsecond of the result are all 0, and :attr:`tzinfo` is ``None``.
731
732
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000733.. classmethod:: datetime.combine(date, time)
Georg Brandl116aa622007-08-15 14:28:22 +0000734
735 Return a new :class:`datetime` object whose date members are equal to the given
736 :class:`date` object's, and whose time and :attr:`tzinfo` members are equal to
737 the given :class:`time` object's. For any :class:`datetime` object *d*, ``d ==
738 datetime.combine(d.date(), d.timetz())``. If date is a :class:`datetime`
739 object, its time and :attr:`tzinfo` members are ignored.
740
741
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000742.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl116aa622007-08-15 14:28:22 +0000743
744 Return a :class:`datetime` corresponding to *date_string*, parsed according to
745 *format*. This is equivalent to ``datetime(*(time.strptime(date_string,
746 format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
747 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 +0000748 time tuple. See section :ref:`strftime-strptime-behavior`.
749
Georg Brandl116aa622007-08-15 14:28:22 +0000750
Georg Brandl116aa622007-08-15 14:28:22 +0000751
752Class attributes:
753
Georg Brandl116aa622007-08-15 14:28:22 +0000754.. attribute:: datetime.min
755
756 The earliest representable :class:`datetime`, ``datetime(MINYEAR, 1, 1,
757 tzinfo=None)``.
758
759
760.. attribute:: datetime.max
761
762 The latest representable :class:`datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
763 59, 999999, tzinfo=None)``.
764
765
766.. attribute:: datetime.resolution
767
768 The smallest possible difference between non-equal :class:`datetime` objects,
769 ``timedelta(microseconds=1)``.
770
Georg Brandl116aa622007-08-15 14:28:22 +0000771
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000772Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +0000773
774.. attribute:: datetime.year
775
776 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
777
778
779.. attribute:: datetime.month
780
781 Between 1 and 12 inclusive.
782
783
784.. attribute:: datetime.day
785
786 Between 1 and the number of days in the given month of the given year.
787
788
789.. attribute:: datetime.hour
790
791 In ``range(24)``.
792
793
794.. attribute:: datetime.minute
795
796 In ``range(60)``.
797
798
799.. attribute:: datetime.second
800
801 In ``range(60)``.
802
803
804.. attribute:: datetime.microsecond
805
806 In ``range(1000000)``.
807
808
809.. attribute:: datetime.tzinfo
810
811 The object passed as the *tzinfo* argument to the :class:`datetime` constructor,
812 or ``None`` if none was passed.
813
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +0000814
Georg Brandl116aa622007-08-15 14:28:22 +0000815Supported operations:
816
817+---------------------------------------+-------------------------------+
818| Operation | Result |
819+=======================================+===============================+
820| ``datetime2 = datetime1 + timedelta`` | \(1) |
821+---------------------------------------+-------------------------------+
822| ``datetime2 = datetime1 - timedelta`` | \(2) |
823+---------------------------------------+-------------------------------+
824| ``timedelta = datetime1 - datetime2`` | \(3) |
825+---------------------------------------+-------------------------------+
826| ``datetime1 < datetime2`` | Compares :class:`datetime` to |
827| | :class:`datetime`. (4) |
828+---------------------------------------+-------------------------------+
829
830(1)
831 datetime2 is a duration of timedelta removed from datetime1, moving forward in
832 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
833 result has the same :attr:`tzinfo` member as the input datetime, and datetime2 -
834 datetime1 == timedelta after. :exc:`OverflowError` is raised if datetime2.year
835 would be smaller than :const:`MINYEAR` or larger than :const:`MAXYEAR`. Note
836 that no time zone adjustments are done even if the input is an aware object.
837
838(2)
839 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
840 addition, the result has the same :attr:`tzinfo` member as the input datetime,
841 and no time zone adjustments are done even if the input is aware. This isn't
842 quite equivalent to datetime1 + (-timedelta), because -timedelta in isolation
843 can overflow in cases where datetime1 - timedelta does not.
844
845(3)
846 Subtraction of a :class:`datetime` from a :class:`datetime` is defined only if
847 both operands are naive, or if both are aware. If one is aware and the other is
848 naive, :exc:`TypeError` is raised.
849
850 If both are naive, or both are aware and have the same :attr:`tzinfo` member,
851 the :attr:`tzinfo` members are ignored, and the result is a :class:`timedelta`
852 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
853 are done in this case.
854
855 If both are aware and have different :attr:`tzinfo` members, ``a-b`` acts as if
856 *a* and *b* were first converted to naive UTC datetimes first. The result is
857 ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None) -
858 b.utcoffset())`` except that the implementation never overflows.
859
860(4)
861 *datetime1* is considered less than *datetime2* when *datetime1* precedes
862 *datetime2* in time.
863
864 If one comparand is naive and the other is aware, :exc:`TypeError` is raised.
865 If both comparands are aware, and have the same :attr:`tzinfo` member, the
866 common :attr:`tzinfo` member is ignored and the base datetimes are compared. If
867 both comparands are aware and have different :attr:`tzinfo` members, the
868 comparands are first adjusted by subtracting their UTC offsets (obtained from
869 ``self.utcoffset()``).
870
871 .. note::
872
873 In order to stop comparison from falling back to the default scheme of comparing
874 object addresses, datetime comparison normally raises :exc:`TypeError` if the
875 other comparand isn't also a :class:`datetime` object. However,
876 ``NotImplemented`` is returned instead if the other comparand has a
877 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
878 chance at implementing mixed-type comparison. If not, when a :class:`datetime`
879 object is compared to an object of a different type, :exc:`TypeError` is raised
880 unless the comparison is ``==`` or ``!=``. The latter cases return
881 :const:`False` or :const:`True`, respectively.
882
883:class:`datetime` objects can be used as dictionary keys. In Boolean contexts,
884all :class:`datetime` objects are considered to be true.
885
886Instance methods:
887
Georg Brandl116aa622007-08-15 14:28:22 +0000888.. method:: datetime.date()
889
890 Return :class:`date` object with same year, month and day.
891
892
893.. method:: datetime.time()
894
895 Return :class:`time` object with same hour, minute, second and microsecond.
896 :attr:`tzinfo` is ``None``. See also method :meth:`timetz`.
897
898
899.. method:: datetime.timetz()
900
901 Return :class:`time` object with same hour, minute, second, microsecond, and
902 tzinfo members. See also method :meth:`time`.
903
904
905.. method:: datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
906
907 Return a datetime with the same members, except for those members given new
908 values by whichever keyword arguments are specified. Note that ``tzinfo=None``
909 can be specified to create a naive datetime from an aware datetime with no
910 conversion of date and time members.
911
912
913.. method:: datetime.astimezone(tz)
914
915 Return a :class:`datetime` object with new :attr:`tzinfo` member *tz*, adjusting
916 the date and time members so the result is the same UTC time as *self*, but in
917 *tz*'s local time.
918
919 *tz* must be an instance of a :class:`tzinfo` subclass, and its
920 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. *self* must
921 be aware (``self.tzinfo`` must not be ``None``, and ``self.utcoffset()`` must
922 not return ``None``).
923
924 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
925 adjustment of date or time members is performed. Else the result is local time
926 in time zone *tz*, representing the same UTC time as *self*: after ``astz =
927 dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will usually have the same date
928 and time members as ``dt - dt.utcoffset()``. The discussion of class
929 :class:`tzinfo` explains the cases at Daylight Saving Time transition boundaries
930 where this cannot be achieved (an issue only if *tz* models both standard and
931 daylight time).
932
933 If you merely want to attach a time zone object *tz* to a datetime *dt* without
934 adjustment of date and time members, use ``dt.replace(tzinfo=tz)``. If you
935 merely want to remove the time zone object from an aware datetime *dt* without
936 conversion of date and time members, use ``dt.replace(tzinfo=None)``.
937
938 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
939 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
940 Ignoring error cases, :meth:`astimezone` acts like::
941
942 def astimezone(self, tz):
943 if self.tzinfo is tz:
944 return self
945 # Convert self to UTC, and attach the new time zone object.
946 utc = (self - self.utcoffset()).replace(tzinfo=tz)
947 # Convert from UTC to tz's local time.
948 return tz.fromutc(utc)
949
950
951.. method:: datetime.utcoffset()
952
953 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
954 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
955 return ``None``, or a :class:`timedelta` object representing a whole number of
956 minutes with magnitude less than one day.
957
958
959.. method:: datetime.dst()
960
961 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
962 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
963 ``None``, or a :class:`timedelta` object representing a whole number of minutes
964 with magnitude less than one day.
965
966
967.. method:: datetime.tzname()
968
969 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
970 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
971 ``None`` or a string object,
972
973
974.. method:: datetime.timetuple()
975
976 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
977 ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day,
Alexander Belopolsky64912482010-06-08 18:59:20 +0000978 d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday =
979 d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within
980 the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag
981 of the result is set according to the :meth:`dst` method: :attr:`tzinfo` is
Georg Brandl682d7e02010-10-06 10:26:05 +0000982 ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``;
Alexander Belopolsky64912482010-06-08 18:59:20 +0000983 else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``;
Alexander Belopolskyda62f2f2010-06-09 17:11:01 +0000984 else :attr:`tm_isdst` is set to ``0``.
Georg Brandl116aa622007-08-15 14:28:22 +0000985
986
987.. method:: datetime.utctimetuple()
988
989 If :class:`datetime` instance *d* is naive, this is the same as
990 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
991 ``d.dst()`` returns. DST is never in effect for a UTC time.
992
993 If *d* is aware, *d* is normalized to UTC time, by subtracting
Alexander Belopolsky75f94c22010-06-21 15:21:14 +0000994 ``d.utcoffset()``, and a :class:`time.struct_time` for the
995 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note
996 that an :exc:`OverflowError` may be raised if *d*.year was
997 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
Georg Brandl116aa622007-08-15 14:28:22 +0000998 boundary.
999
1000
1001.. method:: datetime.toordinal()
1002
1003 Return the proleptic Gregorian ordinal of the date. The same as
1004 ``self.date().toordinal()``.
1005
1006
1007.. method:: datetime.weekday()
1008
1009 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
1010 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
1011
1012
1013.. method:: datetime.isoweekday()
1014
1015 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
1016 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
1017 :meth:`isocalendar`.
1018
1019
1020.. method:: datetime.isocalendar()
1021
1022 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
1023 ``self.date().isocalendar()``.
1024
1025
Georg Brandlc2a4f4f2009-04-10 09:03:43 +00001026.. method:: datetime.isoformat(sep='T')
Georg Brandl116aa622007-08-15 14:28:22 +00001027
1028 Return a string representing the date and time in ISO 8601 format,
1029 YYYY-MM-DDTHH:MM:SS.mmmmmm or, if :attr:`microsecond` is 0,
1030 YYYY-MM-DDTHH:MM:SS
1031
1032 If :meth:`utcoffset` does not return ``None``, a 6-character string is
1033 appended, giving the UTC offset in (signed) hours and minutes:
1034 YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM or, if :attr:`microsecond` is 0
1035 YYYY-MM-DDTHH:MM:SS+HH:MM
1036
1037 The optional argument *sep* (default ``'T'``) is a one-character separator,
Christian Heimesfe337bf2008-03-23 21:54:12 +00001038 placed between the date and time portions of the result. For example,
Georg Brandl116aa622007-08-15 14:28:22 +00001039
1040 >>> from datetime import tzinfo, timedelta, datetime
1041 >>> class TZ(tzinfo):
1042 ... def utcoffset(self, dt): return timedelta(minutes=-399)
1043 ...
1044 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1045 '2002-12-25 00:00:00-06:39'
1046
1047
1048.. method:: datetime.__str__()
1049
1050 For a :class:`datetime` instance *d*, ``str(d)`` is equivalent to
1051 ``d.isoformat(' ')``.
1052
1053
1054.. method:: datetime.ctime()
1055
1056 Return a string representing the date and time, for example ``datetime(2002, 12,
1057 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:40 2002'``. ``d.ctime()`` is
1058 equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the
Georg Brandl60203b42010-10-06 10:11:56 +00001059 native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl116aa622007-08-15 14:28:22 +00001060 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
1061
1062
1063.. method:: datetime.strftime(format)
1064
1065 Return a string representing the date and time, controlled by an explicit format
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001066 string. See section :ref:`strftime-strptime-behavior`.
1067
Georg Brandl116aa622007-08-15 14:28:22 +00001068
Christian Heimesfe337bf2008-03-23 21:54:12 +00001069Examples of working with datetime objects:
1070
1071.. doctest::
1072
Christian Heimes895627f2007-12-08 17:28:33 +00001073 >>> from datetime import datetime, date, time
1074 >>> # Using datetime.combine()
1075 >>> d = date(2005, 7, 14)
1076 >>> t = time(12, 30)
1077 >>> datetime.combine(d, t)
1078 datetime.datetime(2005, 7, 14, 12, 30)
1079 >>> # Using datetime.now() or datetime.utcnow()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001080 >>> datetime.now() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001081 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Christian Heimesfe337bf2008-03-23 21:54:12 +00001082 >>> datetime.utcnow() # doctest: +SKIP
Christian Heimes895627f2007-12-08 17:28:33 +00001083 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
1084 >>> # Using datetime.strptime()
1085 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1086 >>> dt
1087 datetime.datetime(2006, 11, 21, 16, 30)
1088 >>> # Using datetime.timetuple() to get tuple of all attributes
1089 >>> tt = dt.timetuple()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001090 >>> for it in tt: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001091 ... print(it)
Georg Brandl48310cd2009-01-03 21:18:54 +00001092 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001093 2006 # year
1094 11 # month
1095 21 # day
1096 16 # hour
1097 30 # minute
1098 0 # second
1099 1 # weekday (0 = Monday)
1100 325 # number of days since 1st January
1101 -1 # dst - method tzinfo.dst() returned None
1102 >>> # Date in ISO format
1103 >>> ic = dt.isocalendar()
Christian Heimesfe337bf2008-03-23 21:54:12 +00001104 >>> for it in ic: # doctest: +SKIP
Neal Norwitz752abd02008-05-13 04:55:24 +00001105 ... print(it)
Christian Heimes895627f2007-12-08 17:28:33 +00001106 ...
1107 2006 # ISO year
1108 47 # ISO week
1109 2 # ISO weekday
1110 >>> # Formatting datetime
1111 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1112 'Tuesday, 21. November 2006 04:30PM'
1113
Christian Heimesfe337bf2008-03-23 21:54:12 +00001114Using datetime with tzinfo:
Christian Heimes895627f2007-12-08 17:28:33 +00001115
1116 >>> from datetime import timedelta, datetime, tzinfo
1117 >>> class GMT1(tzinfo):
1118 ... def __init__(self): # DST starts last Sunday in March
1119 ... d = datetime(dt.year, 4, 1) # ends last Sunday in October
1120 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001121 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001122 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
1123 ... def utcoffset(self, dt):
1124 ... return timedelta(hours=1) + self.dst(dt)
Georg Brandl48310cd2009-01-03 21:18:54 +00001125 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001126 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1127 ... return timedelta(hours=1)
1128 ... else:
1129 ... return timedelta(0)
1130 ... def tzname(self,dt):
1131 ... return "GMT +1"
Georg Brandl48310cd2009-01-03 21:18:54 +00001132 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001133 >>> class GMT2(tzinfo):
1134 ... def __init__(self):
Georg Brandl48310cd2009-01-03 21:18:54 +00001135 ... d = datetime(dt.year, 4, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001136 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandl48310cd2009-01-03 21:18:54 +00001137 ... d = datetime(dt.year, 11, 1)
Christian Heimes895627f2007-12-08 17:28:33 +00001138 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
1139 ... def utcoffset(self, dt):
1140 ... return timedelta(hours=1) + self.dst(dt)
1141 ... def dst(self, dt):
1142 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1143 ... return timedelta(hours=2)
1144 ... else:
1145 ... return timedelta(0)
1146 ... def tzname(self,dt):
1147 ... return "GMT +2"
Georg Brandl48310cd2009-01-03 21:18:54 +00001148 ...
Christian Heimes895627f2007-12-08 17:28:33 +00001149 >>> gmt1 = GMT1()
1150 >>> # Daylight Saving Time
1151 >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
1152 >>> dt1.dst()
1153 datetime.timedelta(0)
1154 >>> dt1.utcoffset()
1155 datetime.timedelta(0, 3600)
1156 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
1157 >>> dt2.dst()
1158 datetime.timedelta(0, 3600)
1159 >>> dt2.utcoffset()
1160 datetime.timedelta(0, 7200)
1161 >>> # Convert datetime to another time zone
1162 >>> dt3 = dt2.astimezone(GMT2())
1163 >>> dt3 # doctest: +ELLIPSIS
1164 datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
1165 >>> dt2 # doctest: +ELLIPSIS
1166 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
1167 >>> dt2.utctimetuple() == dt3.utctimetuple()
1168 True
Georg Brandl48310cd2009-01-03 21:18:54 +00001169
Christian Heimes895627f2007-12-08 17:28:33 +00001170
Georg Brandl116aa622007-08-15 14:28:22 +00001171
1172.. _datetime-time:
1173
1174:class:`time` Objects
1175---------------------
1176
1177A time object represents a (local) time of day, independent of any particular
1178day, and subject to adjustment via a :class:`tzinfo` object.
1179
Georg Brandlc2a4f4f2009-04-10 09:03:43 +00001180.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Georg Brandl116aa622007-08-15 14:28:22 +00001181
1182 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
Georg Brandl5c106642007-11-29 17:41:05 +00001183 :class:`tzinfo` subclass. The remaining arguments may be integers, in the
Georg Brandl116aa622007-08-15 14:28:22 +00001184 following ranges:
1185
1186 * ``0 <= hour < 24``
1187 * ``0 <= minute < 60``
1188 * ``0 <= second < 60``
1189 * ``0 <= microsecond < 1000000``.
1190
1191 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
1192 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1193
1194Class attributes:
1195
1196
1197.. attribute:: time.min
1198
1199 The earliest representable :class:`time`, ``time(0, 0, 0, 0)``.
1200
1201
1202.. attribute:: time.max
1203
1204 The latest representable :class:`time`, ``time(23, 59, 59, 999999)``.
1205
1206
1207.. attribute:: time.resolution
1208
1209 The smallest possible difference between non-equal :class:`time` objects,
1210 ``timedelta(microseconds=1)``, although note that arithmetic on :class:`time`
1211 objects is not supported.
1212
Georg Brandl116aa622007-08-15 14:28:22 +00001213
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001214Instance attributes (read-only):
Georg Brandl116aa622007-08-15 14:28:22 +00001215
1216.. attribute:: time.hour
1217
1218 In ``range(24)``.
1219
1220
1221.. attribute:: time.minute
1222
1223 In ``range(60)``.
1224
1225
1226.. attribute:: time.second
1227
1228 In ``range(60)``.
1229
1230
1231.. attribute:: time.microsecond
1232
1233 In ``range(1000000)``.
1234
1235
1236.. attribute:: time.tzinfo
1237
1238 The object passed as the tzinfo argument to the :class:`time` constructor, or
1239 ``None`` if none was passed.
1240
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001241
Georg Brandl116aa622007-08-15 14:28:22 +00001242Supported operations:
1243
1244* comparison of :class:`time` to :class:`time`, where *a* is considered less
1245 than *b* when *a* precedes *b* in time. If one comparand is naive and the other
1246 is aware, :exc:`TypeError` is raised. If both comparands are aware, and have
1247 the same :attr:`tzinfo` member, the common :attr:`tzinfo` member is ignored and
1248 the base times are compared. If both comparands are aware and have different
1249 :attr:`tzinfo` members, the comparands are first adjusted by subtracting their
1250 UTC offsets (obtained from ``self.utcoffset()``). In order to stop mixed-type
1251 comparisons from falling back to the default comparison by object address, when
1252 a :class:`time` object is compared to an object of a different type,
1253 :exc:`TypeError` is raised unless the comparison is ``==`` or ``!=``. The
1254 latter cases return :const:`False` or :const:`True`, respectively.
1255
1256* hash, use as dict key
1257
1258* efficient pickling
1259
1260* in Boolean contexts, a :class:`time` object is considered to be true if and
1261 only if, after converting it to minutes and subtracting :meth:`utcoffset` (or
1262 ``0`` if that's ``None``), the result is non-zero.
1263
Georg Brandl116aa622007-08-15 14:28:22 +00001264
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001265Instance methods:
Georg Brandl116aa622007-08-15 14:28:22 +00001266
1267.. method:: time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
1268
1269 Return a :class:`time` with the same value, except for those members given new
1270 values by whichever keyword arguments are specified. Note that ``tzinfo=None``
1271 can be specified to create a naive :class:`time` from an aware :class:`time`,
1272 without conversion of the time members.
1273
1274
1275.. method:: time.isoformat()
1276
1277 Return a string representing the time in ISO 8601 format, HH:MM:SS.mmmmmm or, if
1278 self.microsecond is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a
1279 6-character string is appended, giving the UTC offset in (signed) hours and
1280 minutes: HH:MM:SS.mmmmmm+HH:MM or, if self.microsecond is 0, HH:MM:SS+HH:MM
1281
1282
1283.. method:: time.__str__()
1284
1285 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1286
1287
1288.. method:: time.strftime(format)
1289
1290 Return a string representing the time, controlled by an explicit format string.
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001291 See section :ref:`strftime-strptime-behavior`.
Georg Brandl116aa622007-08-15 14:28:22 +00001292
1293
1294.. method:: time.utcoffset()
1295
1296 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1297 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
1298 return ``None`` or a :class:`timedelta` object representing a whole number of
1299 minutes with magnitude less than one day.
1300
1301
1302.. method:: time.dst()
1303
1304 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1305 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
1306 ``None``, or a :class:`timedelta` object representing a whole number of minutes
1307 with magnitude less than one day.
1308
1309
1310.. method:: time.tzname()
1311
1312 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1313 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1314 return ``None`` or a string object.
1315
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001316
Christian Heimesfe337bf2008-03-23 21:54:12 +00001317Example:
Georg Brandl48310cd2009-01-03 21:18:54 +00001318
Christian Heimes895627f2007-12-08 17:28:33 +00001319 >>> from datetime import time, tzinfo
1320 >>> class GMT1(tzinfo):
1321 ... def utcoffset(self, dt):
Georg Brandl48310cd2009-01-03 21:18:54 +00001322 ... return timedelta(hours=1)
1323 ... def dst(self, dt):
Christian Heimes895627f2007-12-08 17:28:33 +00001324 ... return timedelta(0)
1325 ... def tzname(self,dt):
1326 ... return "Europe/Prague"
1327 ...
1328 >>> t = time(12, 10, 30, tzinfo=GMT1())
1329 >>> t # doctest: +ELLIPSIS
1330 datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>)
1331 >>> gmt = GMT1()
1332 >>> t.isoformat()
1333 '12:10:30+01:00'
1334 >>> t.dst()
1335 datetime.timedelta(0)
1336 >>> t.tzname()
1337 'Europe/Prague'
1338 >>> t.strftime("%H:%M:%S %Z")
1339 '12:10:30 Europe/Prague'
1340
Georg Brandl116aa622007-08-15 14:28:22 +00001341
1342.. _datetime-tzinfo:
1343
1344:class:`tzinfo` Objects
1345-----------------------
1346
Brett Cannone1327f72009-01-29 04:10:21 +00001347:class:`tzinfo` is an abstract base class, meaning that this class should not be
Georg Brandl116aa622007-08-15 14:28:22 +00001348instantiated directly. You need to derive a concrete subclass, and (at least)
1349supply implementations of the standard :class:`tzinfo` methods needed by the
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001350:class:`datetime` methods you use. The :mod:`datetime` module supplies
1351a simple concrete subclass of :class:`tzinfo` :class:`timezone` which can reprsent
1352timezones with fixed offset from UTC such as UTC itself or North American EST and
1353EDT.
Georg Brandl116aa622007-08-15 14:28:22 +00001354
1355An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1356constructors for :class:`datetime` and :class:`time` objects. The latter objects
1357view their members as being in local time, and the :class:`tzinfo` object
1358supports methods revealing offset of local time from UTC, the name of the time
1359zone, and DST offset, all relative to a date or time object passed to them.
1360
1361Special requirement for pickling: A :class:`tzinfo` subclass must have an
1362:meth:`__init__` method that can be called with no arguments, else it can be
1363pickled but possibly not unpickled again. This is a technical requirement that
1364may be relaxed in the future.
1365
1366A concrete subclass of :class:`tzinfo` may need to implement the following
1367methods. Exactly which methods are needed depends on the uses made of aware
1368:mod:`datetime` objects. If in doubt, simply implement all of them.
1369
1370
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001371.. method:: tzinfo.utcoffset(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001372
1373 Return offset of local time from UTC, in minutes east of UTC. If local time is
1374 west of UTC, this should be negative. Note that this is intended to be the
1375 total offset from UTC; for example, if a :class:`tzinfo` object represents both
1376 time zone and DST adjustments, :meth:`utcoffset` should return their sum. If
1377 the UTC offset isn't known, return ``None``. Else the value returned must be a
1378 :class:`timedelta` object specifying a whole number of minutes in the range
1379 -1439 to 1439 inclusive (1440 = 24\*60; the magnitude of the offset must be less
1380 than one day). Most implementations of :meth:`utcoffset` will probably look
1381 like one of these two::
1382
1383 return CONSTANT # fixed-offset class
1384 return CONSTANT + self.dst(dt) # daylight-aware class
1385
1386 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1387 ``None`` either.
1388
1389 The default implementation of :meth:`utcoffset` raises
1390 :exc:`NotImplementedError`.
1391
1392
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001393.. method:: tzinfo.dst(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001394
1395 Return the daylight saving time (DST) adjustment, in minutes east of UTC, or
1396 ``None`` if DST information isn't known. Return ``timedelta(0)`` if DST is not
1397 in effect. If DST is in effect, return the offset as a :class:`timedelta` object
1398 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1399 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1400 no need to consult :meth:`dst` unless you're interested in obtaining DST info
1401 separately. For example, :meth:`datetime.timetuple` calls its :attr:`tzinfo`
1402 member's :meth:`dst` method to determine how the :attr:`tm_isdst` flag should be
1403 set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for DST changes
1404 when crossing time zones.
1405
1406 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1407 daylight times must be consistent in this sense:
1408
1409 ``tz.utcoffset(dt) - tz.dst(dt)``
1410
1411 must return the same result for every :class:`datetime` *dt* with ``dt.tzinfo ==
1412 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1413 zone's "standard offset", which should not depend on the date or the time, but
1414 only on geographic location. The implementation of :meth:`datetime.astimezone`
1415 relies on this, but cannot detect violations; it's the programmer's
1416 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
1417 this, it may be able to override the default implementation of
1418 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
1419
1420 Most implementations of :meth:`dst` will probably look like one of these two::
1421
1422 def dst(self):
1423 # a fixed-offset class: doesn't account for DST
1424 return timedelta(0)
1425
1426 or ::
1427
1428 def dst(self):
1429 # Code to set dston and dstoff to the time zone's DST
1430 # transition times based on the input dt.year, and expressed
1431 # in standard local time. Then
1432
1433 if dston <= dt.replace(tzinfo=None) < dstoff:
1434 return timedelta(hours=1)
1435 else:
1436 return timedelta(0)
1437
1438 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
1439
1440
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001441.. method:: tzinfo.tzname(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001442
1443 Return the time zone name corresponding to the :class:`datetime` object *dt*, as
1444 a string. Nothing about string names is defined by the :mod:`datetime` module,
1445 and there's no requirement that it mean anything in particular. For example,
1446 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
1447 valid replies. Return ``None`` if a string name isn't known. Note that this is
1448 a method rather than a fixed string primarily because some :class:`tzinfo`
1449 subclasses will wish to return different names depending on the specific value
1450 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
1451 daylight time.
1452
1453 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
1454
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001455
Georg Brandl116aa622007-08-15 14:28:22 +00001456These methods are called by a :class:`datetime` or :class:`time` object, in
1457response to their methods of the same names. A :class:`datetime` object passes
1458itself as the argument, and a :class:`time` object passes ``None`` as the
1459argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
1460accept a *dt* argument of ``None``, or of class :class:`datetime`.
1461
1462When ``None`` is passed, it's up to the class designer to decide the best
1463response. For example, returning ``None`` is appropriate if the class wishes to
1464say that time objects don't participate in the :class:`tzinfo` protocols. It
1465may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
1466there is no other convention for discovering the standard offset.
1467
1468When a :class:`datetime` object is passed in response to a :class:`datetime`
1469method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
1470rely on this, unless user code calls :class:`tzinfo` methods directly. The
1471intent is that the :class:`tzinfo` methods interpret *dt* as being in local
1472time, and not need worry about objects in other timezones.
1473
1474There is one more :class:`tzinfo` method that a subclass may wish to override:
1475
1476
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001477.. method:: tzinfo.fromutc(dt)
Georg Brandl116aa622007-08-15 14:28:22 +00001478
1479 This is called from the default :class:`datetime.astimezone()` implementation.
1480 When called from that, ``dt.tzinfo`` is *self*, and *dt*'s date and time members
1481 are to be viewed as expressing a UTC time. The purpose of :meth:`fromutc` is to
1482 adjust the date and time members, returning an equivalent datetime in *self*'s
1483 local time.
1484
1485 Most :class:`tzinfo` subclasses should be able to inherit the default
1486 :meth:`fromutc` implementation without problems. It's strong enough to handle
1487 fixed-offset time zones, and time zones accounting for both standard and
1488 daylight time, and the latter even if the DST transition times differ in
1489 different years. An example of a time zone the default :meth:`fromutc`
1490 implementation may not handle correctly in all cases is one where the standard
1491 offset (from UTC) depends on the specific date and time passed, which can happen
1492 for political reasons. The default implementations of :meth:`astimezone` and
1493 :meth:`fromutc` may not produce the result you want if the result is one of the
1494 hours straddling the moment the standard offset changes.
1495
1496 Skipping code for error cases, the default :meth:`fromutc` implementation acts
1497 like::
1498
1499 def fromutc(self, dt):
1500 # raise ValueError error if dt.tzinfo is not self
1501 dtoff = dt.utcoffset()
1502 dtdst = dt.dst()
1503 # raise ValueError if dtoff is None or dtdst is None
1504 delta = dtoff - dtdst # this is self's standard offset
1505 if delta:
1506 dt += delta # convert to standard local time
1507 dtdst = dt.dst()
1508 # raise ValueError if dtdst is None
1509 if dtdst:
1510 return dt + dtdst
1511 else:
1512 return dt
1513
1514Example :class:`tzinfo` classes:
1515
1516.. literalinclude:: ../includes/tzinfo-examples.py
1517
1518
1519Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
1520subclass accounting for both standard and daylight time, at the DST transition
1521points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandl7bc6e4f2010-03-21 10:03:36 +00001522minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
15231:59 (EDT) on the first Sunday in November::
Georg Brandl116aa622007-08-15 14:28:22 +00001524
1525 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
1526 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
1527 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
1528
1529 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
1530
1531 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
1532
1533When DST starts (the "start" line), the local wall clock leaps from 1:59 to
15343:00. A wall time of the form 2:MM doesn't really make sense on that day, so
1535``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
1536begins. In order for :meth:`astimezone` to make this guarantee, the
1537:meth:`rzinfo.dst` method must consider times in the "missing hour" (2:MM for
1538Eastern) to be in daylight time.
1539
1540When DST ends (the "end" line), there's a potentially worse problem: there's an
1541hour that can't be spelled unambiguously in local wall time: the last hour of
1542daylight time. In Eastern, that's times of the form 5:MM UTC on the day
1543daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
1544to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
1545:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
1546hours into the same local hour then. In the Eastern example, UTC times of the
1547form 5:MM and 6:MM both map to 1:MM when converted to Eastern. In order for
1548:meth:`astimezone` to make this guarantee, the :meth:`tzinfo.dst` method must
1549consider times in the "repeated hour" to be in standard time. This is easily
1550arranged, as in the example, by expressing DST switch times in the time zone's
1551standard local time.
1552
1553Applications that can't bear such ambiguities should avoid using hybrid
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001554:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`,
1555or any other fixed-offset :class:`tzinfo` subclass (such as a class representing
1556only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
1557
1558
1559.. _datetime-timezone:
1560
1561:class:`timezone` Objects
1562--------------------------
1563
1564A :class:`timezone` object represents a timezone that is defined by a
1565fixed offset from UTC. Note that objects of this class cannot be used
1566to represent timezone information in the locations where different
1567offsets are used in different days of the year or where historical
1568changes have been made to civil time.
1569
1570
1571.. class:: timezone(offset[, name])
1572
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001573 The *offset* argument must be specified as a :class:`timedelta`
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001574 object representing the difference between the local time and UTC. It must
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001575 be strictly between ``-timedelta(hours=24)`` and
1576 ``timedelta(hours=24)`` and represent a whole number of minutes,
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001577 otherwise :exc:`ValueError` is raised.
1578
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001579 The *name* argument is optional. If specified it must be a string that
1580 is used as the value returned by the ``tzname(dt)`` method. Otherwise,
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001581 ``tzname(dt)`` returns a string 'UTCsHH:MM', where s is the sign of
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001582 *offset*, HH and MM are two digits of ``offset.hours`` and
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001583 ``offset.minutes`` respectively.
1584
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001585.. method:: timezone.utcoffset(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001586
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001587 Return the fixed value specified when the :class:`timezone` instance is
1588 constructed. The *dt* argument is ignored. The return value is a
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001589 :class:`timedelta` instance equal to the difference between the
1590 local time and UTC.
1591
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001592.. method:: timezone.tzname(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001593
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001594 Return the fixed value specified when the :class:`timezone` instance is
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001595 constructed or a string 'UTCsHH:MM', where s is the sign of
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001596 *offset*, HH and MM are two digits of ``offset.hours`` and
1597 ``offset.minutes`` respectively.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001598
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001599.. method:: timezone.dst(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001600
1601 Always returns ``None``.
1602
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001603.. method:: timezone.fromutc(dt)
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001604
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001605 Return ``dt + offset``. The *dt* argument must be an aware
1606 :class:`datetime` instance, with ``tzinfo`` set to ``self``.
Alexander Belopolsky4e749a12010-06-14 14:15:50 +00001607
1608Class attributes:
1609
1610.. attribute:: timezone.utc
1611
Alexander Belopolskyb39a0c22010-06-15 19:24:52 +00001612 The UTC timezone, ``timezone(timedelta(0))``.
Georg Brandl48310cd2009-01-03 21:18:54 +00001613
Georg Brandl116aa622007-08-15 14:28:22 +00001614
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001615.. _strftime-strptime-behavior:
Georg Brandl116aa622007-08-15 14:28:22 +00001616
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001617:meth:`strftime` and :meth:`strptime` Behavior
1618----------------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +00001619
1620:class:`date`, :class:`datetime`, and :class:`time` objects all support a
1621``strftime(format)`` method, to create a string representing the time under the
1622control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
1623acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
1624although not all objects support a :meth:`timetuple` method.
1625
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001626Conversely, the :meth:`datetime.strptime` class method creates a
1627:class:`datetime` object from a string representing a date and time and a
1628corresponding format string. ``datetime.strptime(date_string, format)`` is
1629equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``.
1630
Georg Brandl116aa622007-08-15 14:28:22 +00001631For :class:`time` objects, the format codes for year, month, and day should not
1632be used, as time objects have no such values. If they're used anyway, ``1900``
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001633is substituted for the year, and ``1`` for the month and day.
Georg Brandl116aa622007-08-15 14:28:22 +00001634
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001635For :class:`date` objects, the format codes for hours, minutes, seconds, and
1636microseconds should not be used, as :class:`date` objects have no such
1637values. If they're used anyway, ``0`` is substituted for them.
1638
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001639For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
1640strings.
1641
1642For an aware object:
1643
1644``%z``
1645 :meth:`utcoffset` is transformed into a 5-character string of the form +HHMM or
1646 -HHMM, where HH is a 2-digit string giving the number of UTC offset hours, and
1647 MM is a 2-digit string giving the number of UTC offset minutes. For example, if
1648 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
1649 replaced with the string ``'-0330'``.
1650
1651``%Z``
1652 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty string.
1653 Otherwise ``%Z`` is replaced by the returned value, which must be a string.
Georg Brandl116aa622007-08-15 14:28:22 +00001654
Georg Brandl116aa622007-08-15 14:28:22 +00001655The full set of format codes supported varies across platforms, because Python
1656calls the platform C library's :func:`strftime` function, and platform
Georg Brandl48310cd2009-01-03 21:18:54 +00001657variations are common.
Christian Heimes895627f2007-12-08 17:28:33 +00001658
1659The following is a list of all the format codes that the C standard (1989
1660version) requires, and these work on all platforms with a standard C
1661implementation. Note that the 1999 version of the C standard added additional
1662format codes.
Georg Brandl116aa622007-08-15 14:28:22 +00001663
1664The exact range of years for which :meth:`strftime` works also varies across
1665platforms. Regardless of platform, years before 1900 cannot be used.
1666
Christian Heimes895627f2007-12-08 17:28:33 +00001667+-----------+--------------------------------+-------+
1668| Directive | Meaning | Notes |
1669+===========+================================+=======+
1670| ``%a`` | Locale's abbreviated weekday | |
1671| | name. | |
1672+-----------+--------------------------------+-------+
1673| ``%A`` | Locale's full weekday name. | |
1674+-----------+--------------------------------+-------+
1675| ``%b`` | Locale's abbreviated month | |
1676| | name. | |
1677+-----------+--------------------------------+-------+
1678| ``%B`` | Locale's full month name. | |
1679+-----------+--------------------------------+-------+
1680| ``%c`` | Locale's appropriate date and | |
1681| | time representation. | |
1682+-----------+--------------------------------+-------+
1683| ``%d`` | Day of the month as a decimal | |
1684| | number [01,31]. | |
1685+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001686| ``%f`` | Microsecond as a decimal | \(1) |
1687| | number [0,999999], zero-padded | |
1688| | on the left | |
1689+-----------+--------------------------------+-------+
Christian Heimes895627f2007-12-08 17:28:33 +00001690| ``%H`` | Hour (24-hour clock) as a | |
1691| | decimal number [00,23]. | |
1692+-----------+--------------------------------+-------+
1693| ``%I`` | Hour (12-hour clock) as a | |
1694| | decimal number [01,12]. | |
1695+-----------+--------------------------------+-------+
1696| ``%j`` | Day of the year as a decimal | |
1697| | number [001,366]. | |
1698+-----------+--------------------------------+-------+
1699| ``%m`` | Month as a decimal number | |
1700| | [01,12]. | |
1701+-----------+--------------------------------+-------+
1702| ``%M`` | Minute as a decimal number | |
1703| | [00,59]. | |
1704+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001705| ``%p`` | Locale's equivalent of either | \(2) |
Christian Heimes895627f2007-12-08 17:28:33 +00001706| | AM or PM. | |
1707+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001708| ``%S`` | Second as a decimal number | \(3) |
Christian Heimes895627f2007-12-08 17:28:33 +00001709| | [00,61]. | |
1710+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001711| ``%U`` | Week number of the year | \(4) |
Christian Heimes895627f2007-12-08 17:28:33 +00001712| | (Sunday as the first day of | |
1713| | the week) as a decimal number | |
1714| | [00,53]. All days in a new | |
1715| | year preceding the first | |
1716| | Sunday are considered to be in | |
1717| | week 0. | |
1718+-----------+--------------------------------+-------+
1719| ``%w`` | Weekday as a decimal number | |
1720| | [0(Sunday),6]. | |
1721+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001722| ``%W`` | Week number of the year | \(4) |
Christian Heimes895627f2007-12-08 17:28:33 +00001723| | (Monday as the first day of | |
1724| | the week) as a decimal number | |
1725| | [00,53]. All days in a new | |
1726| | year preceding the first | |
1727| | Monday are considered to be in | |
1728| | week 0. | |
1729+-----------+--------------------------------+-------+
1730| ``%x`` | Locale's appropriate date | |
1731| | representation. | |
1732+-----------+--------------------------------+-------+
1733| ``%X`` | Locale's appropriate time | |
1734| | representation. | |
1735+-----------+--------------------------------+-------+
1736| ``%y`` | Year without century as a | |
1737| | decimal number [00,99]. | |
1738+-----------+--------------------------------+-------+
1739| ``%Y`` | Year with century as a decimal | |
1740| | number. | |
1741+-----------+--------------------------------+-------+
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001742| ``%z`` | UTC offset in the form +HHMM | \(5) |
Christian Heimes895627f2007-12-08 17:28:33 +00001743| | or -HHMM (empty string if the | |
1744| | the object is naive). | |
1745+-----------+--------------------------------+-------+
1746| ``%Z`` | Time zone name (empty string | |
1747| | if the object is naive). | |
1748+-----------+--------------------------------+-------+
1749| ``%%`` | A literal ``'%'`` character. | |
1750+-----------+--------------------------------+-------+
Georg Brandl116aa622007-08-15 14:28:22 +00001751
Christian Heimes895627f2007-12-08 17:28:33 +00001752Notes:
1753
1754(1)
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001755 When used with the :meth:`strptime` method, the ``%f`` directive
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001756 accepts from one to six digits and zero pads on the right. ``%f`` is
Benjamin Petersonb58dda72009-01-18 22:27:04 +00001757 an extension to the set of format characters in the C standard (but
1758 implemented separately in datetime objects, and therefore always
1759 available).
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001760
1761(2)
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001762 When used with the :meth:`strptime` method, the ``%p`` directive only affects
Christian Heimes895627f2007-12-08 17:28:33 +00001763 the output hour field if the ``%I`` directive is used to parse the hour.
1764
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001765(3)
R. David Murraybd25d332009-04-02 04:50:03 +00001766 The range really is ``0`` to ``61``; according to the Posix standard this
1767 accounts for leap seconds and the (very rare) double leap seconds.
1768 The :mod:`time` module may produce and does accept leap seconds since
1769 it is based on the Posix standard, but the :mod:`datetime` module
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001770 does not accept leap seconds in :meth:`strptime` input nor will it
R. David Murraybd25d332009-04-02 04:50:03 +00001771 produce them in :func:`strftime` output.
Christian Heimes895627f2007-12-08 17:28:33 +00001772
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001773(4)
Benjamin Peterson5e55b3e2010-02-03 02:35:45 +00001774 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used in
Christian Heimes895627f2007-12-08 17:28:33 +00001775 calculations when the day of the week and the year are specified.
1776
Christian Heimesdd15f6c2008-03-16 00:07:10 +00001777(5)
Christian Heimes895627f2007-12-08 17:28:33 +00001778 For example, if :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``,
1779 ``%z`` is replaced with the string ``'-0330'``.
Alexander Belopolskyca94f552010-06-17 18:30:34 +00001780
Georg Brandl67b21b72010-08-17 15:07:14 +00001781.. versionchanged:: 3.2
1782 When the ``%z`` directive is provided to the :meth:`strptime` method, an
1783 aware :class:`datetime` object will be produced. The ``tzinfo`` of the
1784 result will be set to a :class:`timezone` instance.