1:mod:`datetime` --- Basic date and time types 2============================================= 3 4.. module:: datetime 5 :synopsis: Basic date and time types. 6 7.. moduleauthor:: Tim Peters <tim@zope.com> 8.. sectionauthor:: Tim Peters <tim@zope.com> 9.. sectionauthor:: A.M. Kuchling <amk@amk.ca> 10 11**Source code:** :source:`Lib/datetime.py` 12 13-------------- 14 15.. XXX what order should the types be discussed in? 16 17The :mod:`datetime` module supplies classes for manipulating dates and times in 18both simple and complex ways. While date and time arithmetic is supported, the 19focus of the implementation is on efficient attribute extraction for output 20formatting and manipulation. For related functionality, see also the 21:mod:`time` and :mod:`calendar` modules. 22 23There are two kinds of date and time objects: "naive" and "aware". 24 25An aware object has sufficient knowledge of applicable algorithmic and 26political time adjustments, such as time zone and daylight saving time 27information, to locate itself relative to other aware objects. An aware object 28is used to represent a specific moment in time that is not open to 29interpretation [#]_. 30 31A naive object does not contain enough information to unambiguously locate 32itself relative to other date/time objects. Whether a naive object represents 33Coordinated Universal Time (UTC), local time, or time in some other timezone is 34purely up to the program, just like it is up to the program whether a 35particular number represents metres, miles, or mass. Naive objects are easy to 36understand and to work with, at the cost of ignoring some aspects of reality. 37 38For applications requiring aware objects, :class:`.datetime` and :class:`.time` 39objects have an optional time zone information attribute, :attr:`!tzinfo`, that 40can be set to an instance of a subclass of the abstract :class:`tzinfo` class. 41These :class:`tzinfo` objects capture information about the offset from UTC 42time, the time zone name, and whether Daylight Saving Time is in effect. Note 43that only one concrete :class:`tzinfo` class, the :class:`timezone` class, is 44supplied by the :mod:`datetime` module. The :class:`timezone` class can 45represent simple timezones with fixed offset from UTC, such as UTC itself or 46North American EST and EDT timezones. Supporting timezones at deeper levels of 47detail is up to the application. The rules for time adjustment across the 48world are more political than rational, change frequently, and there is no 49standard suitable for every application aside from UTC. 50 51The :mod:`datetime` module exports the following constants: 52 53.. data:: MINYEAR 54 55 The smallest year number allowed in a :class:`date` or :class:`.datetime` object. 56 :const:`MINYEAR` is ``1``. 57 58 59.. data:: MAXYEAR 60 61 The largest year number allowed in a :class:`date` or :class:`.datetime` object. 62 :const:`MAXYEAR` is ``9999``. 63 64 65.. seealso:: 66 67 Module :mod:`calendar` 68 General calendar related functions. 69 70 Module :mod:`time` 71 Time access and conversions. 72 73 74Available Types 75--------------- 76 77.. class:: date 78 :noindex: 79 80 An idealized naive date, assuming the current Gregorian calendar always was, and 81 always will be, in effect. Attributes: :attr:`year`, :attr:`month`, and 82 :attr:`day`. 83 84 85.. class:: time 86 :noindex: 87 88 An idealized time, independent of any particular day, assuming that every day 89 has exactly 24\*60\*60 seconds (there is no notion of "leap seconds" here). 90 Attributes: :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`, 91 and :attr:`.tzinfo`. 92 93 94.. class:: datetime 95 :noindex: 96 97 A combination of a date and a time. Attributes: :attr:`year`, :attr:`month`, 98 :attr:`day`, :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`, 99 and :attr:`.tzinfo`. 100 101 102.. class:: timedelta 103 :noindex: 104 105 A duration expressing the difference between two :class:`date`, :class:`.time`, 106 or :class:`.datetime` instances to microsecond resolution. 107 108 109.. class:: tzinfo 110 :noindex: 111 112 An abstract base class for time zone information objects. These are used by the 113 :class:`.datetime` and :class:`.time` classes to provide a customizable notion of 114 time adjustment (for example, to account for time zone and/or daylight saving 115 time). 116 117.. class:: timezone 118 :noindex: 119 120 A class that implements the :class:`tzinfo` abstract base class as a 121 fixed offset from the UTC. 122 123 .. versionadded:: 3.2 124 125 126Objects of these types are immutable. 127 128Objects of the :class:`date` type are always naive. 129 130An object of type :class:`.time` or :class:`.datetime` may be naive or aware. 131A :class:`.datetime` object *d* is aware if ``d.tzinfo`` is not ``None`` and 132``d.tzinfo.utcoffset(d)`` does not return ``None``. If ``d.tzinfo`` is 133``None``, or if ``d.tzinfo`` is not ``None`` but ``d.tzinfo.utcoffset(d)`` 134returns ``None``, *d* is naive. A :class:`.time` object *t* is aware 135if ``t.tzinfo`` is not ``None`` and ``t.tzinfo.utcoffset(None)`` does not return 136``None``. Otherwise, *t* is naive. 137 138The distinction between naive and aware doesn't apply to :class:`timedelta` 139objects. 140 141Subclass relationships:: 142 143 object 144 timedelta 145 tzinfo 146 timezone 147 time 148 date 149 datetime 150 151 152.. _datetime-timedelta: 153 154:class:`timedelta` Objects 155-------------------------- 156 157A :class:`timedelta` object represents a duration, the difference between two 158dates or times. 159 160.. class:: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 161 162 All arguments are optional and default to ``0``. Arguments may be integers 163 or floats, and may be positive or negative. 164 165 Only *days*, *seconds* and *microseconds* are stored internally. Arguments are 166 converted to those units: 167 168 * A millisecond is converted to 1000 microseconds. 169 * A minute is converted to 60 seconds. 170 * An hour is converted to 3600 seconds. 171 * A week is converted to 7 days. 172 173 and days, seconds and microseconds are then normalized so that the 174 representation is unique, with 175 176 * ``0 <= microseconds < 1000000`` 177 * ``0 <= seconds < 3600*24`` (the number of seconds in one day) 178 * ``-999999999 <= days <= 999999999`` 179 180 If any argument is a float and there are fractional microseconds, 181 the fractional microseconds left over from all arguments are 182 combined and their sum is rounded to the nearest microsecond using 183 round-half-to-even tiebreaker. If no argument is a float, the 184 conversion and normalization processes are exact (no information is 185 lost). 186 187 If the normalized value of days lies outside the indicated range, 188 :exc:`OverflowError` is raised. 189 190 Note that normalization of negative values may be surprising at first. For 191 example, 192 193 >>> from datetime import timedelta 194 >>> d = timedelta(microseconds=-1) 195 >>> (d.days, d.seconds, d.microseconds) 196 (-1, 86399, 999999) 197 198 199Class attributes are: 200 201.. attribute:: timedelta.min 202 203 The most negative :class:`timedelta` object, ``timedelta(-999999999)``. 204 205 206.. attribute:: timedelta.max 207 208 The most positive :class:`timedelta` object, ``timedelta(days=999999999, 209 hours=23, minutes=59, seconds=59, microseconds=999999)``. 210 211 212.. attribute:: timedelta.resolution 213 214 The smallest possible difference between non-equal :class:`timedelta` objects, 215 ``timedelta(microseconds=1)``. 216 217Note that, because of normalization, ``timedelta.max`` > ``-timedelta.min``. 218``-timedelta.max`` is not representable as a :class:`timedelta` object. 219 220Instance attributes (read-only): 221 222+------------------+--------------------------------------------+ 223| Attribute | Value | 224+==================+============================================+ 225| ``days`` | Between -999999999 and 999999999 inclusive | 226+------------------+--------------------------------------------+ 227| ``seconds`` | Between 0 and 86399 inclusive | 228+------------------+--------------------------------------------+ 229| ``microseconds`` | Between 0 and 999999 inclusive | 230+------------------+--------------------------------------------+ 231 232Supported operations: 233 234.. XXX this table is too wide! 235 236+--------------------------------+-----------------------------------------------+ 237| Operation | Result | 238+================================+===============================================+ 239| ``t1 = t2 + t3`` | Sum of *t2* and *t3*. Afterwards *t1*-*t2* == | 240| | *t3* and *t1*-*t3* == *t2* are true. (1) | 241+--------------------------------+-----------------------------------------------+ 242| ``t1 = t2 - t3`` | Difference of *t2* and *t3*. Afterwards *t1* | 243| | == *t2* - *t3* and *t2* == *t1* + *t3* are | 244| | true. (1)(6) | 245+--------------------------------+-----------------------------------------------+ 246| ``t1 = t2 * i or t1 = i * t2`` | Delta multiplied by an integer. | 247| | Afterwards *t1* // i == *t2* is true, | 248| | provided ``i != 0``. | 249+--------------------------------+-----------------------------------------------+ 250| | In general, *t1* \* i == *t1* \* (i-1) + *t1* | 251| | is true. (1) | 252+--------------------------------+-----------------------------------------------+ 253| ``t1 = t2 * f or t1 = f * t2`` | Delta multiplied by a float. The result is | 254| | rounded to the nearest multiple of | 255| | timedelta.resolution using round-half-to-even.| 256+--------------------------------+-----------------------------------------------+ 257| ``f = t2 / t3`` | Division (3) of *t2* by *t3*. Returns a | 258| | :class:`float` object. | 259+--------------------------------+-----------------------------------------------+ 260| ``t1 = t2 / f or t1 = t2 / i`` | Delta divided by a float or an int. The result| 261| | is rounded to the nearest multiple of | 262| | timedelta.resolution using round-half-to-even.| 263+--------------------------------+-----------------------------------------------+ 264| ``t1 = t2 // i`` or | The floor is computed and the remainder (if | 265| ``t1 = t2 // t3`` | any) is thrown away. In the second case, an | 266| | integer is returned. (3) | 267+--------------------------------+-----------------------------------------------+ 268| ``t1 = t2 % t3`` | The remainder is computed as a | 269| | :class:`timedelta` object. (3) | 270+--------------------------------+-----------------------------------------------+ 271| ``q, r = divmod(t1, t2)`` | Computes the quotient and the remainder: | 272| | ``q = t1 // t2`` (3) and ``r = t1 % t2``. | 273| | q is an integer and r is a :class:`timedelta` | 274| | object. | 275+--------------------------------+-----------------------------------------------+ 276| ``+t1`` | Returns a :class:`timedelta` object with the | 277| | same value. (2) | 278+--------------------------------+-----------------------------------------------+ 279| ``-t1`` | equivalent to | 280| | :class:`timedelta`\ (-*t1.days*, | 281| | -*t1.seconds*, -*t1.microseconds*), | 282| | and to *t1*\* -1. (1)(4) | 283+--------------------------------+-----------------------------------------------+ 284| ``abs(t)`` | equivalent to +\ *t* when ``t.days >= 0``, and| 285| | to -*t* when ``t.days < 0``. (2) | 286+--------------------------------+-----------------------------------------------+ 287| ``str(t)`` | Returns a string in the form | 288| | ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D | 289| | is negative for negative ``t``. (5) | 290+--------------------------------+-----------------------------------------------+ 291| ``repr(t)`` | Returns a string representation of the | 292| | :class:`timedelta` object as a constructor | 293| | call with canonical attribute values. | 294+--------------------------------+-----------------------------------------------+ 295 296 297Notes: 298 299(1) 300 This is exact, but may overflow. 301 302(2) 303 This is exact, and cannot overflow. 304 305(3) 306 Division by 0 raises :exc:`ZeroDivisionError`. 307 308(4) 309 -*timedelta.max* is not representable as a :class:`timedelta` object. 310 311(5) 312 String representations of :class:`timedelta` objects are normalized 313 similarly to their internal representation. This leads to somewhat 314 unusual results for negative timedeltas. For example: 315 316 >>> timedelta(hours=-5) 317 datetime.timedelta(days=-1, seconds=68400) 318 >>> print(_) 319 -1 day, 19:00:00 320 321(6) 322 The expression ``t2 - t3`` will always be equal to the expression ``t2 + (-t3)`` except 323 when t3 is equal to ``timedelta.max``; in that case the former will produce a result 324 while the latter will overflow. 325 326In addition to the operations listed above :class:`timedelta` objects support 327certain additions and subtractions with :class:`date` and :class:`.datetime` 328objects (see below). 329 330.. versionchanged:: 3.2 331 Floor division and true division of a :class:`timedelta` object by another 332 :class:`timedelta` object are now supported, as are remainder operations and 333 the :func:`divmod` function. True division and multiplication of a 334 :class:`timedelta` object by a :class:`float` object are now supported. 335 336 337Comparisons of :class:`timedelta` objects are supported with the 338:class:`timedelta` object representing the smaller duration considered to be the 339smaller timedelta. In order to stop mixed-type comparisons from falling back to 340the default comparison by object address, when a :class:`timedelta` object is 341compared to an object of a different type, :exc:`TypeError` is raised unless the 342comparison is ``==`` or ``!=``. The latter cases return :const:`False` or 343:const:`True`, respectively. 344 345:class:`timedelta` objects are :term:`hashable` (usable as dictionary keys), support 346efficient pickling, and in Boolean contexts, a :class:`timedelta` object is 347considered to be true if and only if it isn't equal to ``timedelta(0)``. 348 349Instance methods: 350 351.. method:: timedelta.total_seconds() 352 353 Return the total number of seconds contained in the duration. Equivalent to 354 ``td / timedelta(seconds=1)``. 355 356 Note that for very large time intervals (greater than 270 years on 357 most platforms) this method will lose microsecond accuracy. 358 359 .. versionadded:: 3.2 360 361 362Example usage: 363 364 >>> from datetime import timedelta 365 >>> year = timedelta(days=365) 366 >>> another_year = timedelta(weeks=40, days=84, hours=23, 367 ... minutes=50, seconds=600) # adds up to 365 days 368 >>> year.total_seconds() 369 31536000.0 370 >>> year == another_year 371 True 372 >>> ten_years = 10 * year 373 >>> ten_years, ten_years.days // 365 374 (datetime.timedelta(days=3650), 10) 375 >>> nine_years = ten_years - year 376 >>> nine_years, nine_years.days // 365 377 (datetime.timedelta(days=3285), 9) 378 >>> three_years = nine_years // 3 379 >>> three_years, three_years.days // 365 380 (datetime.timedelta(days=1095), 3) 381 >>> abs(three_years - ten_years) == 2 * three_years + year 382 True 383 384 385.. _datetime-date: 386 387:class:`date` Objects 388--------------------- 389 390A :class:`date` object represents a date (year, month and day) in an idealized 391calendar, the current Gregorian calendar indefinitely extended in both 392directions. January 1 of year 1 is called day number 1, January 2 of year 1 is 393called day number 2, and so on. This matches the definition of the "proleptic 394Gregorian" calendar in Dershowitz and Reingold's book Calendrical Calculations, 395where it's the base calendar for all computations. See the book for algorithms 396for converting between proleptic Gregorian ordinals and many other calendar 397systems. 398 399 400.. class:: date(year, month, day) 401 402 All arguments are required. Arguments may be integers, in the following 403 ranges: 404 405 * ``MINYEAR <= year <= MAXYEAR`` 406 * ``1 <= month <= 12`` 407 * ``1 <= day <= number of days in the given month and year`` 408 409 If an argument outside those ranges is given, :exc:`ValueError` is raised. 410 411 412Other constructors, all class methods: 413 414.. classmethod:: date.today() 415 416 Return the current local date. This is equivalent to 417 ``date.fromtimestamp(time.time())``. 418 419 420.. classmethod:: date.fromtimestamp(timestamp) 421 422 Return the local date corresponding to the POSIX timestamp, such as is returned 423 by :func:`time.time`. This may raise :exc:`OverflowError`, if the timestamp is out 424 of the range of values supported by the platform C :c:func:`localtime` function, 425 and :exc:`OSError` on :c:func:`localtime` failure. 426 It's common for this to be restricted to years from 1970 through 2038. Note 427 that on non-POSIX systems that include leap seconds in their notion of a 428 timestamp, leap seconds are ignored by :meth:`fromtimestamp`. 429 430 .. versionchanged:: 3.3 431 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp 432 is out of the range of values supported by the platform C 433 :c:func:`localtime` function. Raise :exc:`OSError` instead of 434 :exc:`ValueError` on :c:func:`localtime` failure. 435 436 437.. classmethod:: date.fromordinal(ordinal) 438 439 Return the date corresponding to the proleptic Gregorian ordinal, where January 440 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 <= ordinal <= 441 date.max.toordinal()``. For any date *d*, ``date.fromordinal(d.toordinal()) == 442 d``. 443 444 445.. classmethod:: date.fromisoformat(date_string) 446 447 Return a :class:`date` corresponding to a *date_string* in the format emitted 448 by :meth:`date.isoformat`. Specifically, this function supports strings in 449 the format(s) ``YYYY-MM-DD``. 450 451 .. caution:: 452 453 This does not support parsing arbitrary ISO 8601 strings - it is only intended 454 as the inverse operation of :meth:`date.isoformat`. 455 456 .. versionadded:: 3.7 457 458 459 460Class attributes: 461 462.. attribute:: date.min 463 464 The earliest representable date, ``date(MINYEAR, 1, 1)``. 465 466 467.. attribute:: date.max 468 469 The latest representable date, ``date(MAXYEAR, 12, 31)``. 470 471 472.. attribute:: date.resolution 473 474 The smallest possible difference between non-equal date objects, 475 ``timedelta(days=1)``. 476 477 478Instance attributes (read-only): 479 480.. attribute:: date.year 481 482 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive. 483 484 485.. attribute:: date.month 486 487 Between 1 and 12 inclusive. 488 489 490.. attribute:: date.day 491 492 Between 1 and the number of days in the given month of the given year. 493 494 495Supported operations: 496 497+-------------------------------+----------------------------------------------+ 498| Operation | Result | 499+===============================+==============================================+ 500| ``date2 = date1 + timedelta`` | *date2* is ``timedelta.days`` days removed | 501| | from *date1*. (1) | 502+-------------------------------+----------------------------------------------+ 503| ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 + | 504| | timedelta == date1``. (2) | 505+-------------------------------+----------------------------------------------+ 506| ``timedelta = date1 - date2`` | \(3) | 507+-------------------------------+----------------------------------------------+ 508| ``date1 < date2`` | *date1* is considered less than *date2* when | 509| | *date1* precedes *date2* in time. (4) | 510+-------------------------------+----------------------------------------------+ 511 512Notes: 513 514(1) 515 *date2* is moved forward in time if ``timedelta.days > 0``, or backward if 516 ``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``. 517 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored. 518 :exc:`OverflowError` is raised if ``date2.year`` would be smaller than 519 :const:`MINYEAR` or larger than :const:`MAXYEAR`. 520 521(2) 522 ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored. 523 524(3) 525 This is exact, and cannot overflow. timedelta.seconds and 526 timedelta.microseconds are 0, and date2 + timedelta == date1 after. 527 528(4) 529 In other words, ``date1 < date2`` if and only if ``date1.toordinal() < 530 date2.toordinal()``. Date comparison raises :exc:`TypeError` if 531 the other comparand isn't also a :class:`date` object. However, 532 ``NotImplemented`` is returned instead if the other comparand has a 533 :meth:`timetuple` attribute. This hook gives other kinds of date objects a 534 chance at implementing mixed-type comparison. If not, when a :class:`date` 535 object is compared to an object of a different type, :exc:`TypeError` is raised 536 unless the comparison is ``==`` or ``!=``. The latter cases return 537 :const:`False` or :const:`True`, respectively. 538 539Dates can be used as dictionary keys. In Boolean contexts, all :class:`date` 540objects are considered to be true. 541 542Instance methods: 543 544.. method:: date.replace(year=self.year, month=self.month, day=self.day) 545 546 Return a date with the same value, except for those parameters given new 547 values by whichever keyword arguments are specified. For example, if ``d == 548 date(2002, 12, 31)``, then ``d.replace(day=26) == date(2002, 12, 26)``. 549 550 551.. method:: date.timetuple() 552 553 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`. 554 The hours, minutes and seconds are 0, and the DST flag is -1. ``d.timetuple()`` 555 is equivalent to ``time.struct_time((d.year, d.month, d.day, 0, 0, 0, 556 d.weekday(), yday, -1))``, where ``yday = d.toordinal() - date(d.year, 1, 557 1).toordinal() + 1`` is the day number within the current year starting with 558 ``1`` for January 1st. 559 560 561.. method:: date.toordinal() 562 563 Return the proleptic Gregorian ordinal of the date, where January 1 of year 1 564 has ordinal 1. For any :class:`date` object *d*, 565 ``date.fromordinal(d.toordinal()) == d``. 566 567 568.. method:: date.weekday() 569 570 Return the day of the week as an integer, where Monday is 0 and Sunday is 6. 571 For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also 572 :meth:`isoweekday`. 573 574 575.. method:: date.isoweekday() 576 577 Return the day of the week as an integer, where Monday is 1 and Sunday is 7. 578 For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also 579 :meth:`weekday`, :meth:`isocalendar`. 580 581 582.. method:: date.isocalendar() 583 584 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). 585 586 The ISO calendar is a widely used variant of the Gregorian calendar. See 587 https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm for a good 588 explanation. 589 590 The ISO year consists of 52 or 53 full weeks, and where a week starts on a 591 Monday and ends on a Sunday. The first week of an ISO year is the first 592 (Gregorian) calendar week of a year containing a Thursday. This is called week 593 number 1, and the ISO year of that Thursday is the same as its Gregorian year. 594 595 For example, 2004 begins on a Thursday, so the first week of ISO year 2004 596 begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004, so that 597 ``date(2003, 12, 29).isocalendar() == (2004, 1, 1)`` and ``date(2004, 1, 598 4).isocalendar() == (2004, 1, 7)``. 599 600 601.. method:: date.isoformat() 602 603 Return a string representing the date in ISO 8601 format, 'YYYY-MM-DD'. For 604 example, ``date(2002, 12, 4).isoformat() == '2002-12-04'``. 605 606 607.. method:: date.__str__() 608 609 For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``. 610 611 612.. method:: date.ctime() 613 614 Return a string representing the date, for example ``date(2002, 12, 615 4).ctime() == 'Wed Dec 4 00:00:00 2002'``. ``d.ctime()`` is equivalent to 616 ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the native C 617 :c:func:`ctime` function (which :func:`time.ctime` invokes, but which 618 :meth:`date.ctime` does not invoke) conforms to the C standard. 619 620 621.. method:: date.strftime(format) 622 623 Return a string representing the date, controlled by an explicit format string. 624 Format codes referring to hours, minutes or seconds will see 0 values. For a 625 complete list of formatting directives, see 626 :ref:`strftime-strptime-behavior`. 627 628 629.. method:: date.__format__(format) 630 631 Same as :meth:`.date.strftime`. This makes it possible to specify a format 632 string for a :class:`.date` object in :ref:`formatted string 633 literals <f-strings>` and when using :meth:`str.format`. For a 634 complete list of formatting directives, see 635 :ref:`strftime-strptime-behavior`. 636 637 638Example of counting days to an event:: 639 640 >>> import time 641 >>> from datetime import date 642 >>> today = date.today() 643 >>> today 644 datetime.date(2007, 12, 5) 645 >>> today == date.fromtimestamp(time.time()) 646 True 647 >>> my_birthday = date(today.year, 6, 24) 648 >>> if my_birthday < today: 649 ... my_birthday = my_birthday.replace(year=today.year + 1) 650 >>> my_birthday 651 datetime.date(2008, 6, 24) 652 >>> time_to_birthday = abs(my_birthday - today) 653 >>> time_to_birthday.days 654 202 655 656Example of working with :class:`date`: 657 658.. doctest:: 659 660 >>> from datetime import date 661 >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001 662 >>> d 663 datetime.date(2002, 3, 11) 664 >>> t = d.timetuple() 665 >>> for i in t: # doctest: +SKIP 666 ... print(i) 667 2002 # year 668 3 # month 669 11 # day 670 0 671 0 672 0 673 0 # weekday (0 = Monday) 674 70 # 70th day in the year 675 -1 676 >>> ic = d.isocalendar() 677 >>> for i in ic: # doctest: +SKIP 678 ... print(i) 679 2002 # ISO year 680 11 # ISO week number 681 1 # ISO day number ( 1 = Monday ) 682 >>> d.isoformat() 683 '2002-03-11' 684 >>> d.strftime("%d/%m/%y") 685 '11/03/02' 686 >>> d.strftime("%A %d. %B %Y") 687 'Monday 11. March 2002' 688 >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month") 689 'The day is 11, the month is March.' 690 691 692.. _datetime-datetime: 693 694:class:`.datetime` Objects 695-------------------------- 696 697A :class:`.datetime` object is a single object containing all the information 698from a :class:`date` object and a :class:`.time` object. Like a :class:`date` 699object, :class:`.datetime` assumes the current Gregorian calendar extended in 700both directions; like a time object, :class:`.datetime` assumes there are exactly 7013600\*24 seconds in every day. 702 703Constructor: 704 705.. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0) 706 707 The year, month and day arguments are required. *tzinfo* may be ``None``, or an 708 instance of a :class:`tzinfo` subclass. The remaining arguments may be integers, 709 in the following ranges: 710 711 * ``MINYEAR <= year <= MAXYEAR``, 712 * ``1 <= month <= 12``, 713 * ``1 <= day <= number of days in the given month and year``, 714 * ``0 <= hour < 24``, 715 * ``0 <= minute < 60``, 716 * ``0 <= second < 60``, 717 * ``0 <= microsecond < 1000000``, 718 * ``fold in [0, 1]``. 719 720 If an argument outside those ranges is given, :exc:`ValueError` is raised. 721 722 .. versionadded:: 3.6 723 Added the ``fold`` argument. 724 725Other constructors, all class methods: 726 727.. classmethod:: datetime.today() 728 729 Return the current local datetime, with :attr:`.tzinfo` ``None``. This is 730 equivalent to ``datetime.fromtimestamp(time.time())``. See also :meth:`now`, 731 :meth:`fromtimestamp`. 732 733 734.. classmethod:: datetime.now(tz=None) 735 736 Return the current local date and time. If optional argument *tz* is ``None`` 737 or not specified, this is like :meth:`today`, but, if possible, supplies more 738 precision than can be gotten from going through a :func:`time.time` timestamp 739 (for example, this may be possible on platforms supplying the C 740 :c:func:`gettimeofday` function). 741 742 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the 743 current date and time are converted to *tz*’s time zone. In this case the 744 result is equivalent to ``tz.fromutc(datetime.utcnow().replace(tzinfo=tz))``. 745 See also :meth:`today`, :meth:`utcnow`. 746 747 748.. classmethod:: datetime.utcnow() 749 750 Return the current UTC date and time, with :attr:`.tzinfo` ``None``. This is like 751 :meth:`now`, but returns the current UTC date and time, as a naive 752 :class:`.datetime` object. An aware current UTC datetime can be obtained by 753 calling ``datetime.now(timezone.utc)``. See also :meth:`now`. 754 755.. classmethod:: datetime.fromtimestamp(timestamp, tz=None) 756 757 Return the local date and time corresponding to the POSIX timestamp, such as is 758 returned by :func:`time.time`. If optional argument *tz* is ``None`` or not 759 specified, the timestamp is converted to the platform's local date and time, and 760 the returned :class:`.datetime` object is naive. 761 762 If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the 763 timestamp is converted to *tz*’s time zone. In this case the result is 764 equivalent to 765 ``tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz))``. 766 767 :meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is out of 768 the range of values supported by the platform C :c:func:`localtime` or 769 :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or 770 :c:func:`gmtime` failure. 771 It's common for this to be restricted to years in 772 1970 through 2038. Note that on non-POSIX systems that include leap seconds in 773 their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`, 774 and then it's possible to have two timestamps differing by a second that yield 775 identical :class:`.datetime` objects. See also :meth:`utcfromtimestamp`. 776 777 .. versionchanged:: 3.3 778 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp 779 is out of the range of values supported by the platform C 780 :c:func:`localtime` or :c:func:`gmtime` functions. Raise :exc:`OSError` 781 instead of :exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime` 782 failure. 783 784 .. versionchanged:: 3.6 785 :meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1. 786 787.. classmethod:: datetime.utcfromtimestamp(timestamp) 788 789 Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with 790 :attr:`.tzinfo` ``None``. This may raise :exc:`OverflowError`, if the timestamp is 791 out of the range of values supported by the platform C :c:func:`gmtime` function, 792 and :exc:`OSError` on :c:func:`gmtime` failure. 793 It's common for this to be restricted to years in 1970 through 2038. 794 795 To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`:: 796 797 datetime.fromtimestamp(timestamp, timezone.utc) 798 799 On the POSIX compliant platforms, it is equivalent to the following 800 expression:: 801 802 datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp) 803 804 except the latter formula always supports the full years range: between 805 :const:`MINYEAR` and :const:`MAXYEAR` inclusive. 806 807 .. versionchanged:: 3.3 808 Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp 809 is out of the range of values supported by the platform C 810 :c:func:`gmtime` function. Raise :exc:`OSError` instead of 811 :exc:`ValueError` on :c:func:`gmtime` failure. 812 813 814.. classmethod:: datetime.fromordinal(ordinal) 815 816 Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal, 817 where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 818 <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and 819 microsecond of the result are all 0, and :attr:`.tzinfo` is ``None``. 820 821 822.. classmethod:: datetime.combine(date, time, tzinfo=self.tzinfo) 823 824 Return a new :class:`.datetime` object whose date components are equal to the 825 given :class:`date` object's, and whose time components 826 are equal to the given :class:`.time` object's. If the *tzinfo* 827 argument is provided, its value is used to set the :attr:`.tzinfo` attribute 828 of the result, otherwise the :attr:`~.time.tzinfo` attribute of the *time* argument 829 is used. 830 831 For any :class:`.datetime` object *d*, 832 ``d == datetime.combine(d.date(), d.time(), d.tzinfo)``. If date is a 833 :class:`.datetime` object, its time components and :attr:`.tzinfo` attributes 834 are ignored. 835 836 .. versionchanged:: 3.6 837 Added the *tzinfo* argument. 838 839 840.. classmethod:: datetime.fromisoformat(date_string) 841 842 Return a :class:`datetime` corresponding to a *date_string* in one of the 843 formats emitted by :meth:`date.isoformat` and :meth:`datetime.isoformat`. 844 Specifically, this function supports strings in the format(s) 845 ``YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]``, 846 where ``*`` can match any single character. 847 848 .. caution:: 849 850 This does not support parsing arbitrary ISO 8601 strings - it is only intended 851 as the inverse operation of :meth:`datetime.isoformat`. 852 853 .. versionadded:: 3.7 854 855.. classmethod:: datetime.strptime(date_string, format) 856 857 Return a :class:`.datetime` corresponding to *date_string*, parsed according to 858 *format*. This is equivalent to ``datetime(*(time.strptime(date_string, 859 format)[0:6]))``. :exc:`ValueError` is raised if the date_string and format 860 can't be parsed by :func:`time.strptime` or if it returns a value which isn't a 861 time tuple. For a complete list of formatting directives, see 862 :ref:`strftime-strptime-behavior`. 863 864 865 866Class attributes: 867 868.. attribute:: datetime.min 869 870 The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1, 871 tzinfo=None)``. 872 873 874.. attribute:: datetime.max 875 876 The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59, 877 59, 999999, tzinfo=None)``. 878 879 880.. attribute:: datetime.resolution 881 882 The smallest possible difference between non-equal :class:`.datetime` objects, 883 ``timedelta(microseconds=1)``. 884 885 886Instance attributes (read-only): 887 888.. attribute:: datetime.year 889 890 Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive. 891 892 893.. attribute:: datetime.month 894 895 Between 1 and 12 inclusive. 896 897 898.. attribute:: datetime.day 899 900 Between 1 and the number of days in the given month of the given year. 901 902 903.. attribute:: datetime.hour 904 905 In ``range(24)``. 906 907 908.. attribute:: datetime.minute 909 910 In ``range(60)``. 911 912 913.. attribute:: datetime.second 914 915 In ``range(60)``. 916 917 918.. attribute:: datetime.microsecond 919 920 In ``range(1000000)``. 921 922 923.. attribute:: datetime.tzinfo 924 925 The object passed as the *tzinfo* argument to the :class:`.datetime` constructor, 926 or ``None`` if none was passed. 927 928 929.. attribute:: datetime.fold 930 931 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A 932 repeated interval occurs when clocks are rolled back at the end of daylight saving 933 time or when the UTC offset for the current zone is decreased for political reasons.) 934 The value 0 (1) represents the earlier (later) of the two moments with the same wall 935 time representation. 936 937 .. versionadded:: 3.6 938 939Supported operations: 940 941+---------------------------------------+--------------------------------+ 942| Operation | Result | 943+=======================================+================================+ 944| ``datetime2 = datetime1 + timedelta`` | \(1) | 945+---------------------------------------+--------------------------------+ 946| ``datetime2 = datetime1 - timedelta`` | \(2) | 947+---------------------------------------+--------------------------------+ 948| ``timedelta = datetime1 - datetime2`` | \(3) | 949+---------------------------------------+--------------------------------+ 950| ``datetime1 < datetime2`` | Compares :class:`.datetime` to | 951| | :class:`.datetime`. (4) | 952+---------------------------------------+--------------------------------+ 953 954(1) 955 datetime2 is a duration of timedelta removed from datetime1, moving forward in 956 time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The 957 result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and 958 datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if 959 datetime2.year would be smaller than :const:`MINYEAR` or larger than 960 :const:`MAXYEAR`. Note that no time zone adjustments are done even if the 961 input is an aware object. 962 963(2) 964 Computes the datetime2 such that datetime2 + timedelta == datetime1. As for 965 addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input 966 datetime, and no time zone adjustments are done even if the input is aware. 967 968(3) 969 Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if 970 both operands are naive, or if both are aware. If one is aware and the other is 971 naive, :exc:`TypeError` is raised. 972 973 If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute, 974 the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta` 975 object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments 976 are done in this case. 977 978 If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts 979 as if *a* and *b* were first converted to naive UTC datetimes first. The 980 result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None) 981 - b.utcoffset())`` except that the implementation never overflows. 982 983(4) 984 *datetime1* is considered less than *datetime2* when *datetime1* precedes 985 *datetime2* in time. 986 987 If one comparand is naive and the other is aware, :exc:`TypeError` 988 is raised if an order comparison is attempted. For equality 989 comparisons, naive instances are never equal to aware instances. 990 991 If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the 992 common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are 993 compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo` 994 attributes, the comparands are first adjusted by subtracting their UTC 995 offsets (obtained from ``self.utcoffset()``). 996 997 .. versionchanged:: 3.3 998 Equality comparisons between naive and aware :class:`.datetime` 999 instances don't raise :exc:`TypeError`. 1000 1001 .. note:: 1002 1003 In order to stop comparison from falling back to the default scheme of comparing 1004 object addresses, datetime comparison normally raises :exc:`TypeError` if the 1005 other comparand isn't also a :class:`.datetime` object. However, 1006 ``NotImplemented`` is returned instead if the other comparand has a 1007 :meth:`timetuple` attribute. This hook gives other kinds of date objects a 1008 chance at implementing mixed-type comparison. If not, when a :class:`.datetime` 1009 object is compared to an object of a different type, :exc:`TypeError` is raised 1010 unless the comparison is ``==`` or ``!=``. The latter cases return 1011 :const:`False` or :const:`True`, respectively. 1012 1013:class:`.datetime` objects can be used as dictionary keys. In Boolean contexts, 1014all :class:`.datetime` objects are considered to be true. 1015 1016Instance methods: 1017 1018.. method:: datetime.date() 1019 1020 Return :class:`date` object with same year, month and day. 1021 1022 1023.. method:: datetime.time() 1024 1025 Return :class:`.time` object with same hour, minute, second, microsecond and fold. 1026 :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`. 1027 1028 .. versionchanged:: 3.6 1029 The fold value is copied to the returned :class:`.time` object. 1030 1031 1032.. method:: datetime.timetz() 1033 1034 Return :class:`.time` object with same hour, minute, second, microsecond, fold, and 1035 tzinfo attributes. See also method :meth:`time`. 1036 1037 .. versionchanged:: 3.6 1038 The fold value is copied to the returned :class:`.time` object. 1039 1040 1041.. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \ 1042 hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \ 1043 tzinfo=self.tzinfo, * fold=0) 1044 1045 Return a datetime with the same attributes, except for those attributes given 1046 new values by whichever keyword arguments are specified. Note that 1047 ``tzinfo=None`` can be specified to create a naive datetime from an aware 1048 datetime with no conversion of date and time data. 1049 1050 .. versionadded:: 3.6 1051 Added the ``fold`` argument. 1052 1053 1054.. method:: datetime.astimezone(tz=None) 1055 1056 Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*, 1057 adjusting the date and time data so the result is the same UTC time as 1058 *self*, but in *tz*'s local time. 1059 1060 If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its 1061 :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If *self* 1062 is naive, it is presumed to represent time in the system timezone. 1063 1064 If called without arguments (or with ``tz=None``) the system local 1065 timezone is assumed for the target timezone. The ``.tzinfo`` attribute of the converted 1066 datetime instance will be set to an instance of :class:`timezone` 1067 with the zone name and offset obtained from the OS. 1068 1069 If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no 1070 adjustment of date or time data is performed. Else the result is local 1071 time in the timezone *tz*, representing the same UTC time as *self*: after 1072 ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have 1073 the same date and time data as ``dt - dt.utcoffset()``. 1074 1075 If you merely want to attach a time zone object *tz* to a datetime *dt* without 1076 adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you 1077 merely want to remove the time zone object from an aware datetime *dt* without 1078 conversion of date and time data, use ``dt.replace(tzinfo=None)``. 1079 1080 Note that the default :meth:`tzinfo.fromutc` method can be overridden in a 1081 :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`. 1082 Ignoring error cases, :meth:`astimezone` acts like:: 1083 1084 def astimezone(self, tz): 1085 if self.tzinfo is tz: 1086 return self 1087 # Convert self to UTC, and attach the new time zone object. 1088 utc = (self - self.utcoffset()).replace(tzinfo=tz) 1089 # Convert from UTC to tz's local time. 1090 return tz.fromutc(utc) 1091 1092 .. versionchanged:: 3.3 1093 *tz* now can be omitted. 1094 1095 .. versionchanged:: 3.6 1096 The :meth:`astimezone` method can now be called on naive instances that 1097 are presumed to represent system local time. 1098 1099 1100.. method:: datetime.utcoffset() 1101 1102 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 1103 ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't 1104 return ``None`` or a :class:`timedelta` object with magnitude less than one day. 1105 1106 .. versionchanged:: 3.7 1107 The UTC offset is not restricted to a whole number of minutes. 1108 1109 1110.. method:: datetime.dst() 1111 1112 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 1113 ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return 1114 ``None`` or a :class:`timedelta` object with magnitude less than one day. 1115 1116 .. versionchanged:: 3.7 1117 The DST offset is not restricted to a whole number of minutes. 1118 1119 1120.. method:: datetime.tzname() 1121 1122 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 1123 ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return 1124 ``None`` or a string object, 1125 1126 1127.. method:: datetime.timetuple() 1128 1129 Return a :class:`time.struct_time` such as returned by :func:`time.localtime`. 1130 ``d.timetuple()`` is equivalent to ``time.struct_time((d.year, d.month, d.day, 1131 d.hour, d.minute, d.second, d.weekday(), yday, dst))``, where ``yday = 1132 d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the day number within 1133 the current year starting with ``1`` for January 1st. The :attr:`tm_isdst` flag 1134 of the result is set according to the :meth:`dst` method: :attr:`.tzinfo` is 1135 ``None`` or :meth:`dst` returns ``None``, :attr:`tm_isdst` is set to ``-1``; 1136 else if :meth:`dst` returns a non-zero value, :attr:`tm_isdst` is set to ``1``; 1137 else :attr:`tm_isdst` is set to ``0``. 1138 1139 1140.. method:: datetime.utctimetuple() 1141 1142 If :class:`.datetime` instance *d* is naive, this is the same as 1143 ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what 1144 ``d.dst()`` returns. DST is never in effect for a UTC time. 1145 1146 If *d* is aware, *d* is normalized to UTC time, by subtracting 1147 ``d.utcoffset()``, and a :class:`time.struct_time` for the 1148 normalized time is returned. :attr:`tm_isdst` is forced to 0. Note 1149 that an :exc:`OverflowError` may be raised if *d*.year was 1150 ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year 1151 boundary. 1152 1153 1154.. method:: datetime.toordinal() 1155 1156 Return the proleptic Gregorian ordinal of the date. The same as 1157 ``self.date().toordinal()``. 1158 1159.. method:: datetime.timestamp() 1160 1161 Return POSIX timestamp corresponding to the :class:`.datetime` 1162 instance. The return value is a :class:`float` similar to that 1163 returned by :func:`time.time`. 1164 1165 Naive :class:`.datetime` instances are assumed to represent local 1166 time and this method relies on the platform C :c:func:`mktime` 1167 function to perform the conversion. Since :class:`.datetime` 1168 supports wider range of values than :c:func:`mktime` on many 1169 platforms, this method may raise :exc:`OverflowError` for times far 1170 in the past or far in the future. 1171 1172 For aware :class:`.datetime` instances, the return value is computed 1173 as:: 1174 1175 (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds() 1176 1177 .. versionadded:: 3.3 1178 1179 .. versionchanged:: 3.6 1180 The :meth:`timestamp` method uses the :attr:`.fold` attribute to 1181 disambiguate the times during a repeated interval. 1182 1183 .. note:: 1184 1185 There is no method to obtain the POSIX timestamp directly from a 1186 naive :class:`.datetime` instance representing UTC time. If your 1187 application uses this convention and your system timezone is not 1188 set to UTC, you can obtain the POSIX timestamp by supplying 1189 ``tzinfo=timezone.utc``:: 1190 1191 timestamp = dt.replace(tzinfo=timezone.utc).timestamp() 1192 1193 or by calculating the timestamp directly:: 1194 1195 timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1) 1196 1197.. method:: datetime.weekday() 1198 1199 Return the day of the week as an integer, where Monday is 0 and Sunday is 6. 1200 The same as ``self.date().weekday()``. See also :meth:`isoweekday`. 1201 1202 1203.. method:: datetime.isoweekday() 1204 1205 Return the day of the week as an integer, where Monday is 1 and Sunday is 7. 1206 The same as ``self.date().isoweekday()``. See also :meth:`weekday`, 1207 :meth:`isocalendar`. 1208 1209 1210.. method:: datetime.isocalendar() 1211 1212 Return a 3-tuple, (ISO year, ISO week number, ISO weekday). The same as 1213 ``self.date().isocalendar()``. 1214 1215 1216.. method:: datetime.isoformat(sep='T', timespec='auto') 1217 1218 Return a string representing the date and time in ISO 8601 format, 1219 YYYY-MM-DDTHH:MM:SS.ffffff or, if :attr:`microsecond` is 0, 1220 YYYY-MM-DDTHH:MM:SS 1221 1222 If :meth:`utcoffset` does not return ``None``, a string is 1223 appended, giving the UTC offset: 1224 YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]] or, if :attr:`microsecond` 1225 is 0 YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]. 1226 1227 The optional argument *sep* (default ``'T'``) is a one-character separator, 1228 placed between the date and time portions of the result. For example, 1229 1230 >>> from datetime import tzinfo, timedelta, datetime 1231 >>> class TZ(tzinfo): 1232 ... def utcoffset(self, dt): return timedelta(minutes=-399) 1233 ... 1234 >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ') 1235 '2002-12-25 00:00:00-06:39' 1236 1237 The optional argument *timespec* specifies the number of additional 1238 components of the time to include (the default is ``'auto'``). 1239 It can be one of the following: 1240 1241 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0, 1242 same as ``'microseconds'`` otherwise. 1243 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format. 1244 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format. 1245 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second` 1246 in HH:MM:SS format. 1247 - ``'milliseconds'``: Include full time, but truncate fractional second 1248 part to milliseconds. HH:MM:SS.sss format. 1249 - ``'microseconds'``: Include full time in HH:MM:SS.ffffff format. 1250 1251 .. note:: 1252 1253 Excluded time components are truncated, not rounded. 1254 1255 :exc:`ValueError` will be raised on an invalid *timespec* argument. 1256 1257 1258 >>> from datetime import datetime 1259 >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP 1260 '2002-12-25T00:00' 1261 >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0) 1262 >>> dt.isoformat(timespec='microseconds') 1263 '2015-01-01T12:30:59.000000' 1264 1265 .. versionadded:: 3.6 1266 Added the *timespec* argument. 1267 1268 1269.. method:: datetime.__str__() 1270 1271 For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to 1272 ``d.isoformat(' ')``. 1273 1274 1275.. method:: datetime.ctime() 1276 1277 Return a string representing the date and time, for example ``datetime(2002, 12, 1278 4, 20, 30, 40).ctime() == 'Wed Dec 4 20:30:40 2002'``. ``d.ctime()`` is 1279 equivalent to ``time.ctime(time.mktime(d.timetuple()))`` on platforms where the 1280 native C :c:func:`ctime` function (which :func:`time.ctime` invokes, but which 1281 :meth:`datetime.ctime` does not invoke) conforms to the C standard. 1282 1283 1284.. method:: datetime.strftime(format) 1285 1286 Return a string representing the date and time, controlled by an explicit format 1287 string. For a complete list of formatting directives, see 1288 :ref:`strftime-strptime-behavior`. 1289 1290 1291.. method:: datetime.__format__(format) 1292 1293 Same as :meth:`.datetime.strftime`. This makes it possible to specify a format 1294 string for a :class:`.datetime` object in :ref:`formatted string 1295 literals <f-strings>` and when using :meth:`str.format`. For a 1296 complete list of formatting directives, see 1297 :ref:`strftime-strptime-behavior`. 1298 1299 1300Examples of working with datetime objects: 1301 1302.. doctest:: 1303 1304 >>> from datetime import datetime, date, time 1305 >>> # Using datetime.combine() 1306 >>> d = date(2005, 7, 14) 1307 >>> t = time(12, 30) 1308 >>> datetime.combine(d, t) 1309 datetime.datetime(2005, 7, 14, 12, 30) 1310 >>> # Using datetime.now() or datetime.utcnow() 1311 >>> datetime.now() # doctest: +SKIP 1312 datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1 1313 >>> datetime.utcnow() # doctest: +SKIP 1314 datetime.datetime(2007, 12, 6, 15, 29, 43, 79060) 1315 >>> # Using datetime.strptime() 1316 >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") 1317 >>> dt 1318 datetime.datetime(2006, 11, 21, 16, 30) 1319 >>> # Using datetime.timetuple() to get tuple of all attributes 1320 >>> tt = dt.timetuple() 1321 >>> for it in tt: # doctest: +SKIP 1322 ... print(it) 1323 ... 1324 2006 # year 1325 11 # month 1326 21 # day 1327 16 # hour 1328 30 # minute 1329 0 # second 1330 1 # weekday (0 = Monday) 1331 325 # number of days since 1st January 1332 -1 # dst - method tzinfo.dst() returned None 1333 >>> # Date in ISO format 1334 >>> ic = dt.isocalendar() 1335 >>> for it in ic: # doctest: +SKIP 1336 ... print(it) 1337 ... 1338 2006 # ISO year 1339 47 # ISO week 1340 2 # ISO weekday 1341 >>> # Formatting datetime 1342 >>> dt.strftime("%A, %d. %B %Y %I:%M%p") 1343 'Tuesday, 21. November 2006 04:30PM' 1344 >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time") 1345 'The day is 21, the month is November, the time is 04:30PM.' 1346 1347Using datetime with tzinfo: 1348 1349 >>> from datetime import timedelta, datetime, tzinfo 1350 >>> class GMT1(tzinfo): 1351 ... def utcoffset(self, dt): 1352 ... return timedelta(hours=1) + self.dst(dt) 1353 ... def dst(self, dt): 1354 ... # DST starts last Sunday in March 1355 ... d = datetime(dt.year, 4, 1) # ends last Sunday in October 1356 ... self.dston = d - timedelta(days=d.weekday() + 1) 1357 ... d = datetime(dt.year, 11, 1) 1358 ... self.dstoff = d - timedelta(days=d.weekday() + 1) 1359 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff: 1360 ... return timedelta(hours=1) 1361 ... else: 1362 ... return timedelta(0) 1363 ... def tzname(self,dt): 1364 ... return "GMT +1" 1365 ... 1366 >>> class GMT2(tzinfo): 1367 ... def utcoffset(self, dt): 1368 ... return timedelta(hours=2) + self.dst(dt) 1369 ... def dst(self, dt): 1370 ... d = datetime(dt.year, 4, 1) 1371 ... self.dston = d - timedelta(days=d.weekday() + 1) 1372 ... d = datetime(dt.year, 11, 1) 1373 ... self.dstoff = d - timedelta(days=d.weekday() + 1) 1374 ... if self.dston <= dt.replace(tzinfo=None) < self.dstoff: 1375 ... return timedelta(hours=1) 1376 ... else: 1377 ... return timedelta(0) 1378 ... def tzname(self,dt): 1379 ... return "GMT +2" 1380 ... 1381 >>> gmt1 = GMT1() 1382 >>> # Daylight Saving Time 1383 >>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1) 1384 >>> dt1.dst() 1385 datetime.timedelta(0) 1386 >>> dt1.utcoffset() 1387 datetime.timedelta(seconds=3600) 1388 >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1) 1389 >>> dt2.dst() 1390 datetime.timedelta(seconds=3600) 1391 >>> dt2.utcoffset() 1392 datetime.timedelta(seconds=7200) 1393 >>> # Convert datetime to another time zone 1394 >>> dt3 = dt2.astimezone(GMT2()) 1395 >>> dt3 # doctest: +ELLIPSIS 1396 datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>) 1397 >>> dt2 # doctest: +ELLIPSIS 1398 datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>) 1399 >>> dt2.utctimetuple() == dt3.utctimetuple() 1400 True 1401 1402 1403 1404.. _datetime-time: 1405 1406:class:`.time` Objects 1407---------------------- 1408 1409A time object represents a (local) time of day, independent of any particular 1410day, and subject to adjustment via a :class:`tzinfo` object. 1411 1412.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0) 1413 1414 All arguments are optional. *tzinfo* may be ``None``, or an instance of a 1415 :class:`tzinfo` subclass. The remaining arguments may be integers, in the 1416 following ranges: 1417 1418 * ``0 <= hour < 24``, 1419 * ``0 <= minute < 60``, 1420 * ``0 <= second < 60``, 1421 * ``0 <= microsecond < 1000000``, 1422 * ``fold in [0, 1]``. 1423 1424 If an argument outside those ranges is given, :exc:`ValueError` is raised. All 1425 default to ``0`` except *tzinfo*, which defaults to :const:`None`. 1426 1427Class attributes: 1428 1429 1430.. attribute:: time.min 1431 1432 The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``. 1433 1434 1435.. attribute:: time.max 1436 1437 The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``. 1438 1439 1440.. attribute:: time.resolution 1441 1442 The smallest possible difference between non-equal :class:`.time` objects, 1443 ``timedelta(microseconds=1)``, although note that arithmetic on 1444 :class:`.time` objects is not supported. 1445 1446 1447Instance attributes (read-only): 1448 1449.. attribute:: time.hour 1450 1451 In ``range(24)``. 1452 1453 1454.. attribute:: time.minute 1455 1456 In ``range(60)``. 1457 1458 1459.. attribute:: time.second 1460 1461 In ``range(60)``. 1462 1463 1464.. attribute:: time.microsecond 1465 1466 In ``range(1000000)``. 1467 1468 1469.. attribute:: time.tzinfo 1470 1471 The object passed as the tzinfo argument to the :class:`.time` constructor, or 1472 ``None`` if none was passed. 1473 1474 1475.. attribute:: time.fold 1476 1477 In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A 1478 repeated interval occurs when clocks are rolled back at the end of daylight saving 1479 time or when the UTC offset for the current zone is decreased for political reasons.) 1480 The value 0 (1) represents the earlier (later) of the two moments with the same wall 1481 time representation. 1482 1483 .. versionadded:: 3.6 1484 1485 1486Supported operations: 1487 1488* comparison of :class:`.time` to :class:`.time`, where *a* is considered less 1489 than *b* when *a* precedes *b* in time. If one comparand is naive and the other 1490 is aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality 1491 comparisons, naive instances are never equal to aware instances. 1492 1493 If both comparands are aware, and have 1494 the same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is 1495 ignored and the base times are compared. If both comparands are aware and 1496 have different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by 1497 subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order 1498 to stop mixed-type comparisons from falling back to the default comparison by 1499 object address, when a :class:`.time` object is compared to an object of a 1500 different type, :exc:`TypeError` is raised unless the comparison is ``==`` or 1501 ``!=``. The latter cases return :const:`False` or :const:`True`, respectively. 1502 1503 .. versionchanged:: 3.3 1504 Equality comparisons between naive and aware :class:`~datetime.time` instances 1505 don't raise :exc:`TypeError`. 1506 1507* hash, use as dict key 1508 1509* efficient pickling 1510 1511In boolean contexts, a :class:`.time` object is always considered to be true. 1512 1513.. versionchanged:: 3.5 1514 Before Python 3.5, a :class:`.time` object was considered to be false if it 1515 represented midnight in UTC. This behavior was considered obscure and 1516 error-prone and has been removed in Python 3.5. See :issue:`13936` for full 1517 details. 1518 1519 1520Other constructor: 1521 1522.. classmethod:: time.fromisoformat(time_string) 1523 1524 Return a :class:`time` corresponding to a *time_string* in one of the 1525 formats emitted by :meth:`time.isoformat`. Specifically, this function supports 1526 strings in the format(s) ``HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]``. 1527 1528 .. caution:: 1529 1530 This does not support parsing arbitrary ISO 8601 strings - it is only intended 1531 as the inverse operation of :meth:`time.isoformat`. 1532 1533 .. versionadded:: 3.7 1534 1535 1536Instance methods: 1537 1538.. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \ 1539 microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0) 1540 1541 Return a :class:`.time` with the same value, except for those attributes given 1542 new values by whichever keyword arguments are specified. Note that 1543 ``tzinfo=None`` can be specified to create a naive :class:`.time` from an 1544 aware :class:`.time`, without conversion of the time data. 1545 1546 .. versionadded:: 3.6 1547 Added the ``fold`` argument. 1548 1549 1550.. method:: time.isoformat(timespec='auto') 1551 1552 Return a string representing the time in ISO 8601 format, HH:MM:SS.ffffff or, if 1553 :attr:`microsecond` is 0, HH:MM:SS If :meth:`utcoffset` does not return ``None``, a 1554 string is appended, giving the UTC offset: HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]] 1555 or, if self.microsecond is 0, HH:MM:SS+HH:MM[:SS[.ffffff]]. 1556 1557 The optional argument *timespec* specifies the number of additional 1558 components of the time to include (the default is ``'auto'``). 1559 It can be one of the following: 1560 1561 - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0, 1562 same as ``'microseconds'`` otherwise. 1563 - ``'hours'``: Include the :attr:`hour` in the two-digit HH format. 1564 - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in HH:MM format. 1565 - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second` 1566 in HH:MM:SS format. 1567 - ``'milliseconds'``: Include full time, but truncate fractional second 1568 part to milliseconds. HH:MM:SS.sss format. 1569 - ``'microseconds'``: Include full time in HH:MM:SS.ffffff format. 1570 1571 .. note:: 1572 1573 Excluded time components are truncated, not rounded. 1574 1575 :exc:`ValueError` will be raised on an invalid *timespec* argument. 1576 1577 1578 >>> from datetime import time 1579 >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes') 1580 '12:34' 1581 >>> dt = time(hour=12, minute=34, second=56, microsecond=0) 1582 >>> dt.isoformat(timespec='microseconds') 1583 '12:34:56.000000' 1584 >>> dt.isoformat(timespec='auto') 1585 '12:34:56' 1586 1587 .. versionadded:: 3.6 1588 Added the *timespec* argument. 1589 1590 1591.. method:: time.__str__() 1592 1593 For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``. 1594 1595 1596.. method:: time.strftime(format) 1597 1598 Return a string representing the time, controlled by an explicit format 1599 string. For a complete list of formatting directives, see 1600 :ref:`strftime-strptime-behavior`. 1601 1602 1603.. method:: time.__format__(format) 1604 1605 Same as :meth:`.time.strftime`. This makes it possible to specify a format string 1606 for a :class:`.time` object in :ref:`formatted string 1607 literals <f-strings>` and when using :meth:`str.format`. For a 1608 complete list of formatting directives, see 1609 :ref:`strftime-strptime-behavior`. 1610 1611 1612.. method:: time.utcoffset() 1613 1614 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 1615 ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't 1616 return ``None`` or a :class:`timedelta` object with magnitude less than one day. 1617 1618 .. versionchanged:: 3.7 1619 The UTC offset is not restricted to a whole number of minutes. 1620 1621 1622.. method:: time.dst() 1623 1624 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 1625 ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return 1626 ``None``, or a :class:`timedelta` object with magnitude less than one day. 1627 1628 .. versionchanged:: 3.7 1629 The DST offset is not restricted to a whole number of minutes. 1630 1631.. method:: time.tzname() 1632 1633 If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 1634 ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't 1635 return ``None`` or a string object. 1636 1637Example: 1638 1639 >>> from datetime import time, tzinfo, timedelta 1640 >>> class GMT1(tzinfo): 1641 ... def utcoffset(self, dt): 1642 ... return timedelta(hours=1) 1643 ... def dst(self, dt): 1644 ... return timedelta(0) 1645 ... def tzname(self,dt): 1646 ... return "Europe/Prague" 1647 ... 1648 >>> t = time(12, 10, 30, tzinfo=GMT1()) 1649 >>> t # doctest: +ELLIPSIS 1650 datetime.time(12, 10, 30, tzinfo=<GMT1 object at 0x...>) 1651 >>> gmt = GMT1() 1652 >>> t.isoformat() 1653 '12:10:30+01:00' 1654 >>> t.dst() 1655 datetime.timedelta(0) 1656 >>> t.tzname() 1657 'Europe/Prague' 1658 >>> t.strftime("%H:%M:%S %Z") 1659 '12:10:30 Europe/Prague' 1660 >>> 'The {} is {:%H:%M}.'.format("time", t) 1661 'The time is 12:10.' 1662 1663 1664.. _datetime-tzinfo: 1665 1666:class:`tzinfo` Objects 1667----------------------- 1668 1669.. class:: tzinfo() 1670 1671 This is an abstract base class, meaning that this class should not be 1672 instantiated directly. You need to derive a concrete subclass, and (at least) 1673 supply implementations of the standard :class:`tzinfo` methods needed by the 1674 :class:`.datetime` methods you use. The :mod:`datetime` module supplies 1675 a simple concrete subclass of :class:`tzinfo`, :class:`timezone`, which can represent 1676 timezones with fixed offset from UTC such as UTC itself or North American EST and 1677 EDT. 1678 1679 An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the 1680 constructors for :class:`.datetime` and :class:`.time` objects. The latter objects 1681 view their attributes as being in local time, and the :class:`tzinfo` object 1682 supports methods revealing offset of local time from UTC, the name of the time 1683 zone, and DST offset, all relative to a date or time object passed to them. 1684 1685 Special requirement for pickling: A :class:`tzinfo` subclass must have an 1686 :meth:`__init__` method that can be called with no arguments, else it can be 1687 pickled but possibly not unpickled again. This is a technical requirement that 1688 may be relaxed in the future. 1689 1690 A concrete subclass of :class:`tzinfo` may need to implement the following 1691 methods. Exactly which methods are needed depends on the uses made of aware 1692 :mod:`datetime` objects. If in doubt, simply implement all of them. 1693 1694 1695.. method:: tzinfo.utcoffset(dt) 1696 1697 Return offset of local time from UTC, as a :class:`timedelta` object that is 1698 positive east of UTC. If local time is 1699 west of UTC, this should be negative. Note that this is intended to be the 1700 total offset from UTC; for example, if a :class:`tzinfo` object represents both 1701 time zone and DST adjustments, :meth:`utcoffset` should return their sum. If 1702 the UTC offset isn't known, return ``None``. Else the value returned must be a 1703 :class:`timedelta` object strictly between ``-timedelta(hours=24)`` and 1704 ``timedelta(hours=24)`` (the magnitude of the offset must be less 1705 than one day). Most implementations of :meth:`utcoffset` will probably look 1706 like one of these two:: 1707 1708 return CONSTANT # fixed-offset class 1709 return CONSTANT + self.dst(dt) # daylight-aware class 1710 1711 If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return 1712 ``None`` either. 1713 1714 The default implementation of :meth:`utcoffset` raises 1715 :exc:`NotImplementedError`. 1716 1717 .. versionchanged:: 3.7 1718 The UTC offset is not restricted to a whole number of minutes. 1719 1720 1721.. method:: tzinfo.dst(dt) 1722 1723 Return the daylight saving time (DST) adjustment, as a :class:`timedelta` 1724 object or 1725 ``None`` if DST information isn't known. Return ``timedelta(0)`` if DST is not 1726 in effect. If DST is in effect, return the offset as a :class:`timedelta` object 1727 (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has 1728 already been added to the UTC offset returned by :meth:`utcoffset`, so there's 1729 no need to consult :meth:`dst` unless you're interested in obtaining DST info 1730 separately. For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo` 1731 attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag 1732 should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for 1733 DST changes when crossing time zones. 1734 1735 An instance *tz* of a :class:`tzinfo` subclass that models both standard and 1736 daylight times must be consistent in this sense: 1737 1738 ``tz.utcoffset(dt) - tz.dst(dt)`` 1739 1740 must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo == 1741 tz`` For sane :class:`tzinfo` subclasses, this expression yields the time 1742 zone's "standard offset", which should not depend on the date or the time, but 1743 only on geographic location. The implementation of :meth:`datetime.astimezone` 1744 relies on this, but cannot detect violations; it's the programmer's 1745 responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee 1746 this, it may be able to override the default implementation of 1747 :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless. 1748 1749 Most implementations of :meth:`dst` will probably look like one of these two:: 1750 1751 def dst(self, dt): 1752 # a fixed-offset class: doesn't account for DST 1753 return timedelta(0) 1754 1755 or :: 1756 1757 def dst(self, dt): 1758 # Code to set dston and dstoff to the time zone's DST 1759 # transition times based on the input dt.year, and expressed 1760 # in standard local time. Then 1761 1762 if dston <= dt.replace(tzinfo=None) < dstoff: 1763 return timedelta(hours=1) 1764 else: 1765 return timedelta(0) 1766 1767 The default implementation of :meth:`dst` raises :exc:`NotImplementedError`. 1768 1769 .. versionchanged:: 3.7 1770 The DST offset is not restricted to a whole number of minutes. 1771 1772 1773.. method:: tzinfo.tzname(dt) 1774 1775 Return the time zone name corresponding to the :class:`.datetime` object *dt*, as 1776 a string. Nothing about string names is defined by the :mod:`datetime` module, 1777 and there's no requirement that it mean anything in particular. For example, 1778 "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all 1779 valid replies. Return ``None`` if a string name isn't known. Note that this is 1780 a method rather than a fixed string primarily because some :class:`tzinfo` 1781 subclasses will wish to return different names depending on the specific value 1782 of *dt* passed, especially if the :class:`tzinfo` class is accounting for 1783 daylight time. 1784 1785 The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`. 1786 1787 1788These methods are called by a :class:`.datetime` or :class:`.time` object, in 1789response to their methods of the same names. A :class:`.datetime` object passes 1790itself as the argument, and a :class:`.time` object passes ``None`` as the 1791argument. A :class:`tzinfo` subclass's methods should therefore be prepared to 1792accept a *dt* argument of ``None``, or of class :class:`.datetime`. 1793 1794When ``None`` is passed, it's up to the class designer to decide the best 1795response. For example, returning ``None`` is appropriate if the class wishes to 1796say that time objects don't participate in the :class:`tzinfo` protocols. It 1797may be more useful for ``utcoffset(None)`` to return the standard UTC offset, as 1798there is no other convention for discovering the standard offset. 1799 1800When a :class:`.datetime` object is passed in response to a :class:`.datetime` 1801method, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can 1802rely on this, unless user code calls :class:`tzinfo` methods directly. The 1803intent is that the :class:`tzinfo` methods interpret *dt* as being in local 1804time, and not need worry about objects in other timezones. 1805 1806There is one more :class:`tzinfo` method that a subclass may wish to override: 1807 1808 1809.. method:: tzinfo.fromutc(dt) 1810 1811 This is called from the default :class:`datetime.astimezone()` 1812 implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s 1813 date and time data are to be viewed as expressing a UTC time. The purpose 1814 of :meth:`fromutc` is to adjust the date and time data, returning an 1815 equivalent datetime in *self*'s local time. 1816 1817 Most :class:`tzinfo` subclasses should be able to inherit the default 1818 :meth:`fromutc` implementation without problems. It's strong enough to handle 1819 fixed-offset time zones, and time zones accounting for both standard and 1820 daylight time, and the latter even if the DST transition times differ in 1821 different years. An example of a time zone the default :meth:`fromutc` 1822 implementation may not handle correctly in all cases is one where the standard 1823 offset (from UTC) depends on the specific date and time passed, which can happen 1824 for political reasons. The default implementations of :meth:`astimezone` and 1825 :meth:`fromutc` may not produce the result you want if the result is one of the 1826 hours straddling the moment the standard offset changes. 1827 1828 Skipping code for error cases, the default :meth:`fromutc` implementation acts 1829 like:: 1830 1831 def fromutc(self, dt): 1832 # raise ValueError error if dt.tzinfo is not self 1833 dtoff = dt.utcoffset() 1834 dtdst = dt.dst() 1835 # raise ValueError if dtoff is None or dtdst is None 1836 delta = dtoff - dtdst # this is self's standard offset 1837 if delta: 1838 dt += delta # convert to standard local time 1839 dtdst = dt.dst() 1840 # raise ValueError if dtdst is None 1841 if dtdst: 1842 return dt + dtdst 1843 else: 1844 return dt 1845 1846In the following :download:`tzinfo_examples.py 1847<../includes/tzinfo_examples.py>` file there are some examples of 1848:class:`tzinfo` classes: 1849 1850.. literalinclude:: ../includes/tzinfo_examples.py 1851 1852Note that there are unavoidable subtleties twice per year in a :class:`tzinfo` 1853subclass accounting for both standard and daylight time, at the DST transition 1854points. For concreteness, consider US Eastern (UTC -0500), where EDT begins the 1855minute after 1:59 (EST) on the second Sunday in March, and ends the minute after 18561:59 (EDT) on the first Sunday in November:: 1857 1858 UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM 1859 EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM 1860 EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM 1861 1862 start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM 1863 1864 end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM 1865 1866When DST starts (the "start" line), the local wall clock leaps from 1:59 to 18673:00. A wall time of the form 2:MM doesn't really make sense on that day, so 1868``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST 1869begins. For example, at the Spring forward transition of 2016, we get 1870 1871 >>> from datetime import datetime, timezone 1872 >>> from tzinfo_examples import HOUR, Eastern 1873 >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc) 1874 >>> for i in range(4): 1875 ... u = u0 + i*HOUR 1876 ... t = u.astimezone(Eastern) 1877 ... print(u.time(), 'UTC =', t.time(), t.tzname()) 1878 ... 1879 05:00:00 UTC = 00:00:00 EST 1880 06:00:00 UTC = 01:00:00 EST 1881 07:00:00 UTC = 03:00:00 EDT 1882 08:00:00 UTC = 04:00:00 EDT 1883 1884 1885When DST ends (the "end" line), there's a potentially worse problem: there's an 1886hour that can't be spelled unambiguously in local wall time: the last hour of 1887daylight time. In Eastern, that's times of the form 5:MM UTC on the day 1888daylight time ends. The local wall clock leaps from 1:59 (daylight time) back 1889to 1:00 (standard time) again. Local times of the form 1:MM are ambiguous. 1890:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC 1891hours into the same local hour then. In the Eastern example, UTC times of the 1892form 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times 1893have the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1. 1894For example, at the Fall back transition of 2016, we get 1895 1896 >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc) 1897 >>> for i in range(4): 1898 ... u = u0 + i*HOUR 1899 ... t = u.astimezone(Eastern) 1900 ... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold) 1901 ... 1902 04:00:00 UTC = 00:00:00 EDT 0 1903 05:00:00 UTC = 01:00:00 EDT 0 1904 06:00:00 UTC = 01:00:00 EST 1 1905 07:00:00 UTC = 02:00:00 EST 0 1906 1907Note that the :class:`datetime` instances that differ only by the value of the 1908:attr:`~datetime.fold` attribute are considered equal in comparisons. 1909 1910Applications that can't bear wall-time ambiguities should explicitly check the 1911value of the :attr:`~datetime.fold` attribute or avoid using hybrid 1912:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`, 1913or any other fixed-offset :class:`tzinfo` subclass (such as a class representing 1914only EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)). 1915 1916.. seealso:: 1917 1918 `dateutil.tz <https://dateutil.readthedocs.io/en/stable/tz.html>`_ 1919 The standard library has :class:`timezone` class for handling arbitrary 1920 fixed offsets from UTC and :attr:`timezone.utc` as UTC timezone instance. 1921 1922 *dateutil.tz* library brings the *IANA timezone database* (also known as the 1923 Olson database) to Python and its usage is recommended. 1924 1925 `IANA timezone database <https://www.iana.org/time-zones>`_ 1926 The Time Zone Database (often called tz, tzdata or zoneinfo) contains code and 1927 data that represent the history of local time for many representative 1928 locations around the globe. It is updated periodically to reflect changes 1929 made by political bodies to time zone boundaries, UTC offsets, and 1930 daylight-saving rules. 1931 1932 1933.. _datetime-timezone: 1934 1935:class:`timezone` Objects 1936-------------------------- 1937 1938The :class:`timezone` class is a subclass of :class:`tzinfo`, each 1939instance of which represents a timezone defined by a fixed offset from 1940UTC. Note that objects of this class cannot be used to represent 1941timezone information in the locations where different offsets are used 1942in different days of the year or where historical changes have been 1943made to civil time. 1944 1945 1946.. class:: timezone(offset, name=None) 1947 1948 The *offset* argument must be specified as a :class:`timedelta` 1949 object representing the difference between the local time and UTC. It must 1950 be strictly between ``-timedelta(hours=24)`` and 1951 ``timedelta(hours=24)``, otherwise :exc:`ValueError` is raised. 1952 1953 The *name* argument is optional. If specified it must be a string that 1954 will be used as the value returned by the :meth:`datetime.tzname` method. 1955 1956 .. versionadded:: 3.2 1957 1958 .. versionchanged:: 3.7 1959 The UTC offset is not restricted to a whole number of minutes. 1960 1961 1962.. method:: timezone.utcoffset(dt) 1963 1964 Return the fixed value specified when the :class:`timezone` instance is 1965 constructed. The *dt* argument is ignored. The return value is a 1966 :class:`timedelta` instance equal to the difference between the 1967 local time and UTC. 1968 1969 .. versionchanged:: 3.7 1970 The UTC offset is not restricted to a whole number of minutes. 1971 1972.. method:: timezone.tzname(dt) 1973 1974 Return the fixed value specified when the :class:`timezone` instance 1975 is constructed. If *name* is not provided in the constructor, the 1976 name returned by ``tzname(dt)`` is generated from the value of the 1977 ``offset`` as follows. If *offset* is ``timedelta(0)``, the name 1978 is "UTC", otherwise it is a string 'UTC±HH:MM', where ± is the sign 1979 of ``offset``, HH and MM are two digits of ``offset.hours`` and 1980 ``offset.minutes`` respectively. 1981 1982 .. versionchanged:: 3.6 1983 Name generated from ``offset=timedelta(0)`` is now plain 'UTC', not 1984 'UTC+00:00'. 1985 1986 1987.. method:: timezone.dst(dt) 1988 1989 Always returns ``None``. 1990 1991.. method:: timezone.fromutc(dt) 1992 1993 Return ``dt + offset``. The *dt* argument must be an aware 1994 :class:`.datetime` instance, with ``tzinfo`` set to ``self``. 1995 1996Class attributes: 1997 1998.. attribute:: timezone.utc 1999 2000 The UTC timezone, ``timezone(timedelta(0))``. 2001 2002 2003.. index:: 2004 single: % (percent); datetime format 2005 2006.. _strftime-strptime-behavior: 2007 2008:meth:`strftime` and :meth:`strptime` Behavior 2009---------------------------------------------- 2010 2011:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a 2012``strftime(format)`` method, to create a string representing the time under the 2013control of an explicit format string. Broadly speaking, ``d.strftime(fmt)`` 2014acts like the :mod:`time` module's ``time.strftime(fmt, d.timetuple())`` 2015although not all objects support a :meth:`timetuple` method. 2016 2017Conversely, the :meth:`datetime.strptime` class method creates a 2018:class:`.datetime` object from a string representing a date and time and a 2019corresponding format string. ``datetime.strptime(date_string, format)`` is 2020equivalent to ``datetime(*(time.strptime(date_string, format)[0:6]))``, except 2021when the format includes sub-second components or timezone offset information, 2022which are supported in ``datetime.strptime`` but are discarded by ``time.strptime``. 2023 2024For :class:`.time` objects, the format codes for year, month, and day should not 2025be used, as time objects have no such values. If they're used anyway, ``1900`` 2026is substituted for the year, and ``1`` for the month and day. 2027 2028For :class:`date` objects, the format codes for hours, minutes, seconds, and 2029microseconds should not be used, as :class:`date` objects have no such 2030values. If they're used anyway, ``0`` is substituted for them. 2031 2032The full set of format codes supported varies across platforms, because Python 2033calls the platform C library's :func:`strftime` function, and platform 2034variations are common. To see the full set of format codes supported on your 2035platform, consult the :manpage:`strftime(3)` documentation. 2036 2037For the same reason, handling of format strings containing Unicode code points 2038that can't be represented in the charset of the current locale is also 2039platform-dependent. On some platforms such code points are preserved intact in 2040the output, while on others ``strftime`` may raise :exc:`UnicodeError` or return 2041an empty string instead. 2042 2043The following is a list of all the format codes that the C standard (1989 2044version) requires, and these work on all platforms with a standard C 2045implementation. Note that the 1999 version of the C standard added additional 2046format codes. 2047 2048+-----------+--------------------------------+------------------------+-------+ 2049| Directive | Meaning | Example | Notes | 2050+===========+================================+========================+=======+ 2051| ``%a`` | Weekday as locale's || Sun, Mon, ..., Sat | \(1) | 2052| | abbreviated name. | (en_US); | | 2053| | || So, Mo, ..., Sa | | 2054| | | (de_DE) | | 2055+-----------+--------------------------------+------------------------+-------+ 2056| ``%A`` | Weekday as locale's full name. || Sunday, Monday, ..., | \(1) | 2057| | | Saturday (en_US); | | 2058| | || Sonntag, Montag, ..., | | 2059| | | Samstag (de_DE) | | 2060+-----------+--------------------------------+------------------------+-------+ 2061| ``%w`` | Weekday as a decimal number, | 0, 1, ..., 6 | | 2062| | where 0 is Sunday and 6 is | | | 2063| | Saturday. | | | 2064+-----------+--------------------------------+------------------------+-------+ 2065| ``%d`` | Day of the month as a | 01, 02, ..., 31 | | 2066| | zero-padded decimal number. | | | 2067+-----------+--------------------------------+------------------------+-------+ 2068| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) | 2069| | name. | (en_US); | | 2070| | || Jan, Feb, ..., Dez | | 2071| | | (de_DE) | | 2072+-----------+--------------------------------+------------------------+-------+ 2073| ``%B`` | Month as locale's full name. || January, February, | \(1) | 2074| | | ..., December (en_US);| | 2075| | || Januar, Februar, ..., | | 2076| | | Dezember (de_DE) | | 2077+-----------+--------------------------------+------------------------+-------+ 2078| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | | 2079| | decimal number. | | | 2080+-----------+--------------------------------+------------------------+-------+ 2081| ``%y`` | Year without century as a | 00, 01, ..., 99 | | 2082| | zero-padded decimal number. | | | 2083+-----------+--------------------------------+------------------------+-------+ 2084| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) | 2085| | number. | 2014, ..., 9998, 9999 | | 2086+-----------+--------------------------------+------------------------+-------+ 2087| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | | 2088| | zero-padded decimal number. | | | 2089+-----------+--------------------------------+------------------------+-------+ 2090| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | | 2091| | zero-padded decimal number. | | | 2092+-----------+--------------------------------+------------------------+-------+ 2093| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), | 2094| | AM or PM. || am, pm (de_DE) | \(3) | 2095+-----------+--------------------------------+------------------------+-------+ 2096| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | | 2097| | decimal number. | | | 2098+-----------+--------------------------------+------------------------+-------+ 2099| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4) | 2100| | decimal number. | | | 2101+-----------+--------------------------------+------------------------+-------+ 2102| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) | 2103| | number, zero-padded on the | 999999 | | 2104| | left. | | | 2105+-----------+--------------------------------+------------------------+-------+ 2106| ``%z`` | UTC offset in the form | (empty), +0000, | \(6) | 2107| | ±HHMM[SS[.ffffff]] (empty | -0400, +1030, | | 2108| | string if the object is | +063415, | | 2109| | naive). | -030712.345216 | | 2110+-----------+--------------------------------+------------------------+-------+ 2111| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | | 2112| | if the object is naive). | | | 2113+-----------+--------------------------------+------------------------+-------+ 2114| ``%j`` | Day of the year as a | 001, 002, ..., 366 | | 2115| | zero-padded decimal number. | | | 2116+-----------+--------------------------------+------------------------+-------+ 2117| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7) | 2118| | (Sunday as the first day of | | | 2119| | the week) as a zero padded | | | 2120| | decimal number. All days in a | | | 2121| | new year preceding the first | | | 2122| | Sunday are considered to be in | | | 2123| | week 0. | | | 2124+-----------+--------------------------------+------------------------+-------+ 2125| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7) | 2126| | (Monday as the first day of | | | 2127| | the week) as a decimal number. | | | 2128| | All days in a new year | | | 2129| | preceding the first Monday | | | 2130| | are considered to be in | | | 2131| | week 0. | | | 2132+-----------+--------------------------------+------------------------+-------+ 2133| ``%c`` | Locale's appropriate date and || Tue Aug 16 21:30:00 | \(1) | 2134| | time representation. | 1988 (en_US); | | 2135| | || Di 16 Aug 21:30:00 | | 2136| | | 1988 (de_DE) | | 2137+-----------+--------------------------------+------------------------+-------+ 2138| ``%x`` | Locale's appropriate date || 08/16/88 (None); | \(1) | 2139| | representation. || 08/16/1988 (en_US); | | 2140| | || 16.08.1988 (de_DE) | | 2141+-----------+--------------------------------+------------------------+-------+ 2142| ``%X`` | Locale's appropriate time || 21:30:00 (en_US); | \(1) | 2143| | representation. || 21:30:00 (de_DE) | | 2144+-----------+--------------------------------+------------------------+-------+ 2145| ``%%`` | A literal ``'%'`` character. | % | | 2146+-----------+--------------------------------+------------------------+-------+ 2147 2148Several additional directives not required by the C89 standard are included for 2149convenience. These parameters all correspond to ISO 8601 date values. These 2150may not be available on all platforms when used with the :meth:`strftime` 2151method. The ISO 8601 year and ISO 8601 week directives are not interchangeable 2152with the year and week number directives above. Calling :meth:`strptime` with 2153incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`. 2154 2155+-----------+--------------------------------+------------------------+-------+ 2156| Directive | Meaning | Example | Notes | 2157+===========+================================+========================+=======+ 2158| ``%G`` | ISO 8601 year with century | 0001, 0002, ..., 2013, | \(8) | 2159| | representing the year that | 2014, ..., 9998, 9999 | | 2160| | contains the greater part of | | | 2161| | the ISO week (``%V``). | | | 2162+-----------+--------------------------------+------------------------+-------+ 2163| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | | 2164| | number where 1 is Monday. | | | 2165+-----------+--------------------------------+------------------------+-------+ 2166| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8) | 2167| | number with Monday as | | | 2168| | the first day of the week. | | | 2169| | Week 01 is the week containing | | | 2170| | Jan 4. | | | 2171+-----------+--------------------------------+------------------------+-------+ 2172 2173.. versionadded:: 3.6 2174 ``%G``, ``%u`` and ``%V`` were added. 2175 2176Notes: 2177 2178(1) 2179 Because the format depends on the current locale, care should be taken when 2180 making assumptions about the output value. Field orderings will vary (for 2181 example, "month/day/year" versus "day/month/year"), and the output may 2182 contain Unicode characters encoded using the locale's default encoding (for 2183 example, if the current locale is ``ja_JP``, the default encoding could be 2184 any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale` 2185 to determine the current locale's encoding). 2186 2187(2) 2188 The :meth:`strptime` method can parse years in the full [1, 9999] range, but 2189 years < 1000 must be zero-filled to 4-digit width. 2190 2191 .. versionchanged:: 3.2 2192 In previous versions, :meth:`strftime` method was restricted to 2193 years >= 1900. 2194 2195 .. versionchanged:: 3.3 2196 In version 3.2, :meth:`strftime` method was restricted to 2197 years >= 1000. 2198 2199(3) 2200 When used with the :meth:`strptime` method, the ``%p`` directive only affects 2201 the output hour field if the ``%I`` directive is used to parse the hour. 2202 2203(4) 2204 Unlike the :mod:`time` module, the :mod:`datetime` module does not support 2205 leap seconds. 2206 2207(5) 2208 When used with the :meth:`strptime` method, the ``%f`` directive 2209 accepts from one to six digits and zero pads on the right. ``%f`` is 2210 an extension to the set of format characters in the C standard (but 2211 implemented separately in datetime objects, and therefore always 2212 available). 2213 2214(6) 2215 For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty 2216 strings. 2217 2218 For an aware object: 2219 2220 ``%z`` 2221 :meth:`utcoffset` is transformed into a string of the form 2222 ±HHMM[SS[.ffffff]], where HH is a 2-digit string giving the number of UTC 2223 offset hours, MM is a 2-digit string giving the number of UTC offset 2224 minutes, SS is a 2-digit string giving the number of UTC offset 2225 seconds and ffffff is a 6-digit string giving the number of UTC 2226 offset microseconds. The ffffff part is omitted when the offset is a 2227 whole number of seconds and both the ffffff and the SS part is omitted 2228 when the offset is a whole number of minutes. For example, if 2229 :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is 2230 replaced with the string ``'-0330'``. 2231 2232 .. versionchanged:: 3.7 2233 The UTC offset is not restricted to a whole number of minutes. 2234 2235 .. versionchanged:: 3.7 2236 When the ``%z`` directive is provided to the :meth:`strptime` method, 2237 the UTC offsets can have a colon as a separator between hours, minutes 2238 and seconds. 2239 For example, ``'+01:00:00'`` will be parsed as an offset of one hour. 2240 In addition, providing ``'Z'`` is identical to ``'+00:00'``. 2241 2242 ``%Z`` 2243 If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty 2244 string. Otherwise ``%Z`` is replaced by the returned value, which must 2245 be a string. 2246 2247 .. versionchanged:: 3.2 2248 When the ``%z`` directive is provided to the :meth:`strptime` method, an 2249 aware :class:`.datetime` object will be produced. The ``tzinfo`` of the 2250 result will be set to a :class:`timezone` instance. 2251 2252(7) 2253 When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used 2254 in calculations when the day of the week and the calendar year (``%Y``) 2255 are specified. 2256 2257(8) 2258 Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the 2259 day of the week and the ISO year (``%G``) are specified in a 2260 :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not 2261 interchangeable. 2262 2263.. rubric:: Footnotes 2264 2265.. [#] If, that is, we ignore the effects of Relativity 2266