blob: 8be8974a41fa4854713738a802fd9e9c89040e6b [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +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
Georg Brandlb19be572007-12-29 10:57:00 +000010.. XXX what order should the types be discussed in?
Georg Brandl8ec7f652007-08-15 14:28:01 +000011
12.. versionadded:: 2.3
13
14The :mod:`datetime` module supplies classes for manipulating dates and times in
15both simple and complex ways. While date and time arithmetic is supported, the
Senthil Kumaran6f18b982011-07-04 12:50:02 -070016focus of the implementation is on efficient attribute extraction for output
Georg Brandl8ec7f652007-08-15 14:28:01 +000017formatting and manipulation. For related
18functionality, see also the :mod:`time` and :mod:`calendar` modules.
19
20There are two kinds of date and time objects: "naive" and "aware". This
21distinction refers to whether the object has any notion of time zone, daylight
22saving time, or other kind of algorithmic or political time adjustment. Whether
Sandro Tosi8d38fcf2012-02-18 20:28:35 +010023a naive :class:`.datetime` object represents Coordinated Universal Time (UTC),
Georg Brandl8ec7f652007-08-15 14:28:01 +000024local time, or time in some other timezone is purely up to the program, just
25like it's up to the program whether a particular number represents metres,
Sandro Tosi8d38fcf2012-02-18 20:28:35 +010026miles, or mass. Naive :class:`.datetime` objects are easy to understand and to
Georg Brandl8ec7f652007-08-15 14:28:01 +000027work with, at the cost of ignoring some aspects of reality.
28
Sandro Tosi8d38fcf2012-02-18 20:28:35 +010029For applications requiring more, :class:`.datetime` and :class:`.time` objects
Senthil Kumaran4c9721a2011-07-17 19:10:10 +080030have an optional time zone information attribute, :attr:`tzinfo`, that can be
31set to an instance of a subclass of the abstract :class:`tzinfo` class. These
Georg Brandl8ec7f652007-08-15 14:28:01 +000032:class:`tzinfo` objects capture information about the offset from UTC time, the
33time zone name, and whether Daylight Saving Time is in effect. Note that no
34concrete :class:`tzinfo` classes are supplied by the :mod:`datetime` module.
35Supporting timezones at whatever level of detail is required is up to the
36application. The rules for time adjustment across the world are more political
37than rational, and there is no standard suitable for every application.
38
39The :mod:`datetime` module exports the following constants:
40
Georg Brandl8ec7f652007-08-15 14:28:01 +000041.. data:: MINYEAR
42
Sandro Tosi8d38fcf2012-02-18 20:28:35 +010043 The smallest year number allowed in a :class:`date` or :class:`.datetime` object.
Georg Brandl8ec7f652007-08-15 14:28:01 +000044 :const:`MINYEAR` is ``1``.
45
46
47.. data:: MAXYEAR
48
Sandro Tosi8d38fcf2012-02-18 20:28:35 +010049 The largest year number allowed in a :class:`date` or :class:`.datetime` object.
Georg Brandl8ec7f652007-08-15 14:28:01 +000050 :const:`MAXYEAR` is ``9999``.
51
52
53.. seealso::
54
55 Module :mod:`calendar`
56 General calendar related functions.
57
58 Module :mod:`time`
59 Time access and conversions.
60
61
62Available Types
63---------------
64
Georg Brandl8ec7f652007-08-15 14:28:01 +000065.. class:: date
Georg Brandl592c58d2009-09-19 10:42:34 +000066 :noindex:
Georg Brandl8ec7f652007-08-15 14:28:01 +000067
68 An idealized naive date, assuming the current Gregorian calendar always was, and
69 always will be, in effect. Attributes: :attr:`year`, :attr:`month`, and
70 :attr:`day`.
71
72
73.. class:: time
Georg Brandl592c58d2009-09-19 10:42:34 +000074 :noindex:
Georg Brandl8ec7f652007-08-15 14:28:01 +000075
76 An idealized time, independent of any particular day, assuming that every day
77 has exactly 24\*60\*60 seconds (there is no notion of "leap seconds" here).
78 Attributes: :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
79 and :attr:`tzinfo`.
80
81
82.. class:: datetime
Georg Brandl592c58d2009-09-19 10:42:34 +000083 :noindex:
Georg Brandl8ec7f652007-08-15 14:28:01 +000084
85 A combination of a date and a time. Attributes: :attr:`year`, :attr:`month`,
86 :attr:`day`, :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`,
87 and :attr:`tzinfo`.
88
89
90.. class:: timedelta
Georg Brandl592c58d2009-09-19 10:42:34 +000091 :noindex:
Georg Brandl8ec7f652007-08-15 14:28:01 +000092
Sandro Tosi8d38fcf2012-02-18 20:28:35 +010093 A duration expressing the difference between two :class:`date`, :class:`.time`,
94 or :class:`.datetime` instances to microsecond resolution.
Georg Brandl8ec7f652007-08-15 14:28:01 +000095
96
97.. class:: tzinfo
98
99 An abstract base class for time zone information objects. These are used by the
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100100 :class:`.datetime` and :class:`.time` classes to provide a customizable notion of
Georg Brandl8ec7f652007-08-15 14:28:01 +0000101 time adjustment (for example, to account for time zone and/or daylight saving
102 time).
103
104Objects of these types are immutable.
105
106Objects of the :class:`date` type are always naive.
107
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100108An object *d* of type :class:`.time` or :class:`.datetime` may be naive or aware.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000109*d* is aware if ``d.tzinfo`` is not ``None`` and ``d.tzinfo.utcoffset(d)`` does
110not return ``None``. If ``d.tzinfo`` is ``None``, or if ``d.tzinfo`` is not
111``None`` but ``d.tzinfo.utcoffset(d)`` returns ``None``, *d* is naive.
112
113The distinction between naive and aware doesn't apply to :class:`timedelta`
114objects.
115
116Subclass relationships::
117
118 object
119 timedelta
120 tzinfo
121 time
122 date
123 datetime
124
125
126.. _datetime-timedelta:
127
128:class:`timedelta` Objects
129--------------------------
130
131A :class:`timedelta` object represents a duration, the difference between two
132dates or times.
133
Georg Brandl8ec7f652007-08-15 14:28:01 +0000134.. class:: timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
135
136 All arguments are optional and default to ``0``. Arguments may be ints, longs,
137 or floats, and may be positive or negative.
138
139 Only *days*, *seconds* and *microseconds* are stored internally. Arguments are
140 converted to those units:
141
142 * A millisecond is converted to 1000 microseconds.
143 * A minute is converted to 60 seconds.
144 * An hour is converted to 3600 seconds.
145 * A week is converted to 7 days.
146
147 and days, seconds and microseconds are then normalized so that the
148 representation is unique, with
149
150 * ``0 <= microseconds < 1000000``
151 * ``0 <= seconds < 3600*24`` (the number of seconds in one day)
152 * ``-999999999 <= days <= 999999999``
153
154 If any argument is a float and there are fractional microseconds, the fractional
155 microseconds left over from all arguments are combined and their sum is rounded
156 to the nearest microsecond. If no argument is a float, the conversion and
157 normalization processes are exact (no information is lost).
158
159 If the normalized value of days lies outside the indicated range,
160 :exc:`OverflowError` is raised.
161
162 Note that normalization of negative values may be surprising at first. For
Georg Brandl3f043032008-03-22 21:21:57 +0000163 example,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000164
Georg Brandle40a6a82007-12-08 11:23:13 +0000165 >>> from datetime import timedelta
Georg Brandl8ec7f652007-08-15 14:28:01 +0000166 >>> d = timedelta(microseconds=-1)
167 >>> (d.days, d.seconds, d.microseconds)
168 (-1, 86399, 999999)
169
Georg Brandl8ec7f652007-08-15 14:28:01 +0000170
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000171Class attributes are:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000172
173.. attribute:: timedelta.min
174
175 The most negative :class:`timedelta` object, ``timedelta(-999999999)``.
176
177
178.. attribute:: timedelta.max
179
180 The most positive :class:`timedelta` object, ``timedelta(days=999999999,
181 hours=23, minutes=59, seconds=59, microseconds=999999)``.
182
183
184.. attribute:: timedelta.resolution
185
186 The smallest possible difference between non-equal :class:`timedelta` objects,
187 ``timedelta(microseconds=1)``.
188
189Note that, because of normalization, ``timedelta.max`` > ``-timedelta.min``.
190``-timedelta.max`` is not representable as a :class:`timedelta` object.
191
192Instance attributes (read-only):
193
194+------------------+--------------------------------------------+
195| Attribute | Value |
196+==================+============================================+
197| ``days`` | Between -999999999 and 999999999 inclusive |
198+------------------+--------------------------------------------+
199| ``seconds`` | Between 0 and 86399 inclusive |
200+------------------+--------------------------------------------+
201| ``microseconds`` | Between 0 and 999999 inclusive |
202+------------------+--------------------------------------------+
203
204Supported operations:
205
Georg Brandlb19be572007-12-29 10:57:00 +0000206.. XXX this table is too wide!
Georg Brandl8ec7f652007-08-15 14:28:01 +0000207
208+--------------------------------+-----------------------------------------------+
209| Operation | Result |
210+================================+===============================================+
211| ``t1 = t2 + t3`` | Sum of *t2* and *t3*. Afterwards *t1*-*t2* == |
212| | *t3* and *t1*-*t3* == *t2* are true. (1) |
213+--------------------------------+-----------------------------------------------+
214| ``t1 = t2 - t3`` | Difference of *t2* and *t3*. Afterwards *t1* |
215| | == *t2* - *t3* and *t2* == *t1* + *t3* are |
216| | true. (1) |
217+--------------------------------+-----------------------------------------------+
218| ``t1 = t2 * i or t1 = i * t2`` | Delta multiplied by an integer or long. |
219| | Afterwards *t1* // i == *t2* is true, |
220| | provided ``i != 0``. |
221+--------------------------------+-----------------------------------------------+
222| | In general, *t1* \* i == *t1* \* (i-1) + *t1* |
223| | is true. (1) |
224+--------------------------------+-----------------------------------------------+
225| ``t1 = t2 // i`` | The floor is computed and the remainder (if |
226| | any) is thrown away. (3) |
227+--------------------------------+-----------------------------------------------+
228| ``+t1`` | Returns a :class:`timedelta` object with the |
229| | same value. (2) |
230+--------------------------------+-----------------------------------------------+
231| ``-t1`` | equivalent to :class:`timedelta`\ |
232| | (-*t1.days*, -*t1.seconds*, |
233| | -*t1.microseconds*), and to *t1*\* -1. (1)(4) |
234+--------------------------------+-----------------------------------------------+
Georg Brandl5ffa1462009-10-13 18:10:59 +0000235| ``abs(t)`` | equivalent to +\ *t* when ``t.days >= 0``, and|
Georg Brandl8ec7f652007-08-15 14:28:01 +0000236| | to -*t* when ``t.days < 0``. (2) |
237+--------------------------------+-----------------------------------------------+
Georg Brandlad8ac862010-08-01 19:21:26 +0000238| ``str(t)`` | Returns a string in the form |
239| | ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D |
240| | is negative for negative ``t``. (5) |
241+--------------------------------+-----------------------------------------------+
242| ``repr(t)`` | Returns a string in the form |
243| | ``datetime.timedelta(D[, S[, U]])``, where D |
244| | is negative for negative ``t``. (5) |
245+--------------------------------+-----------------------------------------------+
Georg Brandl8ec7f652007-08-15 14:28:01 +0000246
247Notes:
248
249(1)
250 This is exact, but may overflow.
251
252(2)
253 This is exact, and cannot overflow.
254
255(3)
256 Division by 0 raises :exc:`ZeroDivisionError`.
257
258(4)
259 -*timedelta.max* is not representable as a :class:`timedelta` object.
260
Georg Brandlad8ac862010-08-01 19:21:26 +0000261(5)
262 String representations of :class:`timedelta` objects are normalized
263 similarly to their internal representation. This leads to somewhat
264 unusual results for negative timedeltas. For example:
265
266 >>> timedelta(hours=-5)
267 datetime.timedelta(-1, 68400)
268 >>> print(_)
269 -1 day, 19:00:00
270
Georg Brandl8ec7f652007-08-15 14:28:01 +0000271In addition to the operations listed above :class:`timedelta` objects support
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100272certain additions and subtractions with :class:`date` and :class:`.datetime`
Georg Brandl8ec7f652007-08-15 14:28:01 +0000273objects (see below).
274
275Comparisons of :class:`timedelta` objects are supported with the
276:class:`timedelta` object representing the smaller duration considered to be the
277smaller timedelta. In order to stop mixed-type comparisons from falling back to
278the default comparison by object address, when a :class:`timedelta` object is
279compared to an object of a different type, :exc:`TypeError` is raised unless the
280comparison is ``==`` or ``!=``. The latter cases return :const:`False` or
281:const:`True`, respectively.
282
Georg Brandl7c3e79f2007-11-02 20:06:17 +0000283:class:`timedelta` objects are :term:`hashable` (usable as dictionary keys), support
Georg Brandl8ec7f652007-08-15 14:28:01 +0000284efficient pickling, and in Boolean contexts, a :class:`timedelta` object is
285considered to be true if and only if it isn't equal to ``timedelta(0)``.
286
Antoine Pitroubcfaf802009-11-25 22:59:36 +0000287Instance methods:
288
289.. method:: timedelta.total_seconds()
290
Mark Dickinson7000e9e2010-05-09 09:30:06 +0000291 Return the total number of seconds contained in the duration.
292 Equivalent to ``(td.microseconds + (td.seconds + td.days * 24 *
293 3600) * 10**6) / 10**6`` computed with true division enabled.
294
295 Note that for very large time intervals (greater than 270 years on
296 most platforms) this method will lose microsecond accuracy.
Antoine Pitroubcfaf802009-11-25 22:59:36 +0000297
Antoine Pitroue236c3c2009-11-25 23:03:22 +0000298 .. versionadded:: 2.7
299
Antoine Pitroubcfaf802009-11-25 22:59:36 +0000300
Georg Brandl3f043032008-03-22 21:21:57 +0000301Example usage:
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000302
Georg Brandle40a6a82007-12-08 11:23:13 +0000303 >>> from datetime import timedelta
304 >>> year = timedelta(days=365)
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000305 >>> another_year = timedelta(weeks=40, days=84, hours=23,
Georg Brandle40a6a82007-12-08 11:23:13 +0000306 ... minutes=50, seconds=600) # adds up to 365 days
Antoine Pitroubcfaf802009-11-25 22:59:36 +0000307 >>> year.total_seconds()
308 31536000.0
Georg Brandle40a6a82007-12-08 11:23:13 +0000309 >>> year == another_year
310 True
311 >>> ten_years = 10 * year
312 >>> ten_years, ten_years.days // 365
313 (datetime.timedelta(3650), 10)
314 >>> nine_years = ten_years - year
315 >>> nine_years, nine_years.days // 365
316 (datetime.timedelta(3285), 9)
317 >>> three_years = nine_years // 3;
318 >>> three_years, three_years.days // 365
319 (datetime.timedelta(1095), 3)
320 >>> abs(three_years - ten_years) == 2 * three_years + year
321 True
322
Georg Brandl8ec7f652007-08-15 14:28:01 +0000323
324.. _datetime-date:
325
326:class:`date` Objects
327---------------------
328
329A :class:`date` object represents a date (year, month and day) in an idealized
330calendar, the current Gregorian calendar indefinitely extended in both
331directions. January 1 of year 1 is called day number 1, January 2 of year 1 is
332called day number 2, and so on. This matches the definition of the "proleptic
333Gregorian" calendar in Dershowitz and Reingold's book Calendrical Calculations,
334where it's the base calendar for all computations. See the book for algorithms
335for converting between proleptic Gregorian ordinals and many other calendar
336systems.
337
338
339.. class:: date(year, month, day)
340
341 All arguments are required. Arguments may be ints or longs, in the following
342 ranges:
343
344 * ``MINYEAR <= year <= MAXYEAR``
345 * ``1 <= month <= 12``
346 * ``1 <= day <= number of days in the given month and year``
347
348 If an argument outside those ranges is given, :exc:`ValueError` is raised.
349
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000350
Georg Brandl8ec7f652007-08-15 14:28:01 +0000351Other constructors, all class methods:
352
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000353.. classmethod:: date.today()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000354
355 Return the current local date. This is equivalent to
356 ``date.fromtimestamp(time.time())``.
357
358
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000359.. classmethod:: date.fromtimestamp(timestamp)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000360
361 Return the local date corresponding to the POSIX timestamp, such as is returned
362 by :func:`time.time`. This may raise :exc:`ValueError`, if the timestamp is out
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100363 of the range of values supported by the platform C :c:func:`localtime` function.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000364 It's common for this to be restricted to years from 1970 through 2038. Note
365 that on non-POSIX systems that include leap seconds in their notion of a
366 timestamp, leap seconds are ignored by :meth:`fromtimestamp`.
367
368
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000369.. classmethod:: date.fromordinal(ordinal)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000370
371 Return the date corresponding to the proleptic Gregorian ordinal, where January
372 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 <= ordinal <=
373 date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) ==
374 d``.
375
Georg Brandl8ec7f652007-08-15 14:28:01 +0000376
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000377Class attributes:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000378
379.. attribute:: date.min
380
381 The earliest representable date, ``date(MINYEAR, 1, 1)``.
382
383
384.. attribute:: date.max
385
386 The latest representable date, ``date(MAXYEAR, 12, 31)``.
387
388
389.. attribute:: date.resolution
390
391 The smallest possible difference between non-equal date objects,
392 ``timedelta(days=1)``.
393
Georg Brandl8ec7f652007-08-15 14:28:01 +0000394
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000395Instance attributes (read-only):
Georg Brandl8ec7f652007-08-15 14:28:01 +0000396
397.. attribute:: date.year
398
399 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
400
401
402.. attribute:: date.month
403
404 Between 1 and 12 inclusive.
405
406
407.. attribute:: date.day
408
409 Between 1 and the number of days in the given month of the given year.
410
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000411
Georg Brandl8ec7f652007-08-15 14:28:01 +0000412Supported operations:
413
414+-------------------------------+----------------------------------------------+
415| Operation | Result |
416+===============================+==============================================+
417| ``date2 = date1 + timedelta`` | *date2* is ``timedelta.days`` days removed |
418| | from *date1*. (1) |
419+-------------------------------+----------------------------------------------+
420| ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 + |
421| | timedelta == date1``. (2) |
422+-------------------------------+----------------------------------------------+
423| ``timedelta = date1 - date2`` | \(3) |
424+-------------------------------+----------------------------------------------+
425| ``date1 < date2`` | *date1* is considered less than *date2* when |
426| | *date1* precedes *date2* in time. (4) |
427+-------------------------------+----------------------------------------------+
428
429Notes:
430
431(1)
432 *date2* is moved forward in time if ``timedelta.days > 0``, or backward if
433 ``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``.
434 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
435 :exc:`OverflowError` is raised if ``date2.year`` would be smaller than
436 :const:`MINYEAR` or larger than :const:`MAXYEAR`.
437
438(2)
439 This isn't quite equivalent to date1 + (-timedelta), because -timedelta in
440 isolation can overflow in cases where date1 - timedelta does not.
441 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored.
442
443(3)
444 This is exact, and cannot overflow. timedelta.seconds and
445 timedelta.microseconds are 0, and date2 + timedelta == date1 after.
446
447(4)
448 In other words, ``date1 < date2`` if and only if ``date1.toordinal() <
449 date2.toordinal()``. In order to stop comparison from falling back to the
450 default scheme of comparing object addresses, date comparison normally raises
451 :exc:`TypeError` if the other comparand isn't also a :class:`date` object.
452 However, ``NotImplemented`` is returned instead if the other comparand has a
453 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
454 chance at implementing mixed-type comparison. If not, when a :class:`date`
455 object is compared to an object of a different type, :exc:`TypeError` is raised
456 unless the comparison is ``==`` or ``!=``. The latter cases return
457 :const:`False` or :const:`True`, respectively.
458
459Dates can be used as dictionary keys. In Boolean contexts, all :class:`date`
460objects are considered to be true.
461
462Instance methods:
463
Georg Brandl8ec7f652007-08-15 14:28:01 +0000464.. method:: date.replace(year, month, day)
465
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700466 Return a date with the same value, except for those parameters given new
467 values by whichever keyword arguments are specified. For example, if ``d ==
468 date(2002, 12, 31)``, then ``d.replace(day=26) == date(2002, 12, 26)``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000469
470
471.. method:: date.timetuple()
472
473 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
474 The hours, minutes and seconds are 0, and the DST flag is -1. ``d.timetuple()``
475 is equivalent to ``time.struct_time((d.year, d.month, d.day, 0, 0, 0,
Georg Brandl151973e2010-05-23 21:29:29 +0000476 d.weekday(), yday, -1))``, where ``yday = d.toordinal() - date(d.year, 1,
477 1).toordinal() + 1`` is the day number within the current year starting with
478 ``1`` for January 1st.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000479
480
481.. method:: date.toordinal()
482
483 Return the proleptic Gregorian ordinal of the date, where January 1 of year 1
484 has ordinal 1. For any :class:`date` object *d*,
485 ``date.fromordinal(d.toordinal()) == d``.
486
487
488.. method:: date.weekday()
489
490 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
491 For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also
492 :meth:`isoweekday`.
493
494
495.. method:: date.isoweekday()
496
497 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
498 For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also
499 :meth:`weekday`, :meth:`isocalendar`.
500
501
502.. method:: date.isocalendar()
503
504 Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
505
506 The ISO calendar is a widely used variant of the Gregorian calendar. See
Mark Dickinson5b544322009-11-03 16:26:14 +0000507 http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm for a good
508 explanation.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000509
510 The ISO year consists of 52 or 53 full weeks, and where a week starts on a
511 Monday and ends on a Sunday. The first week of an ISO year is the first
512 (Gregorian) calendar week of a year containing a Thursday. This is called week
513 number 1, and the ISO year of that Thursday is the same as its Gregorian year.
514
515 For example, 2004 begins on a Thursday, so the first week of ISO year 2004
516 begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004, so that
517 ``date(2003, 12, 29).isocalendar() == (2004, 1, 1)`` and ``date(2004, 1,
518 4).isocalendar() == (2004, 1, 7)``.
519
520
521.. method:: date.isoformat()
522
523 Return a string representing the date in ISO 8601 format, 'YYYY-MM-DD'. For
524 example, ``date(2002, 12, 4).isoformat() == '2002-12-04'``.
525
526
527.. method:: date.__str__()
528
529 For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``.
530
531
532.. method:: date.ctime()
533
534 Return a string representing the date, for example ``date(2002, 12,
535 4).ctime() == 'Wed Dec 4 00:00:00 2002'``. ``d.ctime()`` is equivalent to
536 ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the native C
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100537 :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl8ec7f652007-08-15 14:28:01 +0000538 :meth:`date.ctime` does not invoke) conforms to the C standard.
539
540
541.. method:: date.strftime(format)
542
543 Return a string representing the date, controlled by an explicit format string.
544 Format codes referring to hours, minutes or seconds will see 0 values. See
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000545 section :ref:`strftime-strptime-behavior`.
546
Georg Brandl8ec7f652007-08-15 14:28:01 +0000547
Georg Brandle40a6a82007-12-08 11:23:13 +0000548Example of counting days to an event::
549
550 >>> import time
551 >>> from datetime import date
552 >>> today = date.today()
553 >>> today
554 datetime.date(2007, 12, 5)
555 >>> today == date.fromtimestamp(time.time())
556 True
557 >>> my_birthday = date(today.year, 6, 24)
558 >>> if my_birthday < today:
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000559 ... my_birthday = my_birthday.replace(year=today.year + 1)
Georg Brandle40a6a82007-12-08 11:23:13 +0000560 >>> my_birthday
561 datetime.date(2008, 6, 24)
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000562 >>> time_to_birthday = abs(my_birthday - today)
Georg Brandle40a6a82007-12-08 11:23:13 +0000563 >>> time_to_birthday.days
564 202
565
Georg Brandl3f043032008-03-22 21:21:57 +0000566Example of working with :class:`date`:
567
568.. doctest::
Georg Brandle40a6a82007-12-08 11:23:13 +0000569
570 >>> from datetime import date
571 >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
572 >>> d
573 datetime.date(2002, 3, 11)
574 >>> t = d.timetuple()
Georg Brandl3f043032008-03-22 21:21:57 +0000575 >>> for i in t: # doctest: +SKIP
Georg Brandle40a6a82007-12-08 11:23:13 +0000576 ... print i
577 2002 # year
578 3 # month
579 11 # day
580 0
581 0
582 0
583 0 # weekday (0 = Monday)
584 70 # 70th day in the year
585 -1
586 >>> ic = d.isocalendar()
Georg Brandl3f043032008-03-22 21:21:57 +0000587 >>> for i in ic: # doctest: +SKIP
588 ... print i
Georg Brandle40a6a82007-12-08 11:23:13 +0000589 2002 # ISO year
590 11 # ISO week number
591 1 # ISO day number ( 1 = Monday )
592 >>> d.isoformat()
593 '2002-03-11'
594 >>> d.strftime("%d/%m/%y")
595 '11/03/02'
596 >>> d.strftime("%A %d. %B %Y")
597 'Monday 11. March 2002'
598
Georg Brandl8ec7f652007-08-15 14:28:01 +0000599
600.. _datetime-datetime:
601
602:class:`datetime` Objects
603-------------------------
604
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100605A :class:`.datetime` object is a single object containing all the information
606from a :class:`date` object and a :class:`.time` object. Like a :class:`date`
607object, :class:`.datetime` assumes the current Gregorian calendar extended in
608both directions; like a time object, :class:`.datetime` assumes there are exactly
Georg Brandl8ec7f652007-08-15 14:28:01 +00006093600\*24 seconds in every day.
610
611Constructor:
612
Georg Brandl8ec7f652007-08-15 14:28:01 +0000613.. class:: datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])
614
615 The year, month and day arguments are required. *tzinfo* may be ``None``, or an
616 instance of a :class:`tzinfo` subclass. The remaining arguments may be ints or
617 longs, in the following ranges:
618
619 * ``MINYEAR <= year <= MAXYEAR``
620 * ``1 <= month <= 12``
621 * ``1 <= day <= number of days in the given month and year``
622 * ``0 <= hour < 24``
623 * ``0 <= minute < 60``
624 * ``0 <= second < 60``
625 * ``0 <= microsecond < 1000000``
626
627 If an argument outside those ranges is given, :exc:`ValueError` is raised.
628
629Other constructors, all class methods:
630
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000631.. classmethod:: datetime.today()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000632
633 Return the current local datetime, with :attr:`tzinfo` ``None``. This is
634 equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`,
635 :meth:`fromtimestamp`.
636
637
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000638.. classmethod:: datetime.now([tz])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000639
640 Return the current local date and time. If optional argument *tz* is ``None``
641 or not specified, this is like :meth:`today`, but, if possible, supplies more
642 precision than can be gotten from going through a :func:`time.time` timestamp
643 (for example, this may be possible on platforms supplying the C
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100644 :c:func:`gettimeofday` function).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000645
646 Else *tz* must be an instance of a class :class:`tzinfo` subclass, and the
647 current date and time are converted to *tz*'s time zone. In this case the
648 result is equivalent to ``tz.fromutc(datetime.utcnow().replace(tzinfo=tz))``.
649 See also :meth:`today`, :meth:`utcnow`.
650
651
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000652.. classmethod:: datetime.utcnow()
Georg Brandl8ec7f652007-08-15 14:28:01 +0000653
654 Return the current UTC date and time, with :attr:`tzinfo` ``None``. This is like
655 :meth:`now`, but returns the current UTC date and time, as a naive
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100656 :class:`.datetime` object. See also :meth:`now`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000657
658
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000659.. classmethod:: datetime.fromtimestamp(timestamp[, tz])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000660
661 Return the local date and time corresponding to the POSIX timestamp, such as is
662 returned by :func:`time.time`. If optional argument *tz* is ``None`` or not
663 specified, the timestamp is converted to the platform's local date and time, and
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100664 the returned :class:`.datetime` object is naive.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000665
666 Else *tz* must be an instance of a class :class:`tzinfo` subclass, and the
667 timestamp is converted to *tz*'s time zone. In this case the result is
668 equivalent to
669 ``tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))``.
670
671 :meth:`fromtimestamp` may raise :exc:`ValueError`, if the timestamp is out of
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100672 the range of values supported by the platform C :c:func:`localtime` or
673 :c:func:`gmtime` functions. It's common for this to be restricted to years in
Georg Brandl8ec7f652007-08-15 14:28:01 +0000674 1970 through 2038. Note that on non-POSIX systems that include leap seconds in
675 their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`,
676 and then it's possible to have two timestamps differing by a second that yield
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100677 identical :class:`.datetime` objects. See also :meth:`utcfromtimestamp`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000678
679
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000680.. classmethod:: datetime.utcfromtimestamp(timestamp)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000681
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100682 Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with
Georg Brandl8ec7f652007-08-15 14:28:01 +0000683 :attr:`tzinfo` ``None``. This may raise :exc:`ValueError`, if the timestamp is
Sandro Tosi98ed08f2012-01-14 16:42:02 +0100684 out of the range of values supported by the platform C :c:func:`gmtime` function.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000685 It's common for this to be restricted to years in 1970 through 2038. See also
686 :meth:`fromtimestamp`.
687
688
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000689.. classmethod:: datetime.fromordinal(ordinal)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000690
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100691 Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000692 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1
693 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and
694 microsecond of the result are all 0, and :attr:`tzinfo` is ``None``.
695
696
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000697.. classmethod:: datetime.combine(date, time)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000698
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100699 Return a new :class:`.datetime` object whose date components are equal to the
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800700 given :class:`date` object's, and whose time components and :attr:`tzinfo`
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100701 attributes are equal to the given :class:`.time` object's. For any
702 :class:`.datetime` object *d*,
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800703 ``d == datetime.combine(d.date(), d.timetz())``. If date is a
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100704 :class:`.datetime` object, its time components and :attr:`tzinfo` attributes
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800705 are ignored.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000706
707
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000708.. classmethod:: datetime.strptime(date_string, format)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000709
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100710 Return a :class:`.datetime` corresponding to *date_string*, parsed according to
Georg Brandl8ec7f652007-08-15 14:28:01 +0000711 *format*. This is equivalent to ``datetime(*(time.strptime(date_string,
712 format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format
713 can't be parsed by :func:`time.strptime` or if it returns a value which isn't a
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000714 time tuple. See section :ref:`strftime-strptime-behavior`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000715
716 .. versionadded:: 2.5
717
Georg Brandl8ec7f652007-08-15 14:28:01 +0000718
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000719Class attributes:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000720
721.. attribute:: datetime.min
722
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100723 The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000724 tzinfo=None)``.
725
726
727.. attribute:: datetime.max
728
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100729 The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000730 59, 999999, tzinfo=None)``.
731
732
733.. attribute:: datetime.resolution
734
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100735 The smallest possible difference between non-equal :class:`.datetime` objects,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000736 ``timedelta(microseconds=1)``.
737
Georg Brandl8ec7f652007-08-15 14:28:01 +0000738
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000739Instance attributes (read-only):
Georg Brandl8ec7f652007-08-15 14:28:01 +0000740
741.. attribute:: datetime.year
742
743 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive.
744
745
746.. attribute:: datetime.month
747
748 Between 1 and 12 inclusive.
749
750
751.. attribute:: datetime.day
752
753 Between 1 and the number of days in the given month of the given year.
754
755
756.. attribute:: datetime.hour
757
758 In ``range(24)``.
759
760
761.. attribute:: datetime.minute
762
763 In ``range(60)``.
764
765
766.. attribute:: datetime.second
767
768 In ``range(60)``.
769
770
771.. attribute:: datetime.microsecond
772
773 In ``range(1000000)``.
774
775
776.. attribute:: datetime.tzinfo
777
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100778 The object passed as the *tzinfo* argument to the :class:`.datetime` constructor,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000779 or ``None`` if none was passed.
780
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000781
Georg Brandl8ec7f652007-08-15 14:28:01 +0000782Supported operations:
783
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100784+---------------------------------------+--------------------------------+
785| Operation | Result |
786+=======================================+================================+
787| ``datetime2 = datetime1 + timedelta`` | \(1) |
788+---------------------------------------+--------------------------------+
789| ``datetime2 = datetime1 - timedelta`` | \(2) |
790+---------------------------------------+--------------------------------+
791| ``timedelta = datetime1 - datetime2`` | \(3) |
792+---------------------------------------+--------------------------------+
793| ``datetime1 < datetime2`` | Compares :class:`.datetime` to |
794| | :class:`.datetime`. (4) |
795+---------------------------------------+--------------------------------+
Georg Brandl8ec7f652007-08-15 14:28:01 +0000796
797(1)
798 datetime2 is a duration of timedelta removed from datetime1, moving forward in
799 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700800 result has the same :attr:`tzinfo` attribute as the input datetime, and
801 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if
802 datetime2.year would be smaller than :const:`MINYEAR` or larger than
803 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the
804 input is an aware object.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000805
806(2)
807 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700808 addition, the result has the same :attr:`tzinfo` attribute as the input
809 datetime, and no time zone adjustments are done even if the input is aware.
810 This isn't quite equivalent to datetime1 + (-timedelta), because -timedelta
811 in isolation can overflow in cases where datetime1 - timedelta does not.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000812
813(3)
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100814 Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if
Georg Brandl8ec7f652007-08-15 14:28:01 +0000815 both operands are naive, or if both are aware. If one is aware and the other is
816 naive, :exc:`TypeError` is raised.
817
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700818 If both are naive, or both are aware and have the same :attr:`tzinfo` attribute,
819 the :attr:`tzinfo` attributes are ignored, and the result is a :class:`timedelta`
Georg Brandl8ec7f652007-08-15 14:28:01 +0000820 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments
821 are done in this case.
822
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700823 If both are aware and have different :attr:`tzinfo` attributes, ``a-b`` acts
824 as if *a* and *b* were first converted to naive UTC datetimes first. The
825 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
826 - b.utcoffset())`` except that the implementation never overflows.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000827
828(4)
829 *datetime1* is considered less than *datetime2* when *datetime1* precedes
830 *datetime2* in time.
831
832 If one comparand is naive and the other is aware, :exc:`TypeError` is raised.
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700833 If both comparands are aware, and have the same :attr:`tzinfo` attribute, the
834 common :attr:`tzinfo` attribute is ignored and the base datetimes are
835 compared. If both comparands are aware and have different :attr:`tzinfo`
836 attributes, the comparands are first adjusted by subtracting their UTC
837 offsets (obtained from ``self.utcoffset()``).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000838
839 .. note::
840
841 In order to stop comparison from falling back to the default scheme of comparing
842 object addresses, datetime comparison normally raises :exc:`TypeError` if the
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100843 other comparand isn't also a :class:`.datetime` object. However,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000844 ``NotImplemented`` is returned instead if the other comparand has a
845 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100846 chance at implementing mixed-type comparison. If not, when a :class:`.datetime`
Georg Brandl8ec7f652007-08-15 14:28:01 +0000847 object is compared to an object of a different type, :exc:`TypeError` is raised
848 unless the comparison is ``==`` or ``!=``. The latter cases return
849 :const:`False` or :const:`True`, respectively.
850
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100851:class:`.datetime` objects can be used as dictionary keys. In Boolean contexts,
852all :class:`.datetime` objects are considered to be true.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000853
854Instance methods:
855
Georg Brandl8ec7f652007-08-15 14:28:01 +0000856.. method:: datetime.date()
857
858 Return :class:`date` object with same year, month and day.
859
860
861.. method:: datetime.time()
862
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100863 Return :class:`.time` object with same hour, minute, second and microsecond.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000864 :attr:`tzinfo` is ``None``. See also method :meth:`timetz`.
865
866
867.. method:: datetime.timetz()
868
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100869 Return :class:`.time` object with same hour, minute, second, microsecond, and
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700870 tzinfo attributes. See also method :meth:`time`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000871
872
873.. method:: datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
874
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700875 Return a datetime with the same attributes, except for those attributes given
876 new values by whichever keyword arguments are specified. Note that
877 ``tzinfo=None`` can be specified to create a naive datetime from an aware
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800878 datetime with no conversion of date and time data.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000879
880
881.. method:: datetime.astimezone(tz)
882
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100883 Return a :class:`.datetime` object with new :attr:`tzinfo` attribute *tz*,
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800884 adjusting the date and time data so the result is the same UTC time as
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700885 *self*, but in *tz*'s local time.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000886
887 *tz* must be an instance of a :class:`tzinfo` subclass, and its
888 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. *self* must
889 be aware (``self.tzinfo`` must not be ``None``, and ``self.utcoffset()`` must
890 not return ``None``).
891
892 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800893 adjustment of date or time data is performed. Else the result is local
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700894 time in time zone *tz*, representing the same UTC time as *self*: after
895 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will usually have
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800896 the same date and time data as ``dt - dt.utcoffset()``. The discussion
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700897 of class :class:`tzinfo` explains the cases at Daylight Saving Time transition
898 boundaries where this cannot be achieved (an issue only if *tz* models both
899 standard and daylight time).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000900
901 If you merely want to attach a time zone object *tz* to a datetime *dt* without
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800902 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you
Georg Brandl8ec7f652007-08-15 14:28:01 +0000903 merely want to remove the time zone object from an aware datetime *dt* without
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800904 conversion of date and time data, use ``dt.replace(tzinfo=None)``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000905
906 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a
907 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`.
908 Ignoring error cases, :meth:`astimezone` acts like::
909
910 def astimezone(self, tz):
911 if self.tzinfo is tz:
912 return self
913 # Convert self to UTC, and attach the new time zone object.
914 utc = (self - self.utcoffset()).replace(tzinfo=tz)
915 # Convert from UTC to tz's local time.
916 return tz.fromutc(utc)
917
918
919.. method:: datetime.utcoffset()
920
921 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
922 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't
923 return ``None``, or a :class:`timedelta` object representing a whole number of
924 minutes with magnitude less than one day.
925
926
927.. method:: datetime.dst()
928
929 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
930 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return
931 ``None``, or a :class:`timedelta` object representing a whole number of minutes
932 with magnitude less than one day.
933
934
935.. method:: datetime.tzname()
936
937 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
938 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return
939 ``None`` or a string object,
940
941
942.. method:: datetime.timetuple()
943
944 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`.
945 ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day,
Georg Brandl151973e2010-05-23 21:29:29 +0000946 d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday =
947 d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within
948 the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag
949 of the result is set according to the :meth:`dst` method: :attr:`tzinfo` is
Georg Brandl35e7a8f2010-10-06 10:41:31 +0000950 ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``;
Georg Brandl151973e2010-05-23 21:29:29 +0000951 else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``;
Alexander Belopolsky094c53c2010-06-09 17:08:11 +0000952 else :attr:`tm_isdst` is set to ``0``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000953
954
955.. method:: datetime.utctimetuple()
956
Sandro Tosi8d38fcf2012-02-18 20:28:35 +0100957 If :class:`.datetime` instance *d* is naive, this is the same as
Georg Brandl8ec7f652007-08-15 14:28:01 +0000958 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what
959 ``d.dst()`` returns. DST is never in effect for a UTC time.
960
961 If *d* is aware, *d* is normalized to UTC time, by subtracting
962 ``d.utcoffset()``, and a :class:`time.struct_time` for the normalized time is
963 returned. :attr:`tm_isdst` is forced to 0. Note that the result's
964 :attr:`tm_year` member may be :const:`MINYEAR`\ -1 or :const:`MAXYEAR`\ +1, if
965 *d*.year was ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year
966 boundary.
967
968
969.. method:: datetime.toordinal()
970
971 Return the proleptic Gregorian ordinal of the date. The same as
972 ``self.date().toordinal()``.
973
974
975.. method:: datetime.weekday()
976
977 Return the day of the week as an integer, where Monday is 0 and Sunday is 6.
978 The same as ``self.date().weekday()``. See also :meth:`isoweekday`.
979
980
981.. method:: datetime.isoweekday()
982
983 Return the day of the week as an integer, where Monday is 1 and Sunday is 7.
984 The same as ``self.date().isoweekday()``. See also :meth:`weekday`,
985 :meth:`isocalendar`.
986
987
988.. method:: datetime.isocalendar()
989
990 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as
991 ``self.date().isocalendar()``.
992
993
994.. method:: datetime.isoformat([sep])
995
996 Return a string representing the date and time in ISO 8601 format,
997 YYYY-MM-DDTHH:MM:SS.mmmmmm or, if :attr:`microsecond` is 0,
998 YYYY-MM-DDTHH:MM:SS
999
1000 If :meth:`utcoffset` does not return ``None``, a 6-character string is
1001 appended, giving the UTC offset in (signed) hours and minutes:
1002 YYYY-MM-DDTHH:MM:SS.mmmmmm+HH:MM or, if :attr:`microsecond` is 0
1003 YYYY-MM-DDTHH:MM:SS+HH:MM
1004
1005 The optional argument *sep* (default ``'T'``) is a one-character separator,
Georg Brandl3f043032008-03-22 21:21:57 +00001006 placed between the date and time portions of the result. For example,
Georg Brandl8ec7f652007-08-15 14:28:01 +00001007
1008 >>> from datetime import tzinfo, timedelta, datetime
1009 >>> class TZ(tzinfo):
1010 ... def utcoffset(self, dt): return timedelta(minutes=-399)
1011 ...
1012 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
1013 '2002-12-25 00:00:00-06:39'
1014
1015
1016.. method:: datetime.__str__()
1017
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001018 For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to
Georg Brandl8ec7f652007-08-15 14:28:01 +00001019 ``d.isoformat(' ')``.
1020
1021
1022.. method:: datetime.ctime()
1023
1024 Return a string representing the date and time, for example ``datetime(2002, 12,
1025 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:40 2002'``. ``d.ctime()`` is
1026 equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the
Sandro Tosi98ed08f2012-01-14 16:42:02 +01001027 native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which
Georg Brandl8ec7f652007-08-15 14:28:01 +00001028 :meth:`datetime.ctime` does not invoke) conforms to the C standard.
1029
1030
1031.. method:: datetime.strftime(format)
1032
1033 Return a string representing the date and time, controlled by an explicit format
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001034 string. See section :ref:`strftime-strptime-behavior`.
1035
Georg Brandl8ec7f652007-08-15 14:28:01 +00001036
Georg Brandl3f043032008-03-22 21:21:57 +00001037Examples of working with datetime objects:
1038
1039.. doctest::
1040
Georg Brandle40a6a82007-12-08 11:23:13 +00001041 >>> from datetime import datetime, date, time
1042 >>> # Using datetime.combine()
1043 >>> d = date(2005, 7, 14)
1044 >>> t = time(12, 30)
1045 >>> datetime.combine(d, t)
1046 datetime.datetime(2005, 7, 14, 12, 30)
1047 >>> # Using datetime.now() or datetime.utcnow()
Georg Brandl3f043032008-03-22 21:21:57 +00001048 >>> datetime.now() # doctest: +SKIP
Georg Brandle40a6a82007-12-08 11:23:13 +00001049 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
Georg Brandl3f043032008-03-22 21:21:57 +00001050 >>> datetime.utcnow() # doctest: +SKIP
Georg Brandle40a6a82007-12-08 11:23:13 +00001051 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)
1052 >>> # Using datetime.strptime()
1053 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
1054 >>> dt
1055 datetime.datetime(2006, 11, 21, 16, 30)
1056 >>> # Using datetime.timetuple() to get tuple of all attributes
1057 >>> tt = dt.timetuple()
Georg Brandl3f043032008-03-22 21:21:57 +00001058 >>> for it in tt: # doctest: +SKIP
Georg Brandle40a6a82007-12-08 11:23:13 +00001059 ... print it
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001060 ...
Georg Brandle40a6a82007-12-08 11:23:13 +00001061 2006 # year
1062 11 # month
1063 21 # day
1064 16 # hour
1065 30 # minute
1066 0 # second
1067 1 # weekday (0 = Monday)
1068 325 # number of days since 1st January
1069 -1 # dst - method tzinfo.dst() returned None
1070 >>> # Date in ISO format
1071 >>> ic = dt.isocalendar()
Georg Brandl3f043032008-03-22 21:21:57 +00001072 >>> for it in ic: # doctest: +SKIP
Georg Brandle40a6a82007-12-08 11:23:13 +00001073 ... print it
1074 ...
1075 2006 # ISO year
1076 47 # ISO week
1077 2 # ISO weekday
1078 >>> # Formatting datetime
1079 >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
1080 'Tuesday, 21. November 2006 04:30PM'
1081
Georg Brandl3f043032008-03-22 21:21:57 +00001082Using datetime with tzinfo:
Georg Brandle40a6a82007-12-08 11:23:13 +00001083
1084 >>> from datetime import timedelta, datetime, tzinfo
1085 >>> class GMT1(tzinfo):
1086 ... def __init__(self): # DST starts last Sunday in March
1087 ... d = datetime(dt.year, 4, 1) # ends last Sunday in October
1088 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001089 ... d = datetime(dt.year, 11, 1)
Georg Brandle40a6a82007-12-08 11:23:13 +00001090 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
1091 ... def utcoffset(self, dt):
1092 ... return timedelta(hours=1) + self.dst(dt)
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001093 ... def dst(self, dt):
Georg Brandle40a6a82007-12-08 11:23:13 +00001094 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1095 ... return timedelta(hours=1)
1096 ... else:
1097 ... return timedelta(0)
1098 ... def tzname(self,dt):
1099 ... return "GMT +1"
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001100 ...
Georg Brandle40a6a82007-12-08 11:23:13 +00001101 >>> class GMT2(tzinfo):
1102 ... def __init__(self):
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001103 ... d = datetime(dt.year, 4, 1)
Georg Brandle40a6a82007-12-08 11:23:13 +00001104 ... self.dston = d - timedelta(days=d.weekday() + 1)
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001105 ... d = datetime(dt.year, 11, 1)
Georg Brandle40a6a82007-12-08 11:23:13 +00001106 ... self.dstoff = d - timedelta(days=d.weekday() + 1)
1107 ... def utcoffset(self, dt):
1108 ... return timedelta(hours=1) + self.dst(dt)
1109 ... def dst(self, dt):
1110 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
1111 ... return timedelta(hours=2)
1112 ... else:
1113 ... return timedelta(0)
1114 ... def tzname(self,dt):
1115 ... return "GMT +2"
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001116 ...
Georg Brandle40a6a82007-12-08 11:23:13 +00001117 >>> gmt1 = GMT1()
1118 >>> # Daylight Saving Time
1119 >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)
1120 >>> dt1.dst()
1121 datetime.timedelta(0)
1122 >>> dt1.utcoffset()
1123 datetime.timedelta(0, 3600)
1124 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)
1125 >>> dt2.dst()
1126 datetime.timedelta(0, 3600)
1127 >>> dt2.utcoffset()
1128 datetime.timedelta(0, 7200)
1129 >>> # Convert datetime to another time zone
1130 >>> dt3 = dt2.astimezone(GMT2())
1131 >>> dt3 # doctest: +ELLIPSIS
1132 datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)
1133 >>> dt2 # doctest: +ELLIPSIS
1134 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)
1135 >>> dt2.utctimetuple() == dt3.utctimetuple()
1136 True
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001137
Georg Brandle40a6a82007-12-08 11:23:13 +00001138
Georg Brandl8ec7f652007-08-15 14:28:01 +00001139
1140.. _datetime-time:
1141
1142:class:`time` Objects
1143---------------------
1144
1145A time object represents a (local) time of day, independent of any particular
1146day, and subject to adjustment via a :class:`tzinfo` object.
1147
Georg Brandl8ec7f652007-08-15 14:28:01 +00001148.. class:: time(hour[, minute[, second[, microsecond[, tzinfo]]]])
1149
1150 All arguments are optional. *tzinfo* may be ``None``, or an instance of a
1151 :class:`tzinfo` subclass. The remaining arguments may be ints or longs, in the
1152 following ranges:
1153
1154 * ``0 <= hour < 24``
1155 * ``0 <= minute < 60``
1156 * ``0 <= second < 60``
1157 * ``0 <= microsecond < 1000000``.
1158
1159 If an argument outside those ranges is given, :exc:`ValueError` is raised. All
1160 default to ``0`` except *tzinfo*, which defaults to :const:`None`.
1161
1162Class attributes:
1163
1164
1165.. attribute:: time.min
1166
Ezio Melottif17e4052011-10-02 12:22:13 +03001167 The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001168
1169
1170.. attribute:: time.max
1171
Ezio Melottif17e4052011-10-02 12:22:13 +03001172 The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001173
1174
1175.. attribute:: time.resolution
1176
Ezio Melottif17e4052011-10-02 12:22:13 +03001177 The smallest possible difference between non-equal :class:`.time` objects,
1178 ``timedelta(microseconds=1)``, although note that arithmetic on
1179 :class:`.time` objects is not supported.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001180
Georg Brandl8ec7f652007-08-15 14:28:01 +00001181
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001182Instance attributes (read-only):
Georg Brandl8ec7f652007-08-15 14:28:01 +00001183
1184.. attribute:: time.hour
1185
1186 In ``range(24)``.
1187
1188
1189.. attribute:: time.minute
1190
1191 In ``range(60)``.
1192
1193
1194.. attribute:: time.second
1195
1196 In ``range(60)``.
1197
1198
1199.. attribute:: time.microsecond
1200
1201 In ``range(1000000)``.
1202
1203
1204.. attribute:: time.tzinfo
1205
Ezio Melottif17e4052011-10-02 12:22:13 +03001206 The object passed as the tzinfo argument to the :class:`.time` constructor, or
Georg Brandl8ec7f652007-08-15 14:28:01 +00001207 ``None`` if none was passed.
1208
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001209
Georg Brandl8ec7f652007-08-15 14:28:01 +00001210Supported operations:
1211
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001212* comparison of :class:`.time` to :class:`.time`, where *a* is considered less
Georg Brandl8ec7f652007-08-15 14:28:01 +00001213 than *b* when *a* precedes *b* in time. If one comparand is naive and the other
1214 is aware, :exc:`TypeError` is raised. If both comparands are aware, and have
Senthil Kumaran6f18b982011-07-04 12:50:02 -07001215 the same :attr:`tzinfo` attribute, the common :attr:`tzinfo` attribute is
1216 ignored and the base times are compared. If both comparands are aware and
1217 have different :attr:`tzinfo` attributes, the comparands are first adjusted by
1218 subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order
1219 to stop mixed-type comparisons from falling back to the default comparison by
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001220 object address, when a :class:`.time` object is compared to an object of a
Senthil Kumaran6f18b982011-07-04 12:50:02 -07001221 different type, :exc:`TypeError` is raised unless the comparison is ``==`` or
1222 ``!=``. The latter cases return :const:`False` or :const:`True`, respectively.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001223
1224* hash, use as dict key
1225
1226* efficient pickling
1227
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001228* in Boolean contexts, a :class:`.time` object is considered to be true if and
Georg Brandl8ec7f652007-08-15 14:28:01 +00001229 only if, after converting it to minutes and subtracting :meth:`utcoffset` (or
1230 ``0`` if that's ``None``), the result is non-zero.
1231
Georg Brandl8ec7f652007-08-15 14:28:01 +00001232
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001233Instance methods:
Georg Brandl8ec7f652007-08-15 14:28:01 +00001234
1235.. method:: time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
1236
Ezio Melottif17e4052011-10-02 12:22:13 +03001237 Return a :class:`.time` with the same value, except for those attributes given
Senthil Kumaran6f18b982011-07-04 12:50:02 -07001238 new values by whichever keyword arguments are specified. Note that
Ezio Melottif17e4052011-10-02 12:22:13 +03001239 ``tzinfo=None`` can be specified to create a naive :class:`.time` from an
1240 aware :class:`.time`, without conversion of the time data.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001241
1242
1243.. method:: time.isoformat()
1244
1245 Return a string representing the time in ISO 8601 format, HH:MM:SS.mmmmmm or, if
1246 self.microsecond is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a
1247 6-character string is appended, giving the UTC offset in (signed) hours and
1248 minutes: HH:MM:SS.mmmmmm+HH:MM or, if self.microsecond is 0, HH:MM:SS+HH:MM
1249
1250
1251.. method:: time.__str__()
1252
1253 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``.
1254
1255
1256.. method:: time.strftime(format)
1257
1258 Return a string representing the time, controlled by an explicit format string.
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001259 See section :ref:`strftime-strptime-behavior`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001260
1261
1262.. method:: time.utcoffset()
1263
1264 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1265 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't
1266 return ``None`` or a :class:`timedelta` object representing a whole number of
1267 minutes with magnitude less than one day.
1268
1269
1270.. method:: time.dst()
1271
1272 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1273 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return
1274 ``None``, or a :class:`timedelta` object representing a whole number of minutes
1275 with magnitude less than one day.
1276
1277
1278.. method:: time.tzname()
1279
1280 If :attr:`tzinfo` is ``None``, returns ``None``, else returns
1281 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't
1282 return ``None`` or a string object.
1283
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001284
Georg Brandl3f043032008-03-22 21:21:57 +00001285Example:
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001286
Georg Brandle40a6a82007-12-08 11:23:13 +00001287 >>> from datetime import time, tzinfo
1288 >>> class GMT1(tzinfo):
1289 ... def utcoffset(self, dt):
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001290 ... return timedelta(hours=1)
1291 ... def dst(self, dt):
Georg Brandle40a6a82007-12-08 11:23:13 +00001292 ... return timedelta(0)
1293 ... def tzname(self,dt):
1294 ... return "Europe/Prague"
1295 ...
1296 >>> t = time(12, 10, 30, tzinfo=GMT1())
1297 >>> t # doctest: +ELLIPSIS
1298 datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>)
1299 >>> gmt = GMT1()
1300 >>> t.isoformat()
1301 '12:10:30+01:00'
1302 >>> t.dst()
1303 datetime.timedelta(0)
1304 >>> t.tzname()
1305 'Europe/Prague'
1306 >>> t.strftime("%H:%M:%S %Z")
1307 '12:10:30 Europe/Prague'
1308
Georg Brandl8ec7f652007-08-15 14:28:01 +00001309
1310.. _datetime-tzinfo:
1311
1312:class:`tzinfo` Objects
1313-----------------------
1314
Brett Cannon8aa2c6c2009-01-29 00:54:32 +00001315:class:`tzinfo` is an abstract base class, meaning that this class should not be
Georg Brandl8ec7f652007-08-15 14:28:01 +00001316instantiated directly. You need to derive a concrete subclass, and (at least)
1317supply implementations of the standard :class:`tzinfo` methods needed by the
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001318:class:`.datetime` methods you use. The :mod:`datetime` module does not supply
Georg Brandl8ec7f652007-08-15 14:28:01 +00001319any concrete subclasses of :class:`tzinfo`.
1320
1321An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001322constructors for :class:`.datetime` and :class:`.time` objects. The latter objects
Senthil Kumaran6f18b982011-07-04 12:50:02 -07001323view their attributes as being in local time, and the :class:`tzinfo` object
Georg Brandl8ec7f652007-08-15 14:28:01 +00001324supports methods revealing offset of local time from UTC, the name of the time
1325zone, and DST offset, all relative to a date or time object passed to them.
1326
1327Special requirement for pickling: A :class:`tzinfo` subclass must have an
1328:meth:`__init__` method that can be called with no arguments, else it can be
1329pickled but possibly not unpickled again. This is a technical requirement that
1330may be relaxed in the future.
1331
1332A concrete subclass of :class:`tzinfo` may need to implement the following
1333methods. Exactly which methods are needed depends on the uses made of aware
1334:mod:`datetime` objects. If in doubt, simply implement all of them.
1335
1336
1337.. method:: tzinfo.utcoffset(self, dt)
1338
1339 Return offset of local time from UTC, in minutes east of UTC. If local time is
1340 west of UTC, this should be negative. Note that this is intended to be the
1341 total offset from UTC; for example, if a :class:`tzinfo` object represents both
1342 time zone and DST adjustments, :meth:`utcoffset` should return their sum. If
1343 the UTC offset isn't known, return ``None``. Else the value returned must be a
1344 :class:`timedelta` object specifying a whole number of minutes in the range
1345 -1439 to 1439 inclusive (1440 = 24\*60; the magnitude of the offset must be less
1346 than one day). Most implementations of :meth:`utcoffset` will probably look
1347 like one of these two::
1348
1349 return CONSTANT # fixed-offset class
1350 return CONSTANT + self.dst(dt) # daylight-aware class
1351
1352 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return
1353 ``None`` either.
1354
1355 The default implementation of :meth:`utcoffset` raises
1356 :exc:`NotImplementedError`.
1357
1358
1359.. method:: tzinfo.dst(self, dt)
1360
1361 Return the daylight saving time (DST) adjustment, in minutes east of UTC, or
1362 ``None`` if DST information isn't known. Return ``timedelta(0)`` if DST is not
1363 in effect. If DST is in effect, return the offset as a :class:`timedelta` object
1364 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has
1365 already been added to the UTC offset returned by :meth:`utcoffset`, so there's
1366 no need to consult :meth:`dst` unless you're interested in obtaining DST info
1367 separately. For example, :meth:`datetime.timetuple` calls its :attr:`tzinfo`
Senthil Kumaran6f18b982011-07-04 12:50:02 -07001368 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag
1369 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for
1370 DST changes when crossing time zones.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001371
1372 An instance *tz* of a :class:`tzinfo` subclass that models both standard and
1373 daylight times must be consistent in this sense:
1374
1375 ``tz.utcoffset(dt) - tz.dst(dt)``
1376
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001377 must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo ==
Georg Brandl8ec7f652007-08-15 14:28:01 +00001378 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time
1379 zone's "standard offset", which should not depend on the date or the time, but
1380 only on geographic location. The implementation of :meth:`datetime.astimezone`
1381 relies on this, but cannot detect violations; it's the programmer's
1382 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee
1383 this, it may be able to override the default implementation of
1384 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless.
1385
1386 Most implementations of :meth:`dst` will probably look like one of these two::
1387
Sandro Tosi1f3b84f2011-11-01 10:31:26 +01001388 def dst(self, dt):
Georg Brandl8ec7f652007-08-15 14:28:01 +00001389 # a fixed-offset class: doesn't account for DST
1390 return timedelta(0)
1391
1392 or ::
1393
Sandro Tosi1f3b84f2011-11-01 10:31:26 +01001394 def dst(self, dt):
Georg Brandl8ec7f652007-08-15 14:28:01 +00001395 # Code to set dston and dstoff to the time zone's DST
1396 # transition times based on the input dt.year, and expressed
1397 # in standard local time. Then
1398
1399 if dston <= dt.replace(tzinfo=None) < dstoff:
1400 return timedelta(hours=1)
1401 else:
1402 return timedelta(0)
1403
1404 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`.
1405
1406
1407.. method:: tzinfo.tzname(self, dt)
1408
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001409 Return the time zone name corresponding to the :class:`.datetime` object *dt*, as
Georg Brandl8ec7f652007-08-15 14:28:01 +00001410 a string. Nothing about string names is defined by the :mod:`datetime` module,
1411 and there's no requirement that it mean anything in particular. For example,
1412 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all
1413 valid replies. Return ``None`` if a string name isn't known. Note that this is
1414 a method rather than a fixed string primarily because some :class:`tzinfo`
1415 subclasses will wish to return different names depending on the specific value
1416 of *dt* passed, especially if the :class:`tzinfo` class is accounting for
1417 daylight time.
1418
1419 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`.
1420
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001421
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001422These methods are called by a :class:`.datetime` or :class:`.time` object, in
1423response to their methods of the same names. A :class:`.datetime` object passes
1424itself as the argument, and a :class:`.time` object passes ``None`` as the
Georg Brandl8ec7f652007-08-15 14:28:01 +00001425argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001426accept a *dt* argument of ``None``, or of class :class:`.datetime`.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001427
1428When ``None`` is passed, it's up to the class designer to decide the best
1429response. For example, returning ``None`` is appropriate if the class wishes to
1430say that time objects don't participate in the :class:`tzinfo` protocols. It
1431may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as
1432there is no other convention for discovering the standard offset.
1433
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001434When a :class:`.datetime` object is passed in response to a :class:`.datetime`
Georg Brandl8ec7f652007-08-15 14:28:01 +00001435method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can
1436rely on this, unless user code calls :class:`tzinfo` methods directly. The
1437intent is that the :class:`tzinfo` methods interpret *dt* as being in local
1438time, and not need worry about objects in other timezones.
1439
1440There is one more :class:`tzinfo` method that a subclass may wish to override:
1441
1442
1443.. method:: tzinfo.fromutc(self, dt)
1444
Senthil Kumaran4c9721a2011-07-17 19:10:10 +08001445 This is called from the default :class:`datetime.astimezone()`
1446 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s
1447 date and time data are to be viewed as expressing a UTC time. The purpose
1448 of :meth:`fromutc` is to adjust the date and time data, returning an
Senthil Kumaran6f18b982011-07-04 12:50:02 -07001449 equivalent datetime in *self*'s local time.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001450
1451 Most :class:`tzinfo` subclasses should be able to inherit the default
1452 :meth:`fromutc` implementation without problems. It's strong enough to handle
1453 fixed-offset time zones, and time zones accounting for both standard and
1454 daylight time, and the latter even if the DST transition times differ in
1455 different years. An example of a time zone the default :meth:`fromutc`
1456 implementation may not handle correctly in all cases is one where the standard
1457 offset (from UTC) depends on the specific date and time passed, which can happen
1458 for political reasons. The default implementations of :meth:`astimezone` and
1459 :meth:`fromutc` may not produce the result you want if the result is one of the
1460 hours straddling the moment the standard offset changes.
1461
1462 Skipping code for error cases, the default :meth:`fromutc` implementation acts
1463 like::
1464
1465 def fromutc(self, dt):
1466 # raise ValueError error if dt.tzinfo is not self
1467 dtoff = dt.utcoffset()
1468 dtdst = dt.dst()
1469 # raise ValueError if dtoff is None or dtdst is None
1470 delta = dtoff - dtdst # this is self's standard offset
1471 if delta:
1472 dt += delta # convert to standard local time
1473 dtdst = dt.dst()
1474 # raise ValueError if dtdst is None
1475 if dtdst:
1476 return dt + dtdst
1477 else:
1478 return dt
1479
1480Example :class:`tzinfo` classes:
1481
1482.. literalinclude:: ../includes/tzinfo-examples.py
1483
1484
1485Note that there are unavoidable subtleties twice per year in a :class:`tzinfo`
1486subclass accounting for both standard and daylight time, at the DST transition
1487points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the
Georg Brandlce00cf22010-03-21 09:58:36 +00001488minute after 1:59 (EST) on the second Sunday in March, and ends the minute after
14891:59 (EDT) on the first Sunday in November::
Georg Brandl8ec7f652007-08-15 14:28:01 +00001490
1491 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
1492 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
1493 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
1494
1495 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
1496
1497 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
1498
1499When DST starts (the "start" line), the local wall clock leaps from 1:59 to
15003:00. A wall time of the form 2:MM doesn't really make sense on that day, so
1501``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST
1502begins. In order for :meth:`astimezone` to make this guarantee, the
1503:meth:`rzinfo.dst` method must consider times in the "missing hour" (2:MM for
1504Eastern) to be in daylight time.
1505
1506When DST ends (the "end" line), there's a potentially worse problem: there's an
1507hour that can't be spelled unambiguously in local wall time: the last hour of
1508daylight time. In Eastern, that's times of the form 5:MM UTC on the day
1509daylight time ends. The local wall clock leaps from 1:59 (daylight time) back
1510to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous.
1511:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC
1512hours into the same local hour then. In the Eastern example, UTC times of the
1513form 5:MM and 6:MM both map to 1:MM when converted to Eastern. In order for
1514:meth:`astimezone` to make this guarantee, the :meth:`tzinfo.dst` method must
1515consider times in the "repeated hour" to be in standard time. This is easily
1516arranged, as in the example, by expressing DST switch times in the time zone's
1517standard local time.
1518
1519Applications that can't bear such ambiguities should avoid using hybrid
1520:class:`tzinfo` subclasses; there are no ambiguities when using UTC, or any
1521other fixed-offset :class:`tzinfo` subclass (such as a class representing only
1522EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)).
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001523
Sandro Tosi13c598b2012-04-24 19:43:33 +02001524.. seealso::
1525
1526 `pytz <http://pypi.python.org/pypi/pytz/>`_
Sandro Tosiaa31d522012-04-28 11:19:11 +02001527 The standard library has no :class:`tzinfo` instances except for UTC, but
1528 there exists a third-party library which brings the *IANA timezone
1529 database* (also known as the Olson database) to Python: *pytz*.
Sandro Tosi13c598b2012-04-24 19:43:33 +02001530
Sandro Tosiaa31d522012-04-28 11:19:11 +02001531 *pytz* contains up-to-date information and its usage is recommended.
1532
1533 `IANA timezone database <http://www.iana.org/time-zones>`_
1534 The Time Zone Database (often called tz or zoneinfo) contains code and
1535 data that represent the history of local time for many representative
1536 locations around the globe. It is updated periodically to reflect changes
1537 made by political bodies to time zone boundaries, UTC offsets, and
1538 daylight-saving rules.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001539
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001540.. _strftime-strptime-behavior:
Georg Brandl8ec7f652007-08-15 14:28:01 +00001541
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001542:meth:`strftime` and :meth:`strptime` Behavior
1543----------------------------------------------
Georg Brandl8ec7f652007-08-15 14:28:01 +00001544
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001545:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a
Georg Brandl8ec7f652007-08-15 14:28:01 +00001546``strftime(format)`` method, to create a string representing the time under the
1547control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
1548acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
1549although not all objects support a :meth:`timetuple` method.
1550
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001551Conversely, the :meth:`datetime.strptime` class method creates a
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001552:class:`.datetime` object from a string representing a date and time and a
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001553corresponding format string. ``datetime.strptime(date_string, format)`` is
1554equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``.
1555
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001556For :class:`.time` objects, the format codes for year, month, and day should not
Georg Brandl8ec7f652007-08-15 14:28:01 +00001557be used, as time objects have no such values. If they're used anyway, ``1900``
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001558is substituted for the year, and ``1`` for the month and day.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001559
Skip Montanarofc070d22008-03-15 16:04:45 +00001560For :class:`date` objects, the format codes for hours, minutes, seconds, and
1561microseconds should not be used, as :class:`date` objects have no such
1562values. If they're used anyway, ``0`` is substituted for them.
1563
Skip Montanarofc070d22008-03-15 16:04:45 +00001564.. versionadded:: 2.6
Sandro Tosi8d38fcf2012-02-18 20:28:35 +01001565 :class:`.time` and :class:`.datetime` objects support a ``%f`` format code
Georg Brandlaf9a97b2009-01-18 14:41:52 +00001566 which expands to the number of microseconds in the object, zero-padded on
1567 the left to six places.
Skip Montanarofc070d22008-03-15 16:04:45 +00001568
1569For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
1570strings.
1571
1572For an aware object:
1573
1574``%z``
1575 :meth:`utcoffset` is transformed into a 5-character string of the form +HHMM or
1576 -HHMM, where HH is a 2-digit string giving the number of UTC offset hours, and
1577 MM is a 2-digit string giving the number of UTC offset minutes. For example, if
1578 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
1579 replaced with the string ``'-0330'``.
1580
1581``%Z``
1582 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty string.
1583 Otherwise ``%Z`` is replaced by the returned value, which must be a string.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001584
Georg Brandl8ec7f652007-08-15 14:28:01 +00001585The full set of format codes supported varies across platforms, because Python
1586calls the platform C library's :func:`strftime` function, and platform
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001587variations are common.
Georg Brandle40a6a82007-12-08 11:23:13 +00001588
1589The following is a list of all the format codes that the C standard (1989
1590version) requires, and these work on all platforms with a standard C
1591implementation. Note that the 1999 version of the C standard added additional
1592format codes.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001593
1594The exact range of years for which :meth:`strftime` works also varies across
1595platforms. Regardless of platform, years before 1900 cannot be used.
1596
Georg Brandle40a6a82007-12-08 11:23:13 +00001597+-----------+--------------------------------+-------+
1598| Directive | Meaning | Notes |
1599+===========+================================+=======+
1600| ``%a`` | Locale's abbreviated weekday | |
1601| | name. | |
1602+-----------+--------------------------------+-------+
1603| ``%A`` | Locale's full weekday name. | |
1604+-----------+--------------------------------+-------+
1605| ``%b`` | Locale's abbreviated month | |
1606| | name. | |
1607+-----------+--------------------------------+-------+
1608| ``%B`` | Locale's full month name. | |
1609+-----------+--------------------------------+-------+
1610| ``%c`` | Locale's appropriate date and | |
1611| | time representation. | |
1612+-----------+--------------------------------+-------+
1613| ``%d`` | Day of the month as a decimal | |
1614| | number [01,31]. | |
1615+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001616| ``%f`` | Microsecond as a decimal | \(1) |
1617| | number [0,999999], zero-padded | |
1618| | on the left | |
1619+-----------+--------------------------------+-------+
Georg Brandle40a6a82007-12-08 11:23:13 +00001620| ``%H`` | Hour (24-hour clock) as a | |
1621| | decimal number [00,23]. | |
1622+-----------+--------------------------------+-------+
1623| ``%I`` | Hour (12-hour clock) as a | |
1624| | decimal number [01,12]. | |
1625+-----------+--------------------------------+-------+
1626| ``%j`` | Day of the year as a decimal | |
1627| | number [001,366]. | |
1628+-----------+--------------------------------+-------+
1629| ``%m`` | Month as a decimal number | |
1630| | [01,12]. | |
1631+-----------+--------------------------------+-------+
1632| ``%M`` | Minute as a decimal number | |
1633| | [00,59]. | |
1634+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001635| ``%p`` | Locale's equivalent of either | \(2) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001636| | AM or PM. | |
1637+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001638| ``%S`` | Second as a decimal number | \(3) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001639| | [00,61]. | |
1640+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001641| ``%U`` | Week number of the year | \(4) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001642| | (Sunday as the first day of | |
1643| | the week) as a decimal number | |
1644| | [00,53]. All days in a new | |
1645| | year preceding the first | |
1646| | Sunday are considered to be in | |
1647| | week 0. | |
1648+-----------+--------------------------------+-------+
1649| ``%w`` | Weekday as a decimal number | |
1650| | [0(Sunday),6]. | |
1651+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001652| ``%W`` | Week number of the year | \(4) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001653| | (Monday as the first day of | |
1654| | the week) as a decimal number | |
1655| | [00,53]. All days in a new | |
1656| | year preceding the first | |
1657| | Monday are considered to be in | |
1658| | week 0. | |
1659+-----------+--------------------------------+-------+
1660| ``%x`` | Locale's appropriate date | |
1661| | representation. | |
1662+-----------+--------------------------------+-------+
1663| ``%X`` | Locale's appropriate time | |
1664| | representation. | |
1665+-----------+--------------------------------+-------+
1666| ``%y`` | Year without century as a | |
1667| | decimal number [00,99]. | |
1668+-----------+--------------------------------+-------+
1669| ``%Y`` | Year with century as a decimal | |
1670| | number. | |
1671+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001672| ``%z`` | UTC offset in the form +HHMM | \(5) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001673| | or -HHMM (empty string if the | |
1674| | the object is naive). | |
1675+-----------+--------------------------------+-------+
1676| ``%Z`` | Time zone name (empty string | |
1677| | if the object is naive). | |
1678+-----------+--------------------------------+-------+
1679| ``%%`` | A literal ``'%'`` character. | |
1680+-----------+--------------------------------+-------+
Georg Brandl8ec7f652007-08-15 14:28:01 +00001681
Georg Brandle40a6a82007-12-08 11:23:13 +00001682Notes:
1683
1684(1)
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001685 When used with the :meth:`strptime` method, the ``%f`` directive
Skip Montanarofc070d22008-03-15 16:04:45 +00001686 accepts from one to six digits and zero pads on the right. ``%f`` is
Georg Brandlaf9a97b2009-01-18 14:41:52 +00001687 an extension to the set of format characters in the C standard (but
1688 implemented separately in datetime objects, and therefore always
1689 available).
Skip Montanarofc070d22008-03-15 16:04:45 +00001690
1691(2)
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001692 When used with the :meth:`strptime` method, the ``%p`` directive only affects
Georg Brandle40a6a82007-12-08 11:23:13 +00001693 the output hour field if the ``%I`` directive is used to parse the hour.
1694
Skip Montanarofc070d22008-03-15 16:04:45 +00001695(3)
R. David Murrayd56bab42009-04-02 04:34:04 +00001696 The range really is ``0`` to ``61``; according to the Posix standard this
1697 accounts for leap seconds and the (very rare) double leap seconds.
1698 The :mod:`time` module may produce and does accept leap seconds since
1699 it is based on the Posix standard, but the :mod:`datetime` module
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001700 does not accept leap seconds in :meth:`strptime` input nor will it
R. David Murrayd56bab42009-04-02 04:34:04 +00001701 produce them in :func:`strftime` output.
Georg Brandle40a6a82007-12-08 11:23:13 +00001702
Skip Montanarofc070d22008-03-15 16:04:45 +00001703(4)
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001704 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used in
Georg Brandle40a6a82007-12-08 11:23:13 +00001705 calculations when the day of the week and the year are specified.
1706
Skip Montanarofc070d22008-03-15 16:04:45 +00001707(5)
Georg Brandle40a6a82007-12-08 11:23:13 +00001708 For example, if :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``,
1709 ``%z`` is replaced with the string ``'-0330'``.