blob: c94064d0f9e36dfbd8b7af26db38a38aba3a482f [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
23a naive :class:`datetime` object represents Coordinated Universal Time (UTC),
24local 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,
26miles, or mass. Naive :class:`datetime` objects are easy to understand and to
27work with, at the cost of ignoring some aspects of reality.
28
29For 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
43 The smallest year number allowed in a :class:`date` or :class:`datetime` object.
44 :const:`MINYEAR` is ``1``.
45
46
47.. data:: MAXYEAR
48
49 The largest year number allowed in a :class:`date` or :class:`datetime` object.
50 :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
93 A duration expressing the difference between two :class:`date`, :class:`time`,
94 or :class:`datetime` instances to microsecond resolution.
95
96
97.. class:: tzinfo
98
99 An abstract base class for time zone information objects. These are used by the
100 :class:`datetime` and :class:`time` classes to provide a customizable notion of
101 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
108An object *d* of type :class:`time` or :class:`datetime` may be naive or aware.
109*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
272certain additions and subtractions with :class:`date` and :class:`datetime`
273objects (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
605A :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
6093600\*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
656 :class:`datetime` object. See also :meth:`now`.
657
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
664 the returned :class:`datetime` object is naive.
665
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
677 identical :class:`datetime` objects. See also :meth:`utcfromtimestamp`.
678
679
Georg Brandl6cbb7f92010-01-17 08:42:30 +0000680.. classmethod:: datetime.utcfromtimestamp(timestamp)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000681
682 Return the UTC :class:`datetime` corresponding to the POSIX timestamp, with
683 :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
691 Return the :class:`datetime` corresponding to the proleptic Gregorian ordinal,
692 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
Senthil Kumaran4c9721a2011-07-17 19:10:10 +0800699 Return a new :class:`datetime` object whose date components are equal to the
700 given :class:`date` object's, and whose time components and :attr:`tzinfo`
701 attributes are equal to the given :class:`time` object's. For any
702 :class:`datetime` object *d*,
703 ``d == datetime.combine(d.date(), d.timetz())``. If date is a
704 :class:`datetime` object, its time components and :attr:`tzinfo` attributes
705 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
710 Return a :class:`datetime` corresponding to *date_string*, parsed according to
711 *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
723 The earliest representable :class:`datetime`, ``datetime(MINYEAR, 1, 1,
724 tzinfo=None)``.
725
726
727.. attribute:: datetime.max
728
729 The latest representable :class:`datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59,
730 59, 999999, tzinfo=None)``.
731
732
733.. attribute:: datetime.resolution
734
735 The smallest possible difference between non-equal :class:`datetime` objects,
736 ``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
778 The object passed as the *tzinfo* argument to the :class:`datetime` constructor,
779 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
784+---------------------------------------+-------------------------------+
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+---------------------------------------+-------------------------------+
796
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)
814 Subtraction of a :class:`datetime` from a :class:`datetime` is defined only if
815 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
843 other comparand isn't also a :class:`datetime` object. However,
844 ``NotImplemented`` is returned instead if the other comparand has a
845 :meth:`timetuple` attribute. This hook gives other kinds of date objects a
846 chance at implementing mixed-type comparison. If not, when a :class:`datetime`
847 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
851:class:`datetime` objects can be used as dictionary keys. In Boolean contexts,
852all :class:`datetime` objects are considered to be true.
853
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
863 Return :class:`time` object with same hour, minute, second and microsecond.
864 :attr:`tzinfo` is ``None``. See also method :meth:`timetz`.
865
866
867.. method:: datetime.timetz()
868
869 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
Senthil Kumaran6f18b982011-07-04 12:50:02 -0700883 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
957 If :class:`datetime` instance *d* is naive, this is the same as
958 ``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
1018 For a :class:`datetime` instance *d*, ``str(d)`` is equivalent to
1019 ``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
1212* comparison of :class:`time` to :class:`time`, where *a* is considered less
1213 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
1220 object address, when a :class:`time` object is compared to an object of a
1221 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
1228* in Boolean contexts, a :class:`time` object is considered to be true if and
1229 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
1318:class:`datetime` methods you use. The :mod:`datetime` module does not supply
1319any concrete subclasses of :class:`tzinfo`.
1320
1321An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the
1322constructors 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
1377 must return the same result for every :class:`datetime` *dt* with ``dt.tzinfo ==
1378 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
1409 Return the time zone name corresponding to the :class:`datetime` object *dt*, as
1410 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
Georg Brandl8ec7f652007-08-15 14:28:01 +00001422These 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
1425argument. A :class:`tzinfo` subclass's methods should therefore be prepared to
1426accept a *dt* argument of ``None``, or of class :class:`datetime`.
1427
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
1434When a :class:`datetime` object is passed in response to a :class:`datetime`
1435method, ``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
Georg Brandl8ec7f652007-08-15 14:28:01 +00001524
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001525.. _strftime-strptime-behavior:
Georg Brandl8ec7f652007-08-15 14:28:01 +00001526
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001527:meth:`strftime` and :meth:`strptime` Behavior
1528----------------------------------------------
Georg Brandl8ec7f652007-08-15 14:28:01 +00001529
1530:class:`date`, :class:`datetime`, and :class:`time` objects all support a
1531``strftime(format)`` method, to create a string representing the time under the
1532control of an explicit format string. Broadly speaking, ``d.strftime(fmt)``
1533acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())``
1534although not all objects support a :meth:`timetuple` method.
1535
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001536Conversely, the :meth:`datetime.strptime` class method creates a
1537:class:`datetime` object from a string representing a date and time and a
1538corresponding format string. ``datetime.strptime(date_string, format)`` is
1539equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``.
1540
Georg Brandl8ec7f652007-08-15 14:28:01 +00001541For :class:`time` objects, the format codes for year, month, and day should not
1542be used, as time objects have no such values. If they're used anyway, ``1900``
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001543is substituted for the year, and ``1`` for the month and day.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001544
Skip Montanarofc070d22008-03-15 16:04:45 +00001545For :class:`date` objects, the format codes for hours, minutes, seconds, and
1546microseconds should not be used, as :class:`date` objects have no such
1547values. If they're used anyway, ``0`` is substituted for them.
1548
Skip Montanarofc070d22008-03-15 16:04:45 +00001549.. versionadded:: 2.6
Georg Brandlaf9a97b2009-01-18 14:41:52 +00001550 :class:`time` and :class:`datetime` objects support a ``%f`` format code
1551 which expands to the number of microseconds in the object, zero-padded on
1552 the left to six places.
Skip Montanarofc070d22008-03-15 16:04:45 +00001553
1554For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty
1555strings.
1556
1557For an aware object:
1558
1559``%z``
1560 :meth:`utcoffset` is transformed into a 5-character string of the form +HHMM or
1561 -HHMM, where HH is a 2-digit string giving the number of UTC offset hours, and
1562 MM is a 2-digit string giving the number of UTC offset minutes. For example, if
1563 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is
1564 replaced with the string ``'-0330'``.
1565
1566``%Z``
1567 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty string.
1568 Otherwise ``%Z`` is replaced by the returned value, which must be a string.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001569
Georg Brandl8ec7f652007-08-15 14:28:01 +00001570The full set of format codes supported varies across platforms, because Python
1571calls the platform C library's :func:`strftime` function, and platform
Georg Brandlc62ef8b2009-01-03 20:55:06 +00001572variations are common.
Georg Brandle40a6a82007-12-08 11:23:13 +00001573
1574The following is a list of all the format codes that the C standard (1989
1575version) requires, and these work on all platforms with a standard C
1576implementation. Note that the 1999 version of the C standard added additional
1577format codes.
Georg Brandl8ec7f652007-08-15 14:28:01 +00001578
1579The exact range of years for which :meth:`strftime` works also varies across
1580platforms. Regardless of platform, years before 1900 cannot be used.
1581
Georg Brandle40a6a82007-12-08 11:23:13 +00001582+-----------+--------------------------------+-------+
1583| Directive | Meaning | Notes |
1584+===========+================================+=======+
1585| ``%a`` | Locale's abbreviated weekday | |
1586| | name. | |
1587+-----------+--------------------------------+-------+
1588| ``%A`` | Locale's full weekday name. | |
1589+-----------+--------------------------------+-------+
1590| ``%b`` | Locale's abbreviated month | |
1591| | name. | |
1592+-----------+--------------------------------+-------+
1593| ``%B`` | Locale's full month name. | |
1594+-----------+--------------------------------+-------+
1595| ``%c`` | Locale's appropriate date and | |
1596| | time representation. | |
1597+-----------+--------------------------------+-------+
1598| ``%d`` | Day of the month as a decimal | |
1599| | number [01,31]. | |
1600+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001601| ``%f`` | Microsecond as a decimal | \(1) |
1602| | number [0,999999], zero-padded | |
1603| | on the left | |
1604+-----------+--------------------------------+-------+
Georg Brandle40a6a82007-12-08 11:23:13 +00001605| ``%H`` | Hour (24-hour clock) as a | |
1606| | decimal number [00,23]. | |
1607+-----------+--------------------------------+-------+
1608| ``%I`` | Hour (12-hour clock) as a | |
1609| | decimal number [01,12]. | |
1610+-----------+--------------------------------+-------+
1611| ``%j`` | Day of the year as a decimal | |
1612| | number [001,366]. | |
1613+-----------+--------------------------------+-------+
1614| ``%m`` | Month as a decimal number | |
1615| | [01,12]. | |
1616+-----------+--------------------------------+-------+
1617| ``%M`` | Minute as a decimal number | |
1618| | [00,59]. | |
1619+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001620| ``%p`` | Locale's equivalent of either | \(2) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001621| | AM or PM. | |
1622+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001623| ``%S`` | Second as a decimal number | \(3) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001624| | [00,61]. | |
1625+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001626| ``%U`` | Week number of the year | \(4) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001627| | (Sunday as the first day of | |
1628| | the week) as a decimal number | |
1629| | [00,53]. All days in a new | |
1630| | year preceding the first | |
1631| | Sunday are considered to be in | |
1632| | week 0. | |
1633+-----------+--------------------------------+-------+
1634| ``%w`` | Weekday as a decimal number | |
1635| | [0(Sunday),6]. | |
1636+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001637| ``%W`` | Week number of the year | \(4) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001638| | (Monday as the first day of | |
1639| | the week) as a decimal number | |
1640| | [00,53]. All days in a new | |
1641| | year preceding the first | |
1642| | Monday are considered to be in | |
1643| | week 0. | |
1644+-----------+--------------------------------+-------+
1645| ``%x`` | Locale's appropriate date | |
1646| | representation. | |
1647+-----------+--------------------------------+-------+
1648| ``%X`` | Locale's appropriate time | |
1649| | representation. | |
1650+-----------+--------------------------------+-------+
1651| ``%y`` | Year without century as a | |
1652| | decimal number [00,99]. | |
1653+-----------+--------------------------------+-------+
1654| ``%Y`` | Year with century as a decimal | |
1655| | number. | |
1656+-----------+--------------------------------+-------+
Skip Montanarofc070d22008-03-15 16:04:45 +00001657| ``%z`` | UTC offset in the form +HHMM | \(5) |
Georg Brandle40a6a82007-12-08 11:23:13 +00001658| | or -HHMM (empty string if the | |
1659| | the object is naive). | |
1660+-----------+--------------------------------+-------+
1661| ``%Z`` | Time zone name (empty string | |
1662| | if the object is naive). | |
1663+-----------+--------------------------------+-------+
1664| ``%%`` | A literal ``'%'`` character. | |
1665+-----------+--------------------------------+-------+
Georg Brandl8ec7f652007-08-15 14:28:01 +00001666
Georg Brandle40a6a82007-12-08 11:23:13 +00001667Notes:
1668
1669(1)
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001670 When used with the :meth:`strptime` method, the ``%f`` directive
Skip Montanarofc070d22008-03-15 16:04:45 +00001671 accepts from one to six digits and zero pads on the right. ``%f`` is
Georg Brandlaf9a97b2009-01-18 14:41:52 +00001672 an extension to the set of format characters in the C standard (but
1673 implemented separately in datetime objects, and therefore always
1674 available).
Skip Montanarofc070d22008-03-15 16:04:45 +00001675
1676(2)
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001677 When used with the :meth:`strptime` method, the ``%p`` directive only affects
Georg Brandle40a6a82007-12-08 11:23:13 +00001678 the output hour field if the ``%I`` directive is used to parse the hour.
1679
Skip Montanarofc070d22008-03-15 16:04:45 +00001680(3)
R. David Murrayd56bab42009-04-02 04:34:04 +00001681 The range really is ``0`` to ``61``; according to the Posix standard this
1682 accounts for leap seconds and the (very rare) double leap seconds.
1683 The :mod:`time` module may produce and does accept leap seconds since
1684 it is based on the Posix standard, but the :mod:`datetime` module
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001685 does not accept leap seconds in :meth:`strptime` input nor will it
R. David Murrayd56bab42009-04-02 04:34:04 +00001686 produce them in :func:`strftime` output.
Georg Brandle40a6a82007-12-08 11:23:13 +00001687
Skip Montanarofc070d22008-03-15 16:04:45 +00001688(4)
Georg Brandl6cbb7f92010-01-17 08:42:30 +00001689 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used in
Georg Brandle40a6a82007-12-08 11:23:13 +00001690 calculations when the day of the week and the year are specified.
1691
Skip Montanarofc070d22008-03-15 16:04:45 +00001692(5)
Georg Brandle40a6a82007-12-08 11:23:13 +00001693 For example, if :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``,
1694 ``%z`` is replaced with the string ``'-0330'``.