17db96d56Sopenharmony_ci:mod:`datetime` --- Basic date and time types 27db96d56Sopenharmony_ci============================================= 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: datetime 57db96d56Sopenharmony_ci :synopsis: Basic date and time types. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: Tim Peters <tim@zope.com> 87db96d56Sopenharmony_ci.. sectionauthor:: Tim Peters <tim@zope.com> 97db96d56Sopenharmony_ci.. sectionauthor:: A.M. Kuchling <amk@amk.ca> 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci**Source code:** :source:`Lib/datetime.py` 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci-------------- 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci.. XXX what order should the types be discussed in? 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ciThe :mod:`datetime` module supplies classes for manipulating dates and times. 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ciWhile date and time arithmetic is supported, the focus of the implementation is 207db96d56Sopenharmony_cion efficient attribute extraction for output formatting and manipulation. 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci.. seealso:: 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci Module :mod:`calendar` 257db96d56Sopenharmony_ci General calendar related functions. 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci Module :mod:`time` 287db96d56Sopenharmony_ci Time access and conversions. 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci Module :mod:`zoneinfo` 317db96d56Sopenharmony_ci Concrete time zones representing the IANA time zone database. 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ci Package `dateutil <https://dateutil.readthedocs.io/en/stable/>`_ 347db96d56Sopenharmony_ci Third-party library with expanded time zone and parsing support. 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci.. _datetime-naive-aware: 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ciAware and Naive Objects 397db96d56Sopenharmony_ci----------------------- 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ciDate and time objects may be categorized as "aware" or "naive" depending on 427db96d56Sopenharmony_ciwhether or not they include timezone information. 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ciWith sufficient knowledge of applicable algorithmic and political time 457db96d56Sopenharmony_ciadjustments, such as time zone and daylight saving time information, 467db96d56Sopenharmony_cian **aware** object can locate itself relative to other aware objects. 477db96d56Sopenharmony_ciAn aware object represents a specific moment in time that is not open to 487db96d56Sopenharmony_ciinterpretation. [#]_ 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ciA **naive** object does not contain enough information to unambiguously locate 517db96d56Sopenharmony_ciitself relative to other date/time objects. Whether a naive object represents 527db96d56Sopenharmony_ciCoordinated Universal Time (UTC), local time, or time in some other timezone is 537db96d56Sopenharmony_cipurely up to the program, just like it is up to the program whether a 547db96d56Sopenharmony_ciparticular number represents metres, miles, or mass. Naive objects are easy to 557db96d56Sopenharmony_ciunderstand and to work with, at the cost of ignoring some aspects of reality. 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ciFor applications requiring aware objects, :class:`.datetime` and :class:`.time` 587db96d56Sopenharmony_ciobjects have an optional time zone information attribute, :attr:`!tzinfo`, that 597db96d56Sopenharmony_cican be set to an instance of a subclass of the abstract :class:`tzinfo` class. 607db96d56Sopenharmony_ciThese :class:`tzinfo` objects capture information about the offset from UTC 617db96d56Sopenharmony_citime, the time zone name, and whether daylight saving time is in effect. 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ciOnly one concrete :class:`tzinfo` class, the :class:`timezone` class, is 647db96d56Sopenharmony_cisupplied by the :mod:`datetime` module. The :class:`timezone` class can 657db96d56Sopenharmony_cirepresent simple timezones with fixed offsets from UTC, such as UTC itself or 667db96d56Sopenharmony_ciNorth American EST and EDT timezones. Supporting timezones at deeper levels of 677db96d56Sopenharmony_cidetail is up to the application. The rules for time adjustment across the 687db96d56Sopenharmony_ciworld are more political than rational, change frequently, and there is no 697db96d56Sopenharmony_cistandard suitable for every application aside from UTC. 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ciConstants 727db96d56Sopenharmony_ci--------- 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ciThe :mod:`datetime` module exports the following constants: 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci.. data:: MINYEAR 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci The smallest year number allowed in a :class:`date` or :class:`.datetime` object. 797db96d56Sopenharmony_ci :const:`MINYEAR` is ``1``. 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_ci.. data:: MAXYEAR 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ci The largest year number allowed in a :class:`date` or :class:`.datetime` object. 857db96d56Sopenharmony_ci :const:`MAXYEAR` is ``9999``. 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci.. attribute:: UTC 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci Alias for the UTC timezone singleton :attr:`datetime.timezone.utc`. 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci .. versionadded:: 3.11 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ciAvailable Types 947db96d56Sopenharmony_ci--------------- 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci.. class:: date 977db96d56Sopenharmony_ci :noindex: 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci An idealized naive date, assuming the current Gregorian calendar always was, and 1007db96d56Sopenharmony_ci always will be, in effect. Attributes: :attr:`year`, :attr:`month`, and 1017db96d56Sopenharmony_ci :attr:`day`. 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci 1047db96d56Sopenharmony_ci.. class:: time 1057db96d56Sopenharmony_ci :noindex: 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci An idealized time, independent of any particular day, assuming that every day 1087db96d56Sopenharmony_ci has exactly 24\*60\*60 seconds. (There is no notion of "leap seconds" here.) 1097db96d56Sopenharmony_ci Attributes: :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`, 1107db96d56Sopenharmony_ci and :attr:`.tzinfo`. 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci.. class:: datetime 1147db96d56Sopenharmony_ci :noindex: 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci A combination of a date and a time. Attributes: :attr:`year`, :attr:`month`, 1177db96d56Sopenharmony_ci :attr:`day`, :attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond`, 1187db96d56Sopenharmony_ci and :attr:`.tzinfo`. 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ci 1217db96d56Sopenharmony_ci.. class:: timedelta 1227db96d56Sopenharmony_ci :noindex: 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci A duration expressing the difference between two :class:`date`, :class:`.time`, 1257db96d56Sopenharmony_ci or :class:`.datetime` instances to microsecond resolution. 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci.. class:: tzinfo 1297db96d56Sopenharmony_ci :noindex: 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci An abstract base class for time zone information objects. These are used by the 1327db96d56Sopenharmony_ci :class:`.datetime` and :class:`.time` classes to provide a customizable notion of 1337db96d56Sopenharmony_ci time adjustment (for example, to account for time zone and/or daylight saving 1347db96d56Sopenharmony_ci time). 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ci.. class:: timezone 1377db96d56Sopenharmony_ci :noindex: 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ci A class that implements the :class:`tzinfo` abstract base class as a 1407db96d56Sopenharmony_ci fixed offset from the UTC. 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci .. versionadded:: 3.2 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ciObjects of these types are immutable. 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ciSubclass relationships:: 1477db96d56Sopenharmony_ci 1487db96d56Sopenharmony_ci object 1497db96d56Sopenharmony_ci timedelta 1507db96d56Sopenharmony_ci tzinfo 1517db96d56Sopenharmony_ci timezone 1527db96d56Sopenharmony_ci time 1537db96d56Sopenharmony_ci date 1547db96d56Sopenharmony_ci datetime 1557db96d56Sopenharmony_ci 1567db96d56Sopenharmony_ciCommon Properties 1577db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^ 1587db96d56Sopenharmony_ci 1597db96d56Sopenharmony_ciThe :class:`date`, :class:`.datetime`, :class:`.time`, and :class:`timezone` types 1607db96d56Sopenharmony_cishare these common features: 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci- Objects of these types are immutable. 1637db96d56Sopenharmony_ci- Objects of these types are :term:`hashable`, meaning that they can be used as 1647db96d56Sopenharmony_ci dictionary keys. 1657db96d56Sopenharmony_ci- Objects of these types support efficient pickling via the :mod:`pickle` module. 1667db96d56Sopenharmony_ci 1677db96d56Sopenharmony_ciDetermining if an Object is Aware or Naive 1687db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1697db96d56Sopenharmony_ci 1707db96d56Sopenharmony_ciObjects of the :class:`date` type are always naive. 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ciAn object of type :class:`.time` or :class:`.datetime` may be aware or naive. 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ciA :class:`.datetime` object *d* is aware if both of the following hold: 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci1. ``d.tzinfo`` is not ``None`` 1777db96d56Sopenharmony_ci2. ``d.tzinfo.utcoffset(d)`` does not return ``None`` 1787db96d56Sopenharmony_ci 1797db96d56Sopenharmony_ciOtherwise, *d* is naive. 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ciA :class:`.time` object *t* is aware if both of the following hold: 1827db96d56Sopenharmony_ci 1837db96d56Sopenharmony_ci1. ``t.tzinfo`` is not ``None`` 1847db96d56Sopenharmony_ci2. ``t.tzinfo.utcoffset(None)`` does not return ``None``. 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ciOtherwise, *t* is naive. 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ciThe distinction between aware and naive doesn't apply to :class:`timedelta` 1897db96d56Sopenharmony_ciobjects. 1907db96d56Sopenharmony_ci 1917db96d56Sopenharmony_ci.. _datetime-timedelta: 1927db96d56Sopenharmony_ci 1937db96d56Sopenharmony_ci:class:`timedelta` Objects 1947db96d56Sopenharmony_ci-------------------------- 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ciA :class:`timedelta` object represents a duration, the difference between two 1977db96d56Sopenharmony_cidates or times. 1987db96d56Sopenharmony_ci 1997db96d56Sopenharmony_ci.. class:: timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci All arguments are optional and default to ``0``. Arguments may be integers 2027db96d56Sopenharmony_ci or floats, and may be positive or negative. 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci Only *days*, *seconds* and *microseconds* are stored internally. 2057db96d56Sopenharmony_ci Arguments are converted to those units: 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci * A millisecond is converted to 1000 microseconds. 2087db96d56Sopenharmony_ci * A minute is converted to 60 seconds. 2097db96d56Sopenharmony_ci * An hour is converted to 3600 seconds. 2107db96d56Sopenharmony_ci * A week is converted to 7 days. 2117db96d56Sopenharmony_ci 2127db96d56Sopenharmony_ci and days, seconds and microseconds are then normalized so that the 2137db96d56Sopenharmony_ci representation is unique, with 2147db96d56Sopenharmony_ci 2157db96d56Sopenharmony_ci * ``0 <= microseconds < 1000000`` 2167db96d56Sopenharmony_ci * ``0 <= seconds < 3600*24`` (the number of seconds in one day) 2177db96d56Sopenharmony_ci * ``-999999999 <= days <= 999999999`` 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci The following example illustrates how any arguments besides 2207db96d56Sopenharmony_ci *days*, *seconds* and *microseconds* are "merged" and normalized into those 2217db96d56Sopenharmony_ci three resulting attributes:: 2227db96d56Sopenharmony_ci 2237db96d56Sopenharmony_ci >>> from datetime import timedelta 2247db96d56Sopenharmony_ci >>> delta = timedelta( 2257db96d56Sopenharmony_ci ... days=50, 2267db96d56Sopenharmony_ci ... seconds=27, 2277db96d56Sopenharmony_ci ... microseconds=10, 2287db96d56Sopenharmony_ci ... milliseconds=29000, 2297db96d56Sopenharmony_ci ... minutes=5, 2307db96d56Sopenharmony_ci ... hours=8, 2317db96d56Sopenharmony_ci ... weeks=2 2327db96d56Sopenharmony_ci ... ) 2337db96d56Sopenharmony_ci >>> # Only days, seconds, and microseconds remain 2347db96d56Sopenharmony_ci >>> delta 2357db96d56Sopenharmony_ci datetime.timedelta(days=64, seconds=29156, microseconds=10) 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci If any argument is a float and there are fractional microseconds, 2387db96d56Sopenharmony_ci the fractional microseconds left over from all arguments are 2397db96d56Sopenharmony_ci combined and their sum is rounded to the nearest microsecond using 2407db96d56Sopenharmony_ci round-half-to-even tiebreaker. If no argument is a float, the 2417db96d56Sopenharmony_ci conversion and normalization processes are exact (no information is 2427db96d56Sopenharmony_ci lost). 2437db96d56Sopenharmony_ci 2447db96d56Sopenharmony_ci If the normalized value of days lies outside the indicated range, 2457db96d56Sopenharmony_ci :exc:`OverflowError` is raised. 2467db96d56Sopenharmony_ci 2477db96d56Sopenharmony_ci Note that normalization of negative values may be surprising at first. For 2487db96d56Sopenharmony_ci example:: 2497db96d56Sopenharmony_ci 2507db96d56Sopenharmony_ci >>> from datetime import timedelta 2517db96d56Sopenharmony_ci >>> d = timedelta(microseconds=-1) 2527db96d56Sopenharmony_ci >>> (d.days, d.seconds, d.microseconds) 2537db96d56Sopenharmony_ci (-1, 86399, 999999) 2547db96d56Sopenharmony_ci 2557db96d56Sopenharmony_ci 2567db96d56Sopenharmony_ciClass attributes: 2577db96d56Sopenharmony_ci 2587db96d56Sopenharmony_ci.. attribute:: timedelta.min 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci The most negative :class:`timedelta` object, ``timedelta(-999999999)``. 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ci 2637db96d56Sopenharmony_ci.. attribute:: timedelta.max 2647db96d56Sopenharmony_ci 2657db96d56Sopenharmony_ci The most positive :class:`timedelta` object, ``timedelta(days=999999999, 2667db96d56Sopenharmony_ci hours=23, minutes=59, seconds=59, microseconds=999999)``. 2677db96d56Sopenharmony_ci 2687db96d56Sopenharmony_ci 2697db96d56Sopenharmony_ci.. attribute:: timedelta.resolution 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ci The smallest possible difference between non-equal :class:`timedelta` objects, 2727db96d56Sopenharmony_ci ``timedelta(microseconds=1)``. 2737db96d56Sopenharmony_ci 2747db96d56Sopenharmony_ciNote that, because of normalization, ``timedelta.max`` > ``-timedelta.min``. 2757db96d56Sopenharmony_ci``-timedelta.max`` is not representable as a :class:`timedelta` object. 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ciInstance attributes (read-only): 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci+------------------+--------------------------------------------+ 2807db96d56Sopenharmony_ci| Attribute | Value | 2817db96d56Sopenharmony_ci+==================+============================================+ 2827db96d56Sopenharmony_ci| ``days`` | Between -999999999 and 999999999 inclusive | 2837db96d56Sopenharmony_ci+------------------+--------------------------------------------+ 2847db96d56Sopenharmony_ci| ``seconds`` | Between 0 and 86399 inclusive | 2857db96d56Sopenharmony_ci+------------------+--------------------------------------------+ 2867db96d56Sopenharmony_ci| ``microseconds`` | Between 0 and 999999 inclusive | 2877db96d56Sopenharmony_ci+------------------+--------------------------------------------+ 2887db96d56Sopenharmony_ci 2897db96d56Sopenharmony_ciSupported operations: 2907db96d56Sopenharmony_ci 2917db96d56Sopenharmony_ci.. XXX this table is too wide! 2927db96d56Sopenharmony_ci 2937db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 2947db96d56Sopenharmony_ci| Operation | Result | 2957db96d56Sopenharmony_ci+================================+===============================================+ 2967db96d56Sopenharmony_ci| ``t1 = t2 + t3`` | Sum of *t2* and *t3*. Afterwards *t1*-*t2* == | 2977db96d56Sopenharmony_ci| | *t3* and *t1*-*t3* == *t2* are true. (1) | 2987db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 2997db96d56Sopenharmony_ci| ``t1 = t2 - t3`` | Difference of *t2* and *t3*. Afterwards *t1* | 3007db96d56Sopenharmony_ci| | == *t2* - *t3* and *t2* == *t1* + *t3* are | 3017db96d56Sopenharmony_ci| | true. (1)(6) | 3027db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3037db96d56Sopenharmony_ci| ``t1 = t2 * i or t1 = i * t2`` | Delta multiplied by an integer. | 3047db96d56Sopenharmony_ci| | Afterwards *t1* // i == *t2* is true, | 3057db96d56Sopenharmony_ci| | provided ``i != 0``. | 3067db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3077db96d56Sopenharmony_ci| | In general, *t1* \* i == *t1* \* (i-1) + *t1* | 3087db96d56Sopenharmony_ci| | is true. (1) | 3097db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3107db96d56Sopenharmony_ci| ``t1 = t2 * f or t1 = f * t2`` | Delta multiplied by a float. The result is | 3117db96d56Sopenharmony_ci| | rounded to the nearest multiple of | 3127db96d56Sopenharmony_ci| | timedelta.resolution using round-half-to-even.| 3137db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3147db96d56Sopenharmony_ci| ``f = t2 / t3`` | Division (3) of overall duration *t2* by | 3157db96d56Sopenharmony_ci| | interval unit *t3*. Returns a :class:`float` | 3167db96d56Sopenharmony_ci| | object. | 3177db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3187db96d56Sopenharmony_ci| ``t1 = t2 / f or t1 = t2 / i`` | Delta divided by a float or an int. The result| 3197db96d56Sopenharmony_ci| | is rounded to the nearest multiple of | 3207db96d56Sopenharmony_ci| | timedelta.resolution using round-half-to-even.| 3217db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3227db96d56Sopenharmony_ci| ``t1 = t2 // i`` or | The floor is computed and the remainder (if | 3237db96d56Sopenharmony_ci| ``t1 = t2 // t3`` | any) is thrown away. In the second case, an | 3247db96d56Sopenharmony_ci| | integer is returned. (3) | 3257db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3267db96d56Sopenharmony_ci| ``t1 = t2 % t3`` | The remainder is computed as a | 3277db96d56Sopenharmony_ci| | :class:`timedelta` object. (3) | 3287db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3297db96d56Sopenharmony_ci| ``q, r = divmod(t1, t2)`` | Computes the quotient and the remainder: | 3307db96d56Sopenharmony_ci| | ``q = t1 // t2`` (3) and ``r = t1 % t2``. | 3317db96d56Sopenharmony_ci| | q is an integer and r is a :class:`timedelta` | 3327db96d56Sopenharmony_ci| | object. | 3337db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3347db96d56Sopenharmony_ci| ``+t1`` | Returns a :class:`timedelta` object with the | 3357db96d56Sopenharmony_ci| | same value. (2) | 3367db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3377db96d56Sopenharmony_ci| ``-t1`` | equivalent to | 3387db96d56Sopenharmony_ci| | :class:`timedelta`\ (-*t1.days*, | 3397db96d56Sopenharmony_ci| | -*t1.seconds*, -*t1.microseconds*), | 3407db96d56Sopenharmony_ci| | and to *t1*\* -1. (1)(4) | 3417db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3427db96d56Sopenharmony_ci| ``abs(t)`` | equivalent to +\ *t* when ``t.days >= 0``, | 3437db96d56Sopenharmony_ci| | and to -*t* when ``t.days < 0``. (2) | 3447db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3457db96d56Sopenharmony_ci| ``str(t)`` | Returns a string in the form | 3467db96d56Sopenharmony_ci| | ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D | 3477db96d56Sopenharmony_ci| | is negative for negative ``t``. (5) | 3487db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3497db96d56Sopenharmony_ci| ``repr(t)`` | Returns a string representation of the | 3507db96d56Sopenharmony_ci| | :class:`timedelta` object as a constructor | 3517db96d56Sopenharmony_ci| | call with canonical attribute values. | 3527db96d56Sopenharmony_ci+--------------------------------+-----------------------------------------------+ 3537db96d56Sopenharmony_ci 3547db96d56Sopenharmony_ci 3557db96d56Sopenharmony_ciNotes: 3567db96d56Sopenharmony_ci 3577db96d56Sopenharmony_ci(1) 3587db96d56Sopenharmony_ci This is exact but may overflow. 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ci(2) 3617db96d56Sopenharmony_ci This is exact and cannot overflow. 3627db96d56Sopenharmony_ci 3637db96d56Sopenharmony_ci(3) 3647db96d56Sopenharmony_ci Division by 0 raises :exc:`ZeroDivisionError`. 3657db96d56Sopenharmony_ci 3667db96d56Sopenharmony_ci(4) 3677db96d56Sopenharmony_ci -*timedelta.max* is not representable as a :class:`timedelta` object. 3687db96d56Sopenharmony_ci 3697db96d56Sopenharmony_ci(5) 3707db96d56Sopenharmony_ci String representations of :class:`timedelta` objects are normalized 3717db96d56Sopenharmony_ci similarly to their internal representation. This leads to somewhat 3727db96d56Sopenharmony_ci unusual results for negative timedeltas. For example:: 3737db96d56Sopenharmony_ci 3747db96d56Sopenharmony_ci >>> timedelta(hours=-5) 3757db96d56Sopenharmony_ci datetime.timedelta(days=-1, seconds=68400) 3767db96d56Sopenharmony_ci >>> print(_) 3777db96d56Sopenharmony_ci -1 day, 19:00:00 3787db96d56Sopenharmony_ci 3797db96d56Sopenharmony_ci(6) 3807db96d56Sopenharmony_ci The expression ``t2 - t3`` will always be equal to the expression ``t2 + (-t3)`` except 3817db96d56Sopenharmony_ci when t3 is equal to ``timedelta.max``; in that case the former will produce a result 3827db96d56Sopenharmony_ci while the latter will overflow. 3837db96d56Sopenharmony_ci 3847db96d56Sopenharmony_ciIn addition to the operations listed above, :class:`timedelta` objects support 3857db96d56Sopenharmony_cicertain additions and subtractions with :class:`date` and :class:`.datetime` 3867db96d56Sopenharmony_ciobjects (see below). 3877db96d56Sopenharmony_ci 3887db96d56Sopenharmony_ci.. versionchanged:: 3.2 3897db96d56Sopenharmony_ci Floor division and true division of a :class:`timedelta` object by another 3907db96d56Sopenharmony_ci :class:`timedelta` object are now supported, as are remainder operations and 3917db96d56Sopenharmony_ci the :func:`divmod` function. True division and multiplication of a 3927db96d56Sopenharmony_ci :class:`timedelta` object by a :class:`float` object are now supported. 3937db96d56Sopenharmony_ci 3947db96d56Sopenharmony_ci 3957db96d56Sopenharmony_ciComparisons of :class:`timedelta` objects are supported, with some caveats. 3967db96d56Sopenharmony_ci 3977db96d56Sopenharmony_ciThe comparisons ``==`` or ``!=`` *always* return a :class:`bool`, no matter 3987db96d56Sopenharmony_cithe type of the compared object:: 3997db96d56Sopenharmony_ci 4007db96d56Sopenharmony_ci >>> from datetime import timedelta 4017db96d56Sopenharmony_ci >>> delta1 = timedelta(seconds=57) 4027db96d56Sopenharmony_ci >>> delta2 = timedelta(hours=25, seconds=2) 4037db96d56Sopenharmony_ci >>> delta2 != delta1 4047db96d56Sopenharmony_ci True 4057db96d56Sopenharmony_ci >>> delta2 == 5 4067db96d56Sopenharmony_ci False 4077db96d56Sopenharmony_ci 4087db96d56Sopenharmony_ciFor all other comparisons (such as ``<`` and ``>``), when a :class:`timedelta` 4097db96d56Sopenharmony_ciobject is compared to an object of a different type, :exc:`TypeError` 4107db96d56Sopenharmony_ciis raised:: 4117db96d56Sopenharmony_ci 4127db96d56Sopenharmony_ci >>> delta2 > delta1 4137db96d56Sopenharmony_ci True 4147db96d56Sopenharmony_ci >>> delta2 > 5 4157db96d56Sopenharmony_ci Traceback (most recent call last): 4167db96d56Sopenharmony_ci File "<stdin>", line 1, in <module> 4177db96d56Sopenharmony_ci TypeError: '>' not supported between instances of 'datetime.timedelta' and 'int' 4187db96d56Sopenharmony_ci 4197db96d56Sopenharmony_ciIn Boolean contexts, a :class:`timedelta` object is 4207db96d56Sopenharmony_ciconsidered to be true if and only if it isn't equal to ``timedelta(0)``. 4217db96d56Sopenharmony_ci 4227db96d56Sopenharmony_ciInstance methods: 4237db96d56Sopenharmony_ci 4247db96d56Sopenharmony_ci.. method:: timedelta.total_seconds() 4257db96d56Sopenharmony_ci 4267db96d56Sopenharmony_ci Return the total number of seconds contained in the duration. Equivalent to 4277db96d56Sopenharmony_ci ``td / timedelta(seconds=1)``. For interval units other than seconds, use the 4287db96d56Sopenharmony_ci division form directly (e.g. ``td / timedelta(microseconds=1)``). 4297db96d56Sopenharmony_ci 4307db96d56Sopenharmony_ci Note that for very large time intervals (greater than 270 years on 4317db96d56Sopenharmony_ci most platforms) this method will lose microsecond accuracy. 4327db96d56Sopenharmony_ci 4337db96d56Sopenharmony_ci .. versionadded:: 3.2 4347db96d56Sopenharmony_ci 4357db96d56Sopenharmony_ciExamples of usage: :class:`timedelta` 4367db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4377db96d56Sopenharmony_ci 4387db96d56Sopenharmony_ciAn additional example of normalization:: 4397db96d56Sopenharmony_ci 4407db96d56Sopenharmony_ci >>> # Components of another_year add up to exactly 365 days 4417db96d56Sopenharmony_ci >>> from datetime import timedelta 4427db96d56Sopenharmony_ci >>> year = timedelta(days=365) 4437db96d56Sopenharmony_ci >>> another_year = timedelta(weeks=40, days=84, hours=23, 4447db96d56Sopenharmony_ci ... minutes=50, seconds=600) 4457db96d56Sopenharmony_ci >>> year == another_year 4467db96d56Sopenharmony_ci True 4477db96d56Sopenharmony_ci >>> year.total_seconds() 4487db96d56Sopenharmony_ci 31536000.0 4497db96d56Sopenharmony_ci 4507db96d56Sopenharmony_ciExamples of :class:`timedelta` arithmetic:: 4517db96d56Sopenharmony_ci 4527db96d56Sopenharmony_ci >>> from datetime import timedelta 4537db96d56Sopenharmony_ci >>> year = timedelta(days=365) 4547db96d56Sopenharmony_ci >>> ten_years = 10 * year 4557db96d56Sopenharmony_ci >>> ten_years 4567db96d56Sopenharmony_ci datetime.timedelta(days=3650) 4577db96d56Sopenharmony_ci >>> ten_years.days // 365 4587db96d56Sopenharmony_ci 10 4597db96d56Sopenharmony_ci >>> nine_years = ten_years - year 4607db96d56Sopenharmony_ci >>> nine_years 4617db96d56Sopenharmony_ci datetime.timedelta(days=3285) 4627db96d56Sopenharmony_ci >>> three_years = nine_years // 3 4637db96d56Sopenharmony_ci >>> three_years, three_years.days // 365 4647db96d56Sopenharmony_ci (datetime.timedelta(days=1095), 3) 4657db96d56Sopenharmony_ci 4667db96d56Sopenharmony_ci.. _datetime-date: 4677db96d56Sopenharmony_ci 4687db96d56Sopenharmony_ci:class:`date` Objects 4697db96d56Sopenharmony_ci--------------------- 4707db96d56Sopenharmony_ci 4717db96d56Sopenharmony_ciA :class:`date` object represents a date (year, month and day) in an idealized 4727db96d56Sopenharmony_cicalendar, the current Gregorian calendar indefinitely extended in both 4737db96d56Sopenharmony_cidirections. 4747db96d56Sopenharmony_ci 4757db96d56Sopenharmony_ciJanuary 1 of year 1 is called day number 1, January 2 of year 1 is 4767db96d56Sopenharmony_cicalled day number 2, and so on. [#]_ 4777db96d56Sopenharmony_ci 4787db96d56Sopenharmony_ci.. class:: date(year, month, day) 4797db96d56Sopenharmony_ci 4807db96d56Sopenharmony_ci All arguments are required. Arguments must be integers, in the following 4817db96d56Sopenharmony_ci ranges: 4827db96d56Sopenharmony_ci 4837db96d56Sopenharmony_ci * ``MINYEAR <= year <= MAXYEAR`` 4847db96d56Sopenharmony_ci * ``1 <= month <= 12`` 4857db96d56Sopenharmony_ci * ``1 <= day <= number of days in the given month and year`` 4867db96d56Sopenharmony_ci 4877db96d56Sopenharmony_ci If an argument outside those ranges is given, :exc:`ValueError` is raised. 4887db96d56Sopenharmony_ci 4897db96d56Sopenharmony_ci 4907db96d56Sopenharmony_ciOther constructors, all class methods: 4917db96d56Sopenharmony_ci 4927db96d56Sopenharmony_ci.. classmethod:: date.today() 4937db96d56Sopenharmony_ci 4947db96d56Sopenharmony_ci Return the current local date. 4957db96d56Sopenharmony_ci 4967db96d56Sopenharmony_ci This is equivalent to ``date.fromtimestamp(time.time())``. 4977db96d56Sopenharmony_ci 4987db96d56Sopenharmony_ci.. classmethod:: date.fromtimestamp(timestamp) 4997db96d56Sopenharmony_ci 5007db96d56Sopenharmony_ci Return the local date corresponding to the POSIX timestamp, such as is 5017db96d56Sopenharmony_ci returned by :func:`time.time`. 5027db96d56Sopenharmony_ci 5037db96d56Sopenharmony_ci This may raise :exc:`OverflowError`, if the timestamp is out 5047db96d56Sopenharmony_ci of the range of values supported by the platform C :c:func:`localtime` 5057db96d56Sopenharmony_ci function, and :exc:`OSError` on :c:func:`localtime` failure. 5067db96d56Sopenharmony_ci It's common for this to be restricted to years from 1970 through 2038. Note 5077db96d56Sopenharmony_ci that on non-POSIX systems that include leap seconds in their notion of a 5087db96d56Sopenharmony_ci timestamp, leap seconds are ignored by :meth:`fromtimestamp`. 5097db96d56Sopenharmony_ci 5107db96d56Sopenharmony_ci .. versionchanged:: 3.3 5117db96d56Sopenharmony_ci Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp 5127db96d56Sopenharmony_ci is out of the range of values supported by the platform C 5137db96d56Sopenharmony_ci :c:func:`localtime` function. Raise :exc:`OSError` instead of 5147db96d56Sopenharmony_ci :exc:`ValueError` on :c:func:`localtime` failure. 5157db96d56Sopenharmony_ci 5167db96d56Sopenharmony_ci 5177db96d56Sopenharmony_ci.. classmethod:: date.fromordinal(ordinal) 5187db96d56Sopenharmony_ci 5197db96d56Sopenharmony_ci Return the date corresponding to the proleptic Gregorian ordinal, where 5207db96d56Sopenharmony_ci January 1 of year 1 has ordinal 1. 5217db96d56Sopenharmony_ci 5227db96d56Sopenharmony_ci :exc:`ValueError` is raised unless ``1 <= ordinal <= 5237db96d56Sopenharmony_ci date.max.toordinal()``. For any date *d*, 5247db96d56Sopenharmony_ci ``date.fromordinal(d.toordinal()) == d``. 5257db96d56Sopenharmony_ci 5267db96d56Sopenharmony_ci 5277db96d56Sopenharmony_ci.. classmethod:: date.fromisoformat(date_string) 5287db96d56Sopenharmony_ci 5297db96d56Sopenharmony_ci Return a :class:`date` corresponding to a *date_string* given in any valid 5307db96d56Sopenharmony_ci ISO 8601 format, except ordinal dates (e.g. ``YYYY-DDD``):: 5317db96d56Sopenharmony_ci 5327db96d56Sopenharmony_ci >>> from datetime import date 5337db96d56Sopenharmony_ci >>> date.fromisoformat('2019-12-04') 5347db96d56Sopenharmony_ci datetime.date(2019, 12, 4) 5357db96d56Sopenharmony_ci >>> date.fromisoformat('20191204') 5367db96d56Sopenharmony_ci datetime.date(2019, 12, 4) 5377db96d56Sopenharmony_ci >>> date.fromisoformat('2021-W01-1') 5387db96d56Sopenharmony_ci datetime.date(2021, 1, 4) 5397db96d56Sopenharmony_ci 5407db96d56Sopenharmony_ci .. versionadded:: 3.7 5417db96d56Sopenharmony_ci .. versionchanged:: 3.11 5427db96d56Sopenharmony_ci Previously, this method only supported the format ``YYYY-MM-DD``. 5437db96d56Sopenharmony_ci 5447db96d56Sopenharmony_ci.. classmethod:: date.fromisocalendar(year, week, day) 5457db96d56Sopenharmony_ci 5467db96d56Sopenharmony_ci Return a :class:`date` corresponding to the ISO calendar date specified by 5477db96d56Sopenharmony_ci year, week and day. This is the inverse of the function :meth:`date.isocalendar`. 5487db96d56Sopenharmony_ci 5497db96d56Sopenharmony_ci .. versionadded:: 3.8 5507db96d56Sopenharmony_ci 5517db96d56Sopenharmony_ci 5527db96d56Sopenharmony_ciClass attributes: 5537db96d56Sopenharmony_ci 5547db96d56Sopenharmony_ci.. attribute:: date.min 5557db96d56Sopenharmony_ci 5567db96d56Sopenharmony_ci The earliest representable date, ``date(MINYEAR, 1, 1)``. 5577db96d56Sopenharmony_ci 5587db96d56Sopenharmony_ci 5597db96d56Sopenharmony_ci.. attribute:: date.max 5607db96d56Sopenharmony_ci 5617db96d56Sopenharmony_ci The latest representable date, ``date(MAXYEAR, 12, 31)``. 5627db96d56Sopenharmony_ci 5637db96d56Sopenharmony_ci 5647db96d56Sopenharmony_ci.. attribute:: date.resolution 5657db96d56Sopenharmony_ci 5667db96d56Sopenharmony_ci The smallest possible difference between non-equal date objects, 5677db96d56Sopenharmony_ci ``timedelta(days=1)``. 5687db96d56Sopenharmony_ci 5697db96d56Sopenharmony_ci 5707db96d56Sopenharmony_ciInstance attributes (read-only): 5717db96d56Sopenharmony_ci 5727db96d56Sopenharmony_ci.. attribute:: date.year 5737db96d56Sopenharmony_ci 5747db96d56Sopenharmony_ci Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive. 5757db96d56Sopenharmony_ci 5767db96d56Sopenharmony_ci 5777db96d56Sopenharmony_ci.. attribute:: date.month 5787db96d56Sopenharmony_ci 5797db96d56Sopenharmony_ci Between 1 and 12 inclusive. 5807db96d56Sopenharmony_ci 5817db96d56Sopenharmony_ci 5827db96d56Sopenharmony_ci.. attribute:: date.day 5837db96d56Sopenharmony_ci 5847db96d56Sopenharmony_ci Between 1 and the number of days in the given month of the given year. 5857db96d56Sopenharmony_ci 5867db96d56Sopenharmony_ci 5877db96d56Sopenharmony_ciSupported operations: 5887db96d56Sopenharmony_ci 5897db96d56Sopenharmony_ci+-------------------------------+----------------------------------------------+ 5907db96d56Sopenharmony_ci| Operation | Result | 5917db96d56Sopenharmony_ci+===============================+==============================================+ 5927db96d56Sopenharmony_ci| ``date2 = date1 + timedelta`` | *date2* will be ``timedelta.days`` days | 5937db96d56Sopenharmony_ci| | after *date1*. (1) | 5947db96d56Sopenharmony_ci+-------------------------------+----------------------------------------------+ 5957db96d56Sopenharmony_ci| ``date2 = date1 - timedelta`` | Computes *date2* such that ``date2 + | 5967db96d56Sopenharmony_ci| | timedelta == date1``. (2) | 5977db96d56Sopenharmony_ci+-------------------------------+----------------------------------------------+ 5987db96d56Sopenharmony_ci| ``timedelta = date1 - date2`` | \(3) | 5997db96d56Sopenharmony_ci+-------------------------------+----------------------------------------------+ 6007db96d56Sopenharmony_ci| ``date1 < date2`` | *date1* is considered less than *date2* when | 6017db96d56Sopenharmony_ci| | *date1* precedes *date2* in time. (4) | 6027db96d56Sopenharmony_ci+-------------------------------+----------------------------------------------+ 6037db96d56Sopenharmony_ci 6047db96d56Sopenharmony_ciNotes: 6057db96d56Sopenharmony_ci 6067db96d56Sopenharmony_ci(1) 6077db96d56Sopenharmony_ci *date2* is moved forward in time if ``timedelta.days > 0``, or backward if 6087db96d56Sopenharmony_ci ``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``. 6097db96d56Sopenharmony_ci ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored. 6107db96d56Sopenharmony_ci :exc:`OverflowError` is raised if ``date2.year`` would be smaller than 6117db96d56Sopenharmony_ci :const:`MINYEAR` or larger than :const:`MAXYEAR`. 6127db96d56Sopenharmony_ci 6137db96d56Sopenharmony_ci(2) 6147db96d56Sopenharmony_ci ``timedelta.seconds`` and ``timedelta.microseconds`` are ignored. 6157db96d56Sopenharmony_ci 6167db96d56Sopenharmony_ci(3) 6177db96d56Sopenharmony_ci This is exact, and cannot overflow. timedelta.seconds and 6187db96d56Sopenharmony_ci timedelta.microseconds are 0, and date2 + timedelta == date1 after. 6197db96d56Sopenharmony_ci 6207db96d56Sopenharmony_ci(4) 6217db96d56Sopenharmony_ci In other words, ``date1 < date2`` if and only if ``date1.toordinal() < 6227db96d56Sopenharmony_ci date2.toordinal()``. Date comparison raises :exc:`TypeError` if 6237db96d56Sopenharmony_ci the other comparand isn't also a :class:`date` object. However, 6247db96d56Sopenharmony_ci ``NotImplemented`` is returned instead if the other comparand has a 6257db96d56Sopenharmony_ci :meth:`timetuple` attribute. This hook gives other kinds of date objects a 6267db96d56Sopenharmony_ci chance at implementing mixed-type comparison. If not, when a :class:`date` 6277db96d56Sopenharmony_ci object is compared to an object of a different type, :exc:`TypeError` is raised 6287db96d56Sopenharmony_ci unless the comparison is ``==`` or ``!=``. The latter cases return 6297db96d56Sopenharmony_ci :const:`False` or :const:`True`, respectively. 6307db96d56Sopenharmony_ci 6317db96d56Sopenharmony_ciIn Boolean contexts, all :class:`date` objects are considered to be true. 6327db96d56Sopenharmony_ci 6337db96d56Sopenharmony_ciInstance methods: 6347db96d56Sopenharmony_ci 6357db96d56Sopenharmony_ci.. method:: date.replace(year=self.year, month=self.month, day=self.day) 6367db96d56Sopenharmony_ci 6377db96d56Sopenharmony_ci Return a date with the same value, except for those parameters given new 6387db96d56Sopenharmony_ci values by whichever keyword arguments are specified. 6397db96d56Sopenharmony_ci 6407db96d56Sopenharmony_ci Example:: 6417db96d56Sopenharmony_ci 6427db96d56Sopenharmony_ci >>> from datetime import date 6437db96d56Sopenharmony_ci >>> d = date(2002, 12, 31) 6447db96d56Sopenharmony_ci >>> d.replace(day=26) 6457db96d56Sopenharmony_ci datetime.date(2002, 12, 26) 6467db96d56Sopenharmony_ci 6477db96d56Sopenharmony_ci 6487db96d56Sopenharmony_ci.. method:: date.timetuple() 6497db96d56Sopenharmony_ci 6507db96d56Sopenharmony_ci Return a :class:`time.struct_time` such as returned by :func:`time.localtime`. 6517db96d56Sopenharmony_ci 6527db96d56Sopenharmony_ci The hours, minutes and seconds are 0, and the DST flag is -1. 6537db96d56Sopenharmony_ci 6547db96d56Sopenharmony_ci ``d.timetuple()`` is equivalent to:: 6557db96d56Sopenharmony_ci 6567db96d56Sopenharmony_ci time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1)) 6577db96d56Sopenharmony_ci 6587db96d56Sopenharmony_ci where ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` 6597db96d56Sopenharmony_ci is the day number within the current year starting with ``1`` for January 1st. 6607db96d56Sopenharmony_ci 6617db96d56Sopenharmony_ci 6627db96d56Sopenharmony_ci.. method:: date.toordinal() 6637db96d56Sopenharmony_ci 6647db96d56Sopenharmony_ci Return the proleptic Gregorian ordinal of the date, where January 1 of year 1 6657db96d56Sopenharmony_ci has ordinal 1. For any :class:`date` object *d*, 6667db96d56Sopenharmony_ci ``date.fromordinal(d.toordinal()) == d``. 6677db96d56Sopenharmony_ci 6687db96d56Sopenharmony_ci 6697db96d56Sopenharmony_ci.. method:: date.weekday() 6707db96d56Sopenharmony_ci 6717db96d56Sopenharmony_ci Return the day of the week as an integer, where Monday is 0 and Sunday is 6. 6727db96d56Sopenharmony_ci For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also 6737db96d56Sopenharmony_ci :meth:`isoweekday`. 6747db96d56Sopenharmony_ci 6757db96d56Sopenharmony_ci 6767db96d56Sopenharmony_ci.. method:: date.isoweekday() 6777db96d56Sopenharmony_ci 6787db96d56Sopenharmony_ci Return the day of the week as an integer, where Monday is 1 and Sunday is 7. 6797db96d56Sopenharmony_ci For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also 6807db96d56Sopenharmony_ci :meth:`weekday`, :meth:`isocalendar`. 6817db96d56Sopenharmony_ci 6827db96d56Sopenharmony_ci 6837db96d56Sopenharmony_ci.. method:: date.isocalendar() 6847db96d56Sopenharmony_ci 6857db96d56Sopenharmony_ci Return a :term:`named tuple` object with three components: ``year``, 6867db96d56Sopenharmony_ci ``week`` and ``weekday``. 6877db96d56Sopenharmony_ci 6887db96d56Sopenharmony_ci The ISO calendar is a widely used variant of the Gregorian calendar. [#]_ 6897db96d56Sopenharmony_ci 6907db96d56Sopenharmony_ci The ISO year consists of 52 or 53 full weeks, and where a week starts on a 6917db96d56Sopenharmony_ci Monday and ends on a Sunday. The first week of an ISO year is the first 6927db96d56Sopenharmony_ci (Gregorian) calendar week of a year containing a Thursday. This is called week 6937db96d56Sopenharmony_ci number 1, and the ISO year of that Thursday is the same as its Gregorian year. 6947db96d56Sopenharmony_ci 6957db96d56Sopenharmony_ci For example, 2004 begins on a Thursday, so the first week of ISO year 2004 6967db96d56Sopenharmony_ci begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004:: 6977db96d56Sopenharmony_ci 6987db96d56Sopenharmony_ci >>> from datetime import date 6997db96d56Sopenharmony_ci >>> date(2003, 12, 29).isocalendar() 7007db96d56Sopenharmony_ci datetime.IsoCalendarDate(year=2004, week=1, weekday=1) 7017db96d56Sopenharmony_ci >>> date(2004, 1, 4).isocalendar() 7027db96d56Sopenharmony_ci datetime.IsoCalendarDate(year=2004, week=1, weekday=7) 7037db96d56Sopenharmony_ci 7047db96d56Sopenharmony_ci .. versionchanged:: 3.9 7057db96d56Sopenharmony_ci Result changed from a tuple to a :term:`named tuple`. 7067db96d56Sopenharmony_ci 7077db96d56Sopenharmony_ci.. method:: date.isoformat() 7087db96d56Sopenharmony_ci 7097db96d56Sopenharmony_ci Return a string representing the date in ISO 8601 format, ``YYYY-MM-DD``:: 7107db96d56Sopenharmony_ci 7117db96d56Sopenharmony_ci >>> from datetime import date 7127db96d56Sopenharmony_ci >>> date(2002, 12, 4).isoformat() 7137db96d56Sopenharmony_ci '2002-12-04' 7147db96d56Sopenharmony_ci 7157db96d56Sopenharmony_ci.. method:: date.__str__() 7167db96d56Sopenharmony_ci 7177db96d56Sopenharmony_ci For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``. 7187db96d56Sopenharmony_ci 7197db96d56Sopenharmony_ci 7207db96d56Sopenharmony_ci.. method:: date.ctime() 7217db96d56Sopenharmony_ci 7227db96d56Sopenharmony_ci Return a string representing the date:: 7237db96d56Sopenharmony_ci 7247db96d56Sopenharmony_ci >>> from datetime import date 7257db96d56Sopenharmony_ci >>> date(2002, 12, 4).ctime() 7267db96d56Sopenharmony_ci 'Wed Dec 4 00:00:00 2002' 7277db96d56Sopenharmony_ci 7287db96d56Sopenharmony_ci ``d.ctime()`` is equivalent to:: 7297db96d56Sopenharmony_ci 7307db96d56Sopenharmony_ci time.ctime(time.mktime(d.timetuple())) 7317db96d56Sopenharmony_ci 7327db96d56Sopenharmony_ci on platforms where the native C 7337db96d56Sopenharmony_ci :c:func:`ctime` function (which :func:`time.ctime` invokes, but which 7347db96d56Sopenharmony_ci :meth:`date.ctime` does not invoke) conforms to the C standard. 7357db96d56Sopenharmony_ci 7367db96d56Sopenharmony_ci 7377db96d56Sopenharmony_ci.. method:: date.strftime(format) 7387db96d56Sopenharmony_ci 7397db96d56Sopenharmony_ci Return a string representing the date, controlled by an explicit format string. 7407db96d56Sopenharmony_ci Format codes referring to hours, minutes or seconds will see 0 values. 7417db96d56Sopenharmony_ci See also :ref:`strftime-strptime-behavior` and :meth:`date.isoformat`. 7427db96d56Sopenharmony_ci 7437db96d56Sopenharmony_ci 7447db96d56Sopenharmony_ci.. method:: date.__format__(format) 7457db96d56Sopenharmony_ci 7467db96d56Sopenharmony_ci Same as :meth:`.date.strftime`. This makes it possible to specify a format 7477db96d56Sopenharmony_ci string for a :class:`.date` object in :ref:`formatted string 7487db96d56Sopenharmony_ci literals <f-strings>` and when using :meth:`str.format`. 7497db96d56Sopenharmony_ci See also :ref:`strftime-strptime-behavior` and :meth:`date.isoformat`. 7507db96d56Sopenharmony_ci 7517db96d56Sopenharmony_ciExamples of Usage: :class:`date` 7527db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 7537db96d56Sopenharmony_ci 7547db96d56Sopenharmony_ciExample of counting days to an event:: 7557db96d56Sopenharmony_ci 7567db96d56Sopenharmony_ci >>> import time 7577db96d56Sopenharmony_ci >>> from datetime import date 7587db96d56Sopenharmony_ci >>> today = date.today() 7597db96d56Sopenharmony_ci >>> today 7607db96d56Sopenharmony_ci datetime.date(2007, 12, 5) 7617db96d56Sopenharmony_ci >>> today == date.fromtimestamp(time.time()) 7627db96d56Sopenharmony_ci True 7637db96d56Sopenharmony_ci >>> my_birthday = date(today.year, 6, 24) 7647db96d56Sopenharmony_ci >>> if my_birthday < today: 7657db96d56Sopenharmony_ci ... my_birthday = my_birthday.replace(year=today.year + 1) 7667db96d56Sopenharmony_ci >>> my_birthday 7677db96d56Sopenharmony_ci datetime.date(2008, 6, 24) 7687db96d56Sopenharmony_ci >>> time_to_birthday = abs(my_birthday - today) 7697db96d56Sopenharmony_ci >>> time_to_birthday.days 7707db96d56Sopenharmony_ci 202 7717db96d56Sopenharmony_ci 7727db96d56Sopenharmony_ciMore examples of working with :class:`date`: 7737db96d56Sopenharmony_ci 7747db96d56Sopenharmony_ci.. doctest:: 7757db96d56Sopenharmony_ci 7767db96d56Sopenharmony_ci >>> from datetime import date 7777db96d56Sopenharmony_ci >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001 7787db96d56Sopenharmony_ci >>> d 7797db96d56Sopenharmony_ci datetime.date(2002, 3, 11) 7807db96d56Sopenharmony_ci 7817db96d56Sopenharmony_ci >>> # Methods related to formatting string output 7827db96d56Sopenharmony_ci >>> d.isoformat() 7837db96d56Sopenharmony_ci '2002-03-11' 7847db96d56Sopenharmony_ci >>> d.strftime("%d/%m/%y") 7857db96d56Sopenharmony_ci '11/03/02' 7867db96d56Sopenharmony_ci >>> d.strftime("%A %d. %B %Y") 7877db96d56Sopenharmony_ci 'Monday 11. March 2002' 7887db96d56Sopenharmony_ci >>> d.ctime() 7897db96d56Sopenharmony_ci 'Mon Mar 11 00:00:00 2002' 7907db96d56Sopenharmony_ci >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month") 7917db96d56Sopenharmony_ci 'The day is 11, the month is March.' 7927db96d56Sopenharmony_ci 7937db96d56Sopenharmony_ci >>> # Methods for to extracting 'components' under different calendars 7947db96d56Sopenharmony_ci >>> t = d.timetuple() 7957db96d56Sopenharmony_ci >>> for i in t: # doctest: +SKIP 7967db96d56Sopenharmony_ci ... print(i) 7977db96d56Sopenharmony_ci 2002 # year 7987db96d56Sopenharmony_ci 3 # month 7997db96d56Sopenharmony_ci 11 # day 8007db96d56Sopenharmony_ci 0 8017db96d56Sopenharmony_ci 0 8027db96d56Sopenharmony_ci 0 8037db96d56Sopenharmony_ci 0 # weekday (0 = Monday) 8047db96d56Sopenharmony_ci 70 # 70th day in the year 8057db96d56Sopenharmony_ci -1 8067db96d56Sopenharmony_ci >>> ic = d.isocalendar() 8077db96d56Sopenharmony_ci >>> for i in ic: # doctest: +SKIP 8087db96d56Sopenharmony_ci ... print(i) 8097db96d56Sopenharmony_ci 2002 # ISO year 8107db96d56Sopenharmony_ci 11 # ISO week number 8117db96d56Sopenharmony_ci 1 # ISO day number ( 1 = Monday ) 8127db96d56Sopenharmony_ci 8137db96d56Sopenharmony_ci >>> # A date object is immutable; all operations produce a new object 8147db96d56Sopenharmony_ci >>> d.replace(year=2005) 8157db96d56Sopenharmony_ci datetime.date(2005, 3, 11) 8167db96d56Sopenharmony_ci 8177db96d56Sopenharmony_ci 8187db96d56Sopenharmony_ci.. _datetime-datetime: 8197db96d56Sopenharmony_ci 8207db96d56Sopenharmony_ci:class:`.datetime` Objects 8217db96d56Sopenharmony_ci-------------------------- 8227db96d56Sopenharmony_ci 8237db96d56Sopenharmony_ciA :class:`.datetime` object is a single object containing all the information 8247db96d56Sopenharmony_cifrom a :class:`date` object and a :class:`.time` object. 8257db96d56Sopenharmony_ci 8267db96d56Sopenharmony_ciLike a :class:`date` object, :class:`.datetime` assumes the current Gregorian 8277db96d56Sopenharmony_cicalendar extended in both directions; like a :class:`.time` object, 8287db96d56Sopenharmony_ci:class:`.datetime` assumes there are exactly 3600\*24 seconds in every day. 8297db96d56Sopenharmony_ci 8307db96d56Sopenharmony_ciConstructor: 8317db96d56Sopenharmony_ci 8327db96d56Sopenharmony_ci.. class:: datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0) 8337db96d56Sopenharmony_ci 8347db96d56Sopenharmony_ci The *year*, *month* and *day* arguments are required. *tzinfo* may be ``None``, or an 8357db96d56Sopenharmony_ci instance of a :class:`tzinfo` subclass. The remaining arguments must be integers 8367db96d56Sopenharmony_ci in the following ranges: 8377db96d56Sopenharmony_ci 8387db96d56Sopenharmony_ci * ``MINYEAR <= year <= MAXYEAR``, 8397db96d56Sopenharmony_ci * ``1 <= month <= 12``, 8407db96d56Sopenharmony_ci * ``1 <= day <= number of days in the given month and year``, 8417db96d56Sopenharmony_ci * ``0 <= hour < 24``, 8427db96d56Sopenharmony_ci * ``0 <= minute < 60``, 8437db96d56Sopenharmony_ci * ``0 <= second < 60``, 8447db96d56Sopenharmony_ci * ``0 <= microsecond < 1000000``, 8457db96d56Sopenharmony_ci * ``fold in [0, 1]``. 8467db96d56Sopenharmony_ci 8477db96d56Sopenharmony_ci If an argument outside those ranges is given, :exc:`ValueError` is raised. 8487db96d56Sopenharmony_ci 8497db96d56Sopenharmony_ci .. versionadded:: 3.6 8507db96d56Sopenharmony_ci Added the ``fold`` argument. 8517db96d56Sopenharmony_ci 8527db96d56Sopenharmony_ciOther constructors, all class methods: 8537db96d56Sopenharmony_ci 8547db96d56Sopenharmony_ci.. classmethod:: datetime.today() 8557db96d56Sopenharmony_ci 8567db96d56Sopenharmony_ci Return the current local datetime, with :attr:`.tzinfo` ``None``. 8577db96d56Sopenharmony_ci 8587db96d56Sopenharmony_ci Equivalent to:: 8597db96d56Sopenharmony_ci 8607db96d56Sopenharmony_ci datetime.fromtimestamp(time.time()) 8617db96d56Sopenharmony_ci 8627db96d56Sopenharmony_ci See also :meth:`now`, :meth:`fromtimestamp`. 8637db96d56Sopenharmony_ci 8647db96d56Sopenharmony_ci This method is functionally equivalent to :meth:`now`, but without a 8657db96d56Sopenharmony_ci ``tz`` parameter. 8667db96d56Sopenharmony_ci 8677db96d56Sopenharmony_ci.. classmethod:: datetime.now(tz=None) 8687db96d56Sopenharmony_ci 8697db96d56Sopenharmony_ci Return the current local date and time. 8707db96d56Sopenharmony_ci 8717db96d56Sopenharmony_ci If optional argument *tz* is ``None`` 8727db96d56Sopenharmony_ci or not specified, this is like :meth:`today`, but, if possible, supplies more 8737db96d56Sopenharmony_ci precision than can be gotten from going through a :func:`time.time` timestamp 8747db96d56Sopenharmony_ci (for example, this may be possible on platforms supplying the C 8757db96d56Sopenharmony_ci :c:func:`gettimeofday` function). 8767db96d56Sopenharmony_ci 8777db96d56Sopenharmony_ci If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, 8787db96d56Sopenharmony_ci and the current date and time are converted to *tz*’s time zone. 8797db96d56Sopenharmony_ci 8807db96d56Sopenharmony_ci This function is preferred over :meth:`today` and :meth:`utcnow`. 8817db96d56Sopenharmony_ci 8827db96d56Sopenharmony_ci 8837db96d56Sopenharmony_ci.. classmethod:: datetime.utcnow() 8847db96d56Sopenharmony_ci 8857db96d56Sopenharmony_ci Return the current UTC date and time, with :attr:`.tzinfo` ``None``. 8867db96d56Sopenharmony_ci 8877db96d56Sopenharmony_ci This is like :meth:`now`, but returns the current UTC date and time, as a naive 8887db96d56Sopenharmony_ci :class:`.datetime` object. An aware current UTC datetime can be obtained by 8897db96d56Sopenharmony_ci calling ``datetime.now(timezone.utc)``. See also :meth:`now`. 8907db96d56Sopenharmony_ci 8917db96d56Sopenharmony_ci .. warning:: 8927db96d56Sopenharmony_ci 8937db96d56Sopenharmony_ci Because naive ``datetime`` objects are treated by many ``datetime`` methods 8947db96d56Sopenharmony_ci as local times, it is preferred to use aware datetimes to represent times 8957db96d56Sopenharmony_ci in UTC. As such, the recommended way to create an object representing the 8967db96d56Sopenharmony_ci current time in UTC is by calling ``datetime.now(timezone.utc)``. 8977db96d56Sopenharmony_ci 8987db96d56Sopenharmony_ci 8997db96d56Sopenharmony_ci.. classmethod:: datetime.fromtimestamp(timestamp, tz=None) 9007db96d56Sopenharmony_ci 9017db96d56Sopenharmony_ci Return the local date and time corresponding to the POSIX timestamp, such as is 9027db96d56Sopenharmony_ci returned by :func:`time.time`. If optional argument *tz* is ``None`` or not 9037db96d56Sopenharmony_ci specified, the timestamp is converted to the platform's local date and time, and 9047db96d56Sopenharmony_ci the returned :class:`.datetime` object is naive. 9057db96d56Sopenharmony_ci 9067db96d56Sopenharmony_ci If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` subclass, and the 9077db96d56Sopenharmony_ci timestamp is converted to *tz*’s time zone. 9087db96d56Sopenharmony_ci 9097db96d56Sopenharmony_ci :meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is out of 9107db96d56Sopenharmony_ci the range of values supported by the platform C :c:func:`localtime` or 9117db96d56Sopenharmony_ci :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or 9127db96d56Sopenharmony_ci :c:func:`gmtime` failure. 9137db96d56Sopenharmony_ci It's common for this to be restricted to years in 9147db96d56Sopenharmony_ci 1970 through 2038. Note that on non-POSIX systems that include leap seconds in 9157db96d56Sopenharmony_ci their notion of a timestamp, leap seconds are ignored by :meth:`fromtimestamp`, 9167db96d56Sopenharmony_ci and then it's possible to have two timestamps differing by a second that yield 9177db96d56Sopenharmony_ci identical :class:`.datetime` objects. This method is preferred over 9187db96d56Sopenharmony_ci :meth:`utcfromtimestamp`. 9197db96d56Sopenharmony_ci 9207db96d56Sopenharmony_ci .. versionchanged:: 3.3 9217db96d56Sopenharmony_ci Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp 9227db96d56Sopenharmony_ci is out of the range of values supported by the platform C 9237db96d56Sopenharmony_ci :c:func:`localtime` or :c:func:`gmtime` functions. Raise :exc:`OSError` 9247db96d56Sopenharmony_ci instead of :exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime` 9257db96d56Sopenharmony_ci failure. 9267db96d56Sopenharmony_ci 9277db96d56Sopenharmony_ci .. versionchanged:: 3.6 9287db96d56Sopenharmony_ci :meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1. 9297db96d56Sopenharmony_ci 9307db96d56Sopenharmony_ci.. classmethod:: datetime.utcfromtimestamp(timestamp) 9317db96d56Sopenharmony_ci 9327db96d56Sopenharmony_ci Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with 9337db96d56Sopenharmony_ci :attr:`.tzinfo` ``None``. (The resulting object is naive.) 9347db96d56Sopenharmony_ci 9357db96d56Sopenharmony_ci This may raise :exc:`OverflowError`, if the timestamp is 9367db96d56Sopenharmony_ci out of the range of values supported by the platform C :c:func:`gmtime` function, 9377db96d56Sopenharmony_ci and :exc:`OSError` on :c:func:`gmtime` failure. 9387db96d56Sopenharmony_ci It's common for this to be restricted to years in 1970 through 2038. 9397db96d56Sopenharmony_ci 9407db96d56Sopenharmony_ci To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`:: 9417db96d56Sopenharmony_ci 9427db96d56Sopenharmony_ci datetime.fromtimestamp(timestamp, timezone.utc) 9437db96d56Sopenharmony_ci 9447db96d56Sopenharmony_ci On the POSIX compliant platforms, it is equivalent to the following 9457db96d56Sopenharmony_ci expression:: 9467db96d56Sopenharmony_ci 9477db96d56Sopenharmony_ci datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp) 9487db96d56Sopenharmony_ci 9497db96d56Sopenharmony_ci except the latter formula always supports the full years range: between 9507db96d56Sopenharmony_ci :const:`MINYEAR` and :const:`MAXYEAR` inclusive. 9517db96d56Sopenharmony_ci 9527db96d56Sopenharmony_ci .. warning:: 9537db96d56Sopenharmony_ci 9547db96d56Sopenharmony_ci Because naive ``datetime`` objects are treated by many ``datetime`` methods 9557db96d56Sopenharmony_ci as local times, it is preferred to use aware datetimes to represent times 9567db96d56Sopenharmony_ci in UTC. As such, the recommended way to create an object representing a 9577db96d56Sopenharmony_ci specific timestamp in UTC is by calling 9587db96d56Sopenharmony_ci ``datetime.fromtimestamp(timestamp, tz=timezone.utc)``. 9597db96d56Sopenharmony_ci 9607db96d56Sopenharmony_ci .. versionchanged:: 3.3 9617db96d56Sopenharmony_ci Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp 9627db96d56Sopenharmony_ci is out of the range of values supported by the platform C 9637db96d56Sopenharmony_ci :c:func:`gmtime` function. Raise :exc:`OSError` instead of 9647db96d56Sopenharmony_ci :exc:`ValueError` on :c:func:`gmtime` failure. 9657db96d56Sopenharmony_ci 9667db96d56Sopenharmony_ci 9677db96d56Sopenharmony_ci.. classmethod:: datetime.fromordinal(ordinal) 9687db96d56Sopenharmony_ci 9697db96d56Sopenharmony_ci Return the :class:`.datetime` corresponding to the proleptic Gregorian ordinal, 9707db96d56Sopenharmony_ci where January 1 of year 1 has ordinal 1. :exc:`ValueError` is raised unless ``1 9717db96d56Sopenharmony_ci <= ordinal <= datetime.max.toordinal()``. The hour, minute, second and 9727db96d56Sopenharmony_ci microsecond of the result are all 0, and :attr:`.tzinfo` is ``None``. 9737db96d56Sopenharmony_ci 9747db96d56Sopenharmony_ci 9757db96d56Sopenharmony_ci.. classmethod:: datetime.combine(date, time, tzinfo=self.tzinfo) 9767db96d56Sopenharmony_ci 9777db96d56Sopenharmony_ci Return a new :class:`.datetime` object whose date components are equal to the 9787db96d56Sopenharmony_ci given :class:`date` object's, and whose time components 9797db96d56Sopenharmony_ci are equal to the given :class:`.time` object's. If the *tzinfo* 9807db96d56Sopenharmony_ci argument is provided, its value is used to set the :attr:`.tzinfo` attribute 9817db96d56Sopenharmony_ci of the result, otherwise the :attr:`~.time.tzinfo` attribute of the *time* argument 9827db96d56Sopenharmony_ci is used. 9837db96d56Sopenharmony_ci 9847db96d56Sopenharmony_ci For any :class:`.datetime` object *d*, 9857db96d56Sopenharmony_ci ``d == datetime.combine(d.date(), d.time(), d.tzinfo)``. If date is a 9867db96d56Sopenharmony_ci :class:`.datetime` object, its time components and :attr:`.tzinfo` attributes 9877db96d56Sopenharmony_ci are ignored. 9887db96d56Sopenharmony_ci 9897db96d56Sopenharmony_ci .. versionchanged:: 3.6 9907db96d56Sopenharmony_ci Added the *tzinfo* argument. 9917db96d56Sopenharmony_ci 9927db96d56Sopenharmony_ci 9937db96d56Sopenharmony_ci.. classmethod:: datetime.fromisoformat(date_string) 9947db96d56Sopenharmony_ci 9957db96d56Sopenharmony_ci Return a :class:`.datetime` corresponding to a *date_string* in any valid 9967db96d56Sopenharmony_ci ISO 8601 format, with the following exceptions: 9977db96d56Sopenharmony_ci 9987db96d56Sopenharmony_ci 1. Time zone offsets may have fractional seconds. 9997db96d56Sopenharmony_ci 2. The ``T`` separator may be replaced by any single unicode character. 10007db96d56Sopenharmony_ci 3. Ordinal dates are not currently supported. 10017db96d56Sopenharmony_ci 4. Fractional hours and minutes are not supported. 10027db96d56Sopenharmony_ci 10037db96d56Sopenharmony_ci Examples:: 10047db96d56Sopenharmony_ci 10057db96d56Sopenharmony_ci >>> from datetime import datetime 10067db96d56Sopenharmony_ci >>> datetime.fromisoformat('2011-11-04') 10077db96d56Sopenharmony_ci datetime.datetime(2011, 11, 4, 0, 0) 10087db96d56Sopenharmony_ci >>> datetime.fromisoformat('20111104') 10097db96d56Sopenharmony_ci datetime.datetime(2011, 11, 4, 0, 0) 10107db96d56Sopenharmony_ci >>> datetime.fromisoformat('2011-11-04T00:05:23') 10117db96d56Sopenharmony_ci datetime.datetime(2011, 11, 4, 0, 5, 23) 10127db96d56Sopenharmony_ci >>> datetime.fromisoformat('2011-11-04T00:05:23Z') 10137db96d56Sopenharmony_ci datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone.utc) 10147db96d56Sopenharmony_ci >>> datetime.fromisoformat('20111104T000523') 10157db96d56Sopenharmony_ci datetime.datetime(2011, 11, 4, 0, 5, 23) 10167db96d56Sopenharmony_ci >>> datetime.fromisoformat('2011-W01-2T00:05:23.283') 10177db96d56Sopenharmony_ci datetime.datetime(2011, 1, 4, 0, 5, 23, 283000) 10187db96d56Sopenharmony_ci >>> datetime.fromisoformat('2011-11-04 00:05:23.283') 10197db96d56Sopenharmony_ci datetime.datetime(2011, 11, 4, 0, 5, 23, 283000) 10207db96d56Sopenharmony_ci >>> datetime.fromisoformat('2011-11-04 00:05:23.283+00:00') 10217db96d56Sopenharmony_ci datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc) 10227db96d56Sopenharmony_ci >>> datetime.fromisoformat('2011-11-04T00:05:23+04:00') # doctest: +NORMALIZE_WHITESPACE 10237db96d56Sopenharmony_ci datetime.datetime(2011, 11, 4, 0, 5, 23, 10247db96d56Sopenharmony_ci tzinfo=datetime.timezone(datetime.timedelta(seconds=14400))) 10257db96d56Sopenharmony_ci 10267db96d56Sopenharmony_ci .. versionadded:: 3.7 10277db96d56Sopenharmony_ci .. versionchanged:: 3.11 10287db96d56Sopenharmony_ci Previously, this method only supported formats that could be emitted by 10297db96d56Sopenharmony_ci :meth:`date.isoformat()` or :meth:`datetime.isoformat()`. 10307db96d56Sopenharmony_ci 10317db96d56Sopenharmony_ci 10327db96d56Sopenharmony_ci.. classmethod:: datetime.fromisocalendar(year, week, day) 10337db96d56Sopenharmony_ci 10347db96d56Sopenharmony_ci Return a :class:`.datetime` corresponding to the ISO calendar date specified 10357db96d56Sopenharmony_ci by year, week and day. The non-date components of the datetime are populated 10367db96d56Sopenharmony_ci with their normal default values. This is the inverse of the function 10377db96d56Sopenharmony_ci :meth:`datetime.isocalendar`. 10387db96d56Sopenharmony_ci 10397db96d56Sopenharmony_ci .. versionadded:: 3.8 10407db96d56Sopenharmony_ci 10417db96d56Sopenharmony_ci.. classmethod:: datetime.strptime(date_string, format) 10427db96d56Sopenharmony_ci 10437db96d56Sopenharmony_ci Return a :class:`.datetime` corresponding to *date_string*, parsed according to 10447db96d56Sopenharmony_ci *format*. 10457db96d56Sopenharmony_ci 10467db96d56Sopenharmony_ci If *format* does not contain microseconds or timezone information, this is equivalent to:: 10477db96d56Sopenharmony_ci 10487db96d56Sopenharmony_ci datetime(*(time.strptime(date_string, format)[0:6])) 10497db96d56Sopenharmony_ci 10507db96d56Sopenharmony_ci :exc:`ValueError` is raised if the date_string and format 10517db96d56Sopenharmony_ci can't be parsed by :func:`time.strptime` or if it returns a value which isn't a 10527db96d56Sopenharmony_ci time tuple. See also :ref:`strftime-strptime-behavior` and 10537db96d56Sopenharmony_ci :meth:`datetime.fromisoformat`. 10547db96d56Sopenharmony_ci 10557db96d56Sopenharmony_ci 10567db96d56Sopenharmony_ci 10577db96d56Sopenharmony_ciClass attributes: 10587db96d56Sopenharmony_ci 10597db96d56Sopenharmony_ci.. attribute:: datetime.min 10607db96d56Sopenharmony_ci 10617db96d56Sopenharmony_ci The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1, 10627db96d56Sopenharmony_ci tzinfo=None)``. 10637db96d56Sopenharmony_ci 10647db96d56Sopenharmony_ci 10657db96d56Sopenharmony_ci.. attribute:: datetime.max 10667db96d56Sopenharmony_ci 10677db96d56Sopenharmony_ci The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23, 59, 10687db96d56Sopenharmony_ci 59, 999999, tzinfo=None)``. 10697db96d56Sopenharmony_ci 10707db96d56Sopenharmony_ci 10717db96d56Sopenharmony_ci.. attribute:: datetime.resolution 10727db96d56Sopenharmony_ci 10737db96d56Sopenharmony_ci The smallest possible difference between non-equal :class:`.datetime` objects, 10747db96d56Sopenharmony_ci ``timedelta(microseconds=1)``. 10757db96d56Sopenharmony_ci 10767db96d56Sopenharmony_ci 10777db96d56Sopenharmony_ciInstance attributes (read-only): 10787db96d56Sopenharmony_ci 10797db96d56Sopenharmony_ci.. attribute:: datetime.year 10807db96d56Sopenharmony_ci 10817db96d56Sopenharmony_ci Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive. 10827db96d56Sopenharmony_ci 10837db96d56Sopenharmony_ci 10847db96d56Sopenharmony_ci.. attribute:: datetime.month 10857db96d56Sopenharmony_ci 10867db96d56Sopenharmony_ci Between 1 and 12 inclusive. 10877db96d56Sopenharmony_ci 10887db96d56Sopenharmony_ci 10897db96d56Sopenharmony_ci.. attribute:: datetime.day 10907db96d56Sopenharmony_ci 10917db96d56Sopenharmony_ci Between 1 and the number of days in the given month of the given year. 10927db96d56Sopenharmony_ci 10937db96d56Sopenharmony_ci 10947db96d56Sopenharmony_ci.. attribute:: datetime.hour 10957db96d56Sopenharmony_ci 10967db96d56Sopenharmony_ci In ``range(24)``. 10977db96d56Sopenharmony_ci 10987db96d56Sopenharmony_ci 10997db96d56Sopenharmony_ci.. attribute:: datetime.minute 11007db96d56Sopenharmony_ci 11017db96d56Sopenharmony_ci In ``range(60)``. 11027db96d56Sopenharmony_ci 11037db96d56Sopenharmony_ci 11047db96d56Sopenharmony_ci.. attribute:: datetime.second 11057db96d56Sopenharmony_ci 11067db96d56Sopenharmony_ci In ``range(60)``. 11077db96d56Sopenharmony_ci 11087db96d56Sopenharmony_ci 11097db96d56Sopenharmony_ci.. attribute:: datetime.microsecond 11107db96d56Sopenharmony_ci 11117db96d56Sopenharmony_ci In ``range(1000000)``. 11127db96d56Sopenharmony_ci 11137db96d56Sopenharmony_ci 11147db96d56Sopenharmony_ci.. attribute:: datetime.tzinfo 11157db96d56Sopenharmony_ci 11167db96d56Sopenharmony_ci The object passed as the *tzinfo* argument to the :class:`.datetime` constructor, 11177db96d56Sopenharmony_ci or ``None`` if none was passed. 11187db96d56Sopenharmony_ci 11197db96d56Sopenharmony_ci 11207db96d56Sopenharmony_ci.. attribute:: datetime.fold 11217db96d56Sopenharmony_ci 11227db96d56Sopenharmony_ci In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A 11237db96d56Sopenharmony_ci repeated interval occurs when clocks are rolled back at the end of daylight saving 11247db96d56Sopenharmony_ci time or when the UTC offset for the current zone is decreased for political reasons.) 11257db96d56Sopenharmony_ci The value 0 (1) represents the earlier (later) of the two moments with the same wall 11267db96d56Sopenharmony_ci time representation. 11277db96d56Sopenharmony_ci 11287db96d56Sopenharmony_ci .. versionadded:: 3.6 11297db96d56Sopenharmony_ci 11307db96d56Sopenharmony_ciSupported operations: 11317db96d56Sopenharmony_ci 11327db96d56Sopenharmony_ci+---------------------------------------+--------------------------------+ 11337db96d56Sopenharmony_ci| Operation | Result | 11347db96d56Sopenharmony_ci+=======================================+================================+ 11357db96d56Sopenharmony_ci| ``datetime2 = datetime1 + timedelta`` | \(1) | 11367db96d56Sopenharmony_ci+---------------------------------------+--------------------------------+ 11377db96d56Sopenharmony_ci| ``datetime2 = datetime1 - timedelta`` | \(2) | 11387db96d56Sopenharmony_ci+---------------------------------------+--------------------------------+ 11397db96d56Sopenharmony_ci| ``timedelta = datetime1 - datetime2`` | \(3) | 11407db96d56Sopenharmony_ci+---------------------------------------+--------------------------------+ 11417db96d56Sopenharmony_ci| ``datetime1 < datetime2`` | Compares :class:`.datetime` to | 11427db96d56Sopenharmony_ci| | :class:`.datetime`. (4) | 11437db96d56Sopenharmony_ci+---------------------------------------+--------------------------------+ 11447db96d56Sopenharmony_ci 11457db96d56Sopenharmony_ci(1) 11467db96d56Sopenharmony_ci datetime2 is a duration of timedelta removed from datetime1, moving forward in 11477db96d56Sopenharmony_ci time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. The 11487db96d56Sopenharmony_ci result has the same :attr:`~.datetime.tzinfo` attribute as the input datetime, and 11497db96d56Sopenharmony_ci datetime2 - datetime1 == timedelta after. :exc:`OverflowError` is raised if 11507db96d56Sopenharmony_ci datetime2.year would be smaller than :const:`MINYEAR` or larger than 11517db96d56Sopenharmony_ci :const:`MAXYEAR`. Note that no time zone adjustments are done even if the 11527db96d56Sopenharmony_ci input is an aware object. 11537db96d56Sopenharmony_ci 11547db96d56Sopenharmony_ci(2) 11557db96d56Sopenharmony_ci Computes the datetime2 such that datetime2 + timedelta == datetime1. As for 11567db96d56Sopenharmony_ci addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the input 11577db96d56Sopenharmony_ci datetime, and no time zone adjustments are done even if the input is aware. 11587db96d56Sopenharmony_ci 11597db96d56Sopenharmony_ci(3) 11607db96d56Sopenharmony_ci Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined only if 11617db96d56Sopenharmony_ci both operands are naive, or if both are aware. If one is aware and the other is 11627db96d56Sopenharmony_ci naive, :exc:`TypeError` is raised. 11637db96d56Sopenharmony_ci 11647db96d56Sopenharmony_ci If both are naive, or both are aware and have the same :attr:`~.datetime.tzinfo` attribute, 11657db96d56Sopenharmony_ci the :attr:`~.datetime.tzinfo` attributes are ignored, and the result is a :class:`timedelta` 11667db96d56Sopenharmony_ci object *t* such that ``datetime2 + t == datetime1``. No time zone adjustments 11677db96d56Sopenharmony_ci are done in this case. 11687db96d56Sopenharmony_ci 11697db96d56Sopenharmony_ci If both are aware and have different :attr:`~.datetime.tzinfo` attributes, ``a-b`` acts 11707db96d56Sopenharmony_ci as if *a* and *b* were first converted to naive UTC datetimes first. The 11717db96d56Sopenharmony_ci result is ``(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None) 11727db96d56Sopenharmony_ci - b.utcoffset())`` except that the implementation never overflows. 11737db96d56Sopenharmony_ci 11747db96d56Sopenharmony_ci(4) 11757db96d56Sopenharmony_ci *datetime1* is considered less than *datetime2* when *datetime1* precedes 11767db96d56Sopenharmony_ci *datetime2* in time. 11777db96d56Sopenharmony_ci 11787db96d56Sopenharmony_ci If one comparand is naive and the other is aware, :exc:`TypeError` 11797db96d56Sopenharmony_ci is raised if an order comparison is attempted. For equality 11807db96d56Sopenharmony_ci comparisons, naive instances are never equal to aware instances. 11817db96d56Sopenharmony_ci 11827db96d56Sopenharmony_ci If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` attribute, the 11837db96d56Sopenharmony_ci common :attr:`~.datetime.tzinfo` attribute is ignored and the base datetimes are 11847db96d56Sopenharmony_ci compared. If both comparands are aware and have different :attr:`~.datetime.tzinfo` 11857db96d56Sopenharmony_ci attributes, the comparands are first adjusted by subtracting their UTC 11867db96d56Sopenharmony_ci offsets (obtained from ``self.utcoffset()``). 11877db96d56Sopenharmony_ci 11887db96d56Sopenharmony_ci .. versionchanged:: 3.3 11897db96d56Sopenharmony_ci Equality comparisons between aware and naive :class:`.datetime` 11907db96d56Sopenharmony_ci instances don't raise :exc:`TypeError`. 11917db96d56Sopenharmony_ci 11927db96d56Sopenharmony_ci .. note:: 11937db96d56Sopenharmony_ci 11947db96d56Sopenharmony_ci In order to stop comparison from falling back to the default scheme of comparing 11957db96d56Sopenharmony_ci object addresses, datetime comparison normally raises :exc:`TypeError` if the 11967db96d56Sopenharmony_ci other comparand isn't also a :class:`.datetime` object. However, 11977db96d56Sopenharmony_ci ``NotImplemented`` is returned instead if the other comparand has a 11987db96d56Sopenharmony_ci :meth:`timetuple` attribute. This hook gives other kinds of date objects a 11997db96d56Sopenharmony_ci chance at implementing mixed-type comparison. If not, when a :class:`.datetime` 12007db96d56Sopenharmony_ci object is compared to an object of a different type, :exc:`TypeError` is raised 12017db96d56Sopenharmony_ci unless the comparison is ``==`` or ``!=``. The latter cases return 12027db96d56Sopenharmony_ci :const:`False` or :const:`True`, respectively. 12037db96d56Sopenharmony_ci 12047db96d56Sopenharmony_ciInstance methods: 12057db96d56Sopenharmony_ci 12067db96d56Sopenharmony_ci.. method:: datetime.date() 12077db96d56Sopenharmony_ci 12087db96d56Sopenharmony_ci Return :class:`date` object with same year, month and day. 12097db96d56Sopenharmony_ci 12107db96d56Sopenharmony_ci 12117db96d56Sopenharmony_ci.. method:: datetime.time() 12127db96d56Sopenharmony_ci 12137db96d56Sopenharmony_ci Return :class:`.time` object with same hour, minute, second, microsecond and fold. 12147db96d56Sopenharmony_ci :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`. 12157db96d56Sopenharmony_ci 12167db96d56Sopenharmony_ci .. versionchanged:: 3.6 12177db96d56Sopenharmony_ci The fold value is copied to the returned :class:`.time` object. 12187db96d56Sopenharmony_ci 12197db96d56Sopenharmony_ci 12207db96d56Sopenharmony_ci.. method:: datetime.timetz() 12217db96d56Sopenharmony_ci 12227db96d56Sopenharmony_ci Return :class:`.time` object with same hour, minute, second, microsecond, fold, and 12237db96d56Sopenharmony_ci tzinfo attributes. See also method :meth:`time`. 12247db96d56Sopenharmony_ci 12257db96d56Sopenharmony_ci .. versionchanged:: 3.6 12267db96d56Sopenharmony_ci The fold value is copied to the returned :class:`.time` object. 12277db96d56Sopenharmony_ci 12287db96d56Sopenharmony_ci 12297db96d56Sopenharmony_ci.. method:: datetime.replace(year=self.year, month=self.month, day=self.day, \ 12307db96d56Sopenharmony_ci hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, \ 12317db96d56Sopenharmony_ci tzinfo=self.tzinfo, *, fold=0) 12327db96d56Sopenharmony_ci 12337db96d56Sopenharmony_ci Return a datetime with the same attributes, except for those attributes given 12347db96d56Sopenharmony_ci new values by whichever keyword arguments are specified. Note that 12357db96d56Sopenharmony_ci ``tzinfo=None`` can be specified to create a naive datetime from an aware 12367db96d56Sopenharmony_ci datetime with no conversion of date and time data. 12377db96d56Sopenharmony_ci 12387db96d56Sopenharmony_ci .. versionadded:: 3.6 12397db96d56Sopenharmony_ci Added the ``fold`` argument. 12407db96d56Sopenharmony_ci 12417db96d56Sopenharmony_ci 12427db96d56Sopenharmony_ci.. method:: datetime.astimezone(tz=None) 12437db96d56Sopenharmony_ci 12447db96d56Sopenharmony_ci Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*, 12457db96d56Sopenharmony_ci adjusting the date and time data so the result is the same UTC time as 12467db96d56Sopenharmony_ci *self*, but in *tz*'s local time. 12477db96d56Sopenharmony_ci 12487db96d56Sopenharmony_ci If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its 12497db96d56Sopenharmony_ci :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If *self* 12507db96d56Sopenharmony_ci is naive, it is presumed to represent time in the system timezone. 12517db96d56Sopenharmony_ci 12527db96d56Sopenharmony_ci If called without arguments (or with ``tz=None``) the system local 12537db96d56Sopenharmony_ci timezone is assumed for the target timezone. The ``.tzinfo`` attribute of the converted 12547db96d56Sopenharmony_ci datetime instance will be set to an instance of :class:`timezone` 12557db96d56Sopenharmony_ci with the zone name and offset obtained from the OS. 12567db96d56Sopenharmony_ci 12577db96d56Sopenharmony_ci If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no 12587db96d56Sopenharmony_ci adjustment of date or time data is performed. Else the result is local 12597db96d56Sopenharmony_ci time in the timezone *tz*, representing the same UTC time as *self*: after 12607db96d56Sopenharmony_ci ``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have 12617db96d56Sopenharmony_ci the same date and time data as ``dt - dt.utcoffset()``. 12627db96d56Sopenharmony_ci 12637db96d56Sopenharmony_ci If you merely want to attach a time zone object *tz* to a datetime *dt* without 12647db96d56Sopenharmony_ci adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If you 12657db96d56Sopenharmony_ci merely want to remove the time zone object from an aware datetime *dt* without 12667db96d56Sopenharmony_ci conversion of date and time data, use ``dt.replace(tzinfo=None)``. 12677db96d56Sopenharmony_ci 12687db96d56Sopenharmony_ci Note that the default :meth:`tzinfo.fromutc` method can be overridden in a 12697db96d56Sopenharmony_ci :class:`tzinfo` subclass to affect the result returned by :meth:`astimezone`. 12707db96d56Sopenharmony_ci Ignoring error cases, :meth:`astimezone` acts like:: 12717db96d56Sopenharmony_ci 12727db96d56Sopenharmony_ci def astimezone(self, tz): 12737db96d56Sopenharmony_ci if self.tzinfo is tz: 12747db96d56Sopenharmony_ci return self 12757db96d56Sopenharmony_ci # Convert self to UTC, and attach the new time zone object. 12767db96d56Sopenharmony_ci utc = (self - self.utcoffset()).replace(tzinfo=tz) 12777db96d56Sopenharmony_ci # Convert from UTC to tz's local time. 12787db96d56Sopenharmony_ci return tz.fromutc(utc) 12797db96d56Sopenharmony_ci 12807db96d56Sopenharmony_ci .. versionchanged:: 3.3 12817db96d56Sopenharmony_ci *tz* now can be omitted. 12827db96d56Sopenharmony_ci 12837db96d56Sopenharmony_ci .. versionchanged:: 3.6 12847db96d56Sopenharmony_ci The :meth:`astimezone` method can now be called on naive instances that 12857db96d56Sopenharmony_ci are presumed to represent system local time. 12867db96d56Sopenharmony_ci 12877db96d56Sopenharmony_ci 12887db96d56Sopenharmony_ci.. method:: datetime.utcoffset() 12897db96d56Sopenharmony_ci 12907db96d56Sopenharmony_ci If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 12917db96d56Sopenharmony_ci ``self.tzinfo.utcoffset(self)``, and raises an exception if the latter doesn't 12927db96d56Sopenharmony_ci return ``None`` or a :class:`timedelta` object with magnitude less than one day. 12937db96d56Sopenharmony_ci 12947db96d56Sopenharmony_ci .. versionchanged:: 3.7 12957db96d56Sopenharmony_ci The UTC offset is not restricted to a whole number of minutes. 12967db96d56Sopenharmony_ci 12977db96d56Sopenharmony_ci 12987db96d56Sopenharmony_ci.. method:: datetime.dst() 12997db96d56Sopenharmony_ci 13007db96d56Sopenharmony_ci If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 13017db96d56Sopenharmony_ci ``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't return 13027db96d56Sopenharmony_ci ``None`` or a :class:`timedelta` object with magnitude less than one day. 13037db96d56Sopenharmony_ci 13047db96d56Sopenharmony_ci .. versionchanged:: 3.7 13057db96d56Sopenharmony_ci The DST offset is not restricted to a whole number of minutes. 13067db96d56Sopenharmony_ci 13077db96d56Sopenharmony_ci 13087db96d56Sopenharmony_ci.. method:: datetime.tzname() 13097db96d56Sopenharmony_ci 13107db96d56Sopenharmony_ci If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 13117db96d56Sopenharmony_ci ``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't return 13127db96d56Sopenharmony_ci ``None`` or a string object, 13137db96d56Sopenharmony_ci 13147db96d56Sopenharmony_ci 13157db96d56Sopenharmony_ci.. method:: datetime.timetuple() 13167db96d56Sopenharmony_ci 13177db96d56Sopenharmony_ci Return a :class:`time.struct_time` such as returned by :func:`time.localtime`. 13187db96d56Sopenharmony_ci 13197db96d56Sopenharmony_ci ``d.timetuple()`` is equivalent to:: 13207db96d56Sopenharmony_ci 13217db96d56Sopenharmony_ci time.struct_time((d.year, d.month, d.day, 13227db96d56Sopenharmony_ci d.hour, d.minute, d.second, 13237db96d56Sopenharmony_ci d.weekday(), yday, dst)) 13247db96d56Sopenharmony_ci 13257db96d56Sopenharmony_ci where ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` 13267db96d56Sopenharmony_ci is the day number within the current year starting with ``1`` for January 13277db96d56Sopenharmony_ci 1st. The :attr:`tm_isdst` flag of the result is set according to the 13287db96d56Sopenharmony_ci :meth:`dst` method: :attr:`.tzinfo` is ``None`` or :meth:`dst` returns 13297db96d56Sopenharmony_ci ``None``, :attr:`tm_isdst` is set to ``-1``; else if :meth:`dst` returns a 13307db96d56Sopenharmony_ci non-zero value, :attr:`tm_isdst` is set to ``1``; else :attr:`tm_isdst` is 13317db96d56Sopenharmony_ci set to ``0``. 13327db96d56Sopenharmony_ci 13337db96d56Sopenharmony_ci 13347db96d56Sopenharmony_ci.. method:: datetime.utctimetuple() 13357db96d56Sopenharmony_ci 13367db96d56Sopenharmony_ci If :class:`.datetime` instance *d* is naive, this is the same as 13377db96d56Sopenharmony_ci ``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of what 13387db96d56Sopenharmony_ci ``d.dst()`` returns. DST is never in effect for a UTC time. 13397db96d56Sopenharmony_ci 13407db96d56Sopenharmony_ci If *d* is aware, *d* is normalized to UTC time, by subtracting 13417db96d56Sopenharmony_ci ``d.utcoffset()``, and a :class:`time.struct_time` for the 13427db96d56Sopenharmony_ci normalized time is returned. :attr:`tm_isdst` is forced to 0. Note 13437db96d56Sopenharmony_ci that an :exc:`OverflowError` may be raised if *d*.year was 13447db96d56Sopenharmony_ci ``MINYEAR`` or ``MAXYEAR`` and UTC adjustment spills over a year 13457db96d56Sopenharmony_ci boundary. 13467db96d56Sopenharmony_ci 13477db96d56Sopenharmony_ci .. warning:: 13487db96d56Sopenharmony_ci 13497db96d56Sopenharmony_ci Because naive ``datetime`` objects are treated by many ``datetime`` methods 13507db96d56Sopenharmony_ci as local times, it is preferred to use aware datetimes to represent times 13517db96d56Sopenharmony_ci in UTC; as a result, using :meth:`datetime.utctimetuple` may give misleading 13527db96d56Sopenharmony_ci results. If you have a naive ``datetime`` representing UTC, use 13537db96d56Sopenharmony_ci ``datetime.replace(tzinfo=timezone.utc)`` to make it aware, at which point 13547db96d56Sopenharmony_ci you can use :meth:`.datetime.timetuple`. 13557db96d56Sopenharmony_ci 13567db96d56Sopenharmony_ci.. method:: datetime.toordinal() 13577db96d56Sopenharmony_ci 13587db96d56Sopenharmony_ci Return the proleptic Gregorian ordinal of the date. The same as 13597db96d56Sopenharmony_ci ``self.date().toordinal()``. 13607db96d56Sopenharmony_ci 13617db96d56Sopenharmony_ci.. method:: datetime.timestamp() 13627db96d56Sopenharmony_ci 13637db96d56Sopenharmony_ci Return POSIX timestamp corresponding to the :class:`.datetime` 13647db96d56Sopenharmony_ci instance. The return value is a :class:`float` similar to that 13657db96d56Sopenharmony_ci returned by :func:`time.time`. 13667db96d56Sopenharmony_ci 13677db96d56Sopenharmony_ci Naive :class:`.datetime` instances are assumed to represent local 13687db96d56Sopenharmony_ci time and this method relies on the platform C :c:func:`mktime` 13697db96d56Sopenharmony_ci function to perform the conversion. Since :class:`.datetime` 13707db96d56Sopenharmony_ci supports wider range of values than :c:func:`mktime` on many 13717db96d56Sopenharmony_ci platforms, this method may raise :exc:`OverflowError` for times far 13727db96d56Sopenharmony_ci in the past or far in the future. 13737db96d56Sopenharmony_ci 13747db96d56Sopenharmony_ci For aware :class:`.datetime` instances, the return value is computed 13757db96d56Sopenharmony_ci as:: 13767db96d56Sopenharmony_ci 13777db96d56Sopenharmony_ci (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds() 13787db96d56Sopenharmony_ci 13797db96d56Sopenharmony_ci .. versionadded:: 3.3 13807db96d56Sopenharmony_ci 13817db96d56Sopenharmony_ci .. versionchanged:: 3.6 13827db96d56Sopenharmony_ci The :meth:`timestamp` method uses the :attr:`.fold` attribute to 13837db96d56Sopenharmony_ci disambiguate the times during a repeated interval. 13847db96d56Sopenharmony_ci 13857db96d56Sopenharmony_ci .. note:: 13867db96d56Sopenharmony_ci 13877db96d56Sopenharmony_ci There is no method to obtain the POSIX timestamp directly from a 13887db96d56Sopenharmony_ci naive :class:`.datetime` instance representing UTC time. If your 13897db96d56Sopenharmony_ci application uses this convention and your system timezone is not 13907db96d56Sopenharmony_ci set to UTC, you can obtain the POSIX timestamp by supplying 13917db96d56Sopenharmony_ci ``tzinfo=timezone.utc``:: 13927db96d56Sopenharmony_ci 13937db96d56Sopenharmony_ci timestamp = dt.replace(tzinfo=timezone.utc).timestamp() 13947db96d56Sopenharmony_ci 13957db96d56Sopenharmony_ci or by calculating the timestamp directly:: 13967db96d56Sopenharmony_ci 13977db96d56Sopenharmony_ci timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1) 13987db96d56Sopenharmony_ci 13997db96d56Sopenharmony_ci.. method:: datetime.weekday() 14007db96d56Sopenharmony_ci 14017db96d56Sopenharmony_ci Return the day of the week as an integer, where Monday is 0 and Sunday is 6. 14027db96d56Sopenharmony_ci The same as ``self.date().weekday()``. See also :meth:`isoweekday`. 14037db96d56Sopenharmony_ci 14047db96d56Sopenharmony_ci 14057db96d56Sopenharmony_ci.. method:: datetime.isoweekday() 14067db96d56Sopenharmony_ci 14077db96d56Sopenharmony_ci Return the day of the week as an integer, where Monday is 1 and Sunday is 7. 14087db96d56Sopenharmony_ci The same as ``self.date().isoweekday()``. See also :meth:`weekday`, 14097db96d56Sopenharmony_ci :meth:`isocalendar`. 14107db96d56Sopenharmony_ci 14117db96d56Sopenharmony_ci 14127db96d56Sopenharmony_ci.. method:: datetime.isocalendar() 14137db96d56Sopenharmony_ci 14147db96d56Sopenharmony_ci Return a :term:`named tuple` with three components: ``year``, ``week`` 14157db96d56Sopenharmony_ci and ``weekday``. The same as ``self.date().isocalendar()``. 14167db96d56Sopenharmony_ci 14177db96d56Sopenharmony_ci 14187db96d56Sopenharmony_ci.. method:: datetime.isoformat(sep='T', timespec='auto') 14197db96d56Sopenharmony_ci 14207db96d56Sopenharmony_ci Return a string representing the date and time in ISO 8601 format: 14217db96d56Sopenharmony_ci 14227db96d56Sopenharmony_ci - ``YYYY-MM-DDTHH:MM:SS.ffffff``, if :attr:`microsecond` is not 0 14237db96d56Sopenharmony_ci - ``YYYY-MM-DDTHH:MM:SS``, if :attr:`microsecond` is 0 14247db96d56Sopenharmony_ci 14257db96d56Sopenharmony_ci If :meth:`utcoffset` does not return ``None``, a string is 14267db96d56Sopenharmony_ci appended, giving the UTC offset: 14277db96d56Sopenharmony_ci 14287db96d56Sopenharmony_ci - ``YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` 14297db96d56Sopenharmony_ci is not 0 14307db96d56Sopenharmony_ci - ``YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` is 0 14317db96d56Sopenharmony_ci 14327db96d56Sopenharmony_ci Examples:: 14337db96d56Sopenharmony_ci 14347db96d56Sopenharmony_ci >>> from datetime import datetime, timezone 14357db96d56Sopenharmony_ci >>> datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat() 14367db96d56Sopenharmony_ci '2019-05-18T15:17:08.132263' 14377db96d56Sopenharmony_ci >>> datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat() 14387db96d56Sopenharmony_ci '2019-05-18T15:17:00+00:00' 14397db96d56Sopenharmony_ci 14407db96d56Sopenharmony_ci The optional argument *sep* (default ``'T'``) is a one-character separator, 14417db96d56Sopenharmony_ci placed between the date and time portions of the result. For example:: 14427db96d56Sopenharmony_ci 14437db96d56Sopenharmony_ci >>> from datetime import tzinfo, timedelta, datetime 14447db96d56Sopenharmony_ci >>> class TZ(tzinfo): 14457db96d56Sopenharmony_ci ... """A time zone with an arbitrary, constant -06:39 offset.""" 14467db96d56Sopenharmony_ci ... def utcoffset(self, dt): 14477db96d56Sopenharmony_ci ... return timedelta(hours=-6, minutes=-39) 14487db96d56Sopenharmony_ci ... 14497db96d56Sopenharmony_ci >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ') 14507db96d56Sopenharmony_ci '2002-12-25 00:00:00-06:39' 14517db96d56Sopenharmony_ci >>> datetime(2009, 11, 27, microsecond=100, tzinfo=TZ()).isoformat() 14527db96d56Sopenharmony_ci '2009-11-27T00:00:00.000100-06:39' 14537db96d56Sopenharmony_ci 14547db96d56Sopenharmony_ci The optional argument *timespec* specifies the number of additional 14557db96d56Sopenharmony_ci components of the time to include (the default is ``'auto'``). 14567db96d56Sopenharmony_ci It can be one of the following: 14577db96d56Sopenharmony_ci 14587db96d56Sopenharmony_ci - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0, 14597db96d56Sopenharmony_ci same as ``'microseconds'`` otherwise. 14607db96d56Sopenharmony_ci - ``'hours'``: Include the :attr:`hour` in the two-digit ``HH`` format. 14617db96d56Sopenharmony_ci - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in ``HH:MM`` format. 14627db96d56Sopenharmony_ci - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second` 14637db96d56Sopenharmony_ci in ``HH:MM:SS`` format. 14647db96d56Sopenharmony_ci - ``'milliseconds'``: Include full time, but truncate fractional second 14657db96d56Sopenharmony_ci part to milliseconds. ``HH:MM:SS.sss`` format. 14667db96d56Sopenharmony_ci - ``'microseconds'``: Include full time in ``HH:MM:SS.ffffff`` format. 14677db96d56Sopenharmony_ci 14687db96d56Sopenharmony_ci .. note:: 14697db96d56Sopenharmony_ci 14707db96d56Sopenharmony_ci Excluded time components are truncated, not rounded. 14717db96d56Sopenharmony_ci 14727db96d56Sopenharmony_ci :exc:`ValueError` will be raised on an invalid *timespec* argument:: 14737db96d56Sopenharmony_ci 14747db96d56Sopenharmony_ci 14757db96d56Sopenharmony_ci >>> from datetime import datetime 14767db96d56Sopenharmony_ci >>> datetime.now().isoformat(timespec='minutes') # doctest: +SKIP 14777db96d56Sopenharmony_ci '2002-12-25T00:00' 14787db96d56Sopenharmony_ci >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0) 14797db96d56Sopenharmony_ci >>> dt.isoformat(timespec='microseconds') 14807db96d56Sopenharmony_ci '2015-01-01T12:30:59.000000' 14817db96d56Sopenharmony_ci 14827db96d56Sopenharmony_ci .. versionadded:: 3.6 14837db96d56Sopenharmony_ci Added the *timespec* argument. 14847db96d56Sopenharmony_ci 14857db96d56Sopenharmony_ci 14867db96d56Sopenharmony_ci.. method:: datetime.__str__() 14877db96d56Sopenharmony_ci 14887db96d56Sopenharmony_ci For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to 14897db96d56Sopenharmony_ci ``d.isoformat(' ')``. 14907db96d56Sopenharmony_ci 14917db96d56Sopenharmony_ci 14927db96d56Sopenharmony_ci.. method:: datetime.ctime() 14937db96d56Sopenharmony_ci 14947db96d56Sopenharmony_ci Return a string representing the date and time:: 14957db96d56Sopenharmony_ci 14967db96d56Sopenharmony_ci >>> from datetime import datetime 14977db96d56Sopenharmony_ci >>> datetime(2002, 12, 4, 20, 30, 40).ctime() 14987db96d56Sopenharmony_ci 'Wed Dec 4 20:30:40 2002' 14997db96d56Sopenharmony_ci 15007db96d56Sopenharmony_ci The output string will *not* include time zone information, regardless 15017db96d56Sopenharmony_ci of whether the input is aware or naive. 15027db96d56Sopenharmony_ci 15037db96d56Sopenharmony_ci ``d.ctime()`` is equivalent to:: 15047db96d56Sopenharmony_ci 15057db96d56Sopenharmony_ci time.ctime(time.mktime(d.timetuple())) 15067db96d56Sopenharmony_ci 15077db96d56Sopenharmony_ci on platforms where the native C :c:func:`ctime` function 15087db96d56Sopenharmony_ci (which :func:`time.ctime` invokes, but which 15097db96d56Sopenharmony_ci :meth:`datetime.ctime` does not invoke) conforms to the C standard. 15107db96d56Sopenharmony_ci 15117db96d56Sopenharmony_ci 15127db96d56Sopenharmony_ci.. method:: datetime.strftime(format) 15137db96d56Sopenharmony_ci 15147db96d56Sopenharmony_ci Return a string representing the date and time, 15157db96d56Sopenharmony_ci controlled by an explicit format string. 15167db96d56Sopenharmony_ci See also :ref:`strftime-strptime-behavior` and :meth:`datetime.isoformat`. 15177db96d56Sopenharmony_ci 15187db96d56Sopenharmony_ci 15197db96d56Sopenharmony_ci.. method:: datetime.__format__(format) 15207db96d56Sopenharmony_ci 15217db96d56Sopenharmony_ci Same as :meth:`.datetime.strftime`. This makes it possible to specify a format 15227db96d56Sopenharmony_ci string for a :class:`.datetime` object in :ref:`formatted string 15237db96d56Sopenharmony_ci literals <f-strings>` and when using :meth:`str.format`. 15247db96d56Sopenharmony_ci See also :ref:`strftime-strptime-behavior` and :meth:`datetime.isoformat`. 15257db96d56Sopenharmony_ci 15267db96d56Sopenharmony_ci 15277db96d56Sopenharmony_ciExamples of Usage: :class:`.datetime` 15287db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 15297db96d56Sopenharmony_ci 15307db96d56Sopenharmony_ciExamples of working with :class:`~datetime.datetime` objects: 15317db96d56Sopenharmony_ci 15327db96d56Sopenharmony_ci.. doctest:: 15337db96d56Sopenharmony_ci 15347db96d56Sopenharmony_ci >>> from datetime import datetime, date, time, timezone 15357db96d56Sopenharmony_ci 15367db96d56Sopenharmony_ci >>> # Using datetime.combine() 15377db96d56Sopenharmony_ci >>> d = date(2005, 7, 14) 15387db96d56Sopenharmony_ci >>> t = time(12, 30) 15397db96d56Sopenharmony_ci >>> datetime.combine(d, t) 15407db96d56Sopenharmony_ci datetime.datetime(2005, 7, 14, 12, 30) 15417db96d56Sopenharmony_ci 15427db96d56Sopenharmony_ci >>> # Using datetime.now() 15437db96d56Sopenharmony_ci >>> datetime.now() # doctest: +SKIP 15447db96d56Sopenharmony_ci datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1 15457db96d56Sopenharmony_ci >>> datetime.now(timezone.utc) # doctest: +SKIP 15467db96d56Sopenharmony_ci datetime.datetime(2007, 12, 6, 15, 29, 43, 79060, tzinfo=datetime.timezone.utc) 15477db96d56Sopenharmony_ci 15487db96d56Sopenharmony_ci >>> # Using datetime.strptime() 15497db96d56Sopenharmony_ci >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") 15507db96d56Sopenharmony_ci >>> dt 15517db96d56Sopenharmony_ci datetime.datetime(2006, 11, 21, 16, 30) 15527db96d56Sopenharmony_ci 15537db96d56Sopenharmony_ci >>> # Using datetime.timetuple() to get tuple of all attributes 15547db96d56Sopenharmony_ci >>> tt = dt.timetuple() 15557db96d56Sopenharmony_ci >>> for it in tt: # doctest: +SKIP 15567db96d56Sopenharmony_ci ... print(it) 15577db96d56Sopenharmony_ci ... 15587db96d56Sopenharmony_ci 2006 # year 15597db96d56Sopenharmony_ci 11 # month 15607db96d56Sopenharmony_ci 21 # day 15617db96d56Sopenharmony_ci 16 # hour 15627db96d56Sopenharmony_ci 30 # minute 15637db96d56Sopenharmony_ci 0 # second 15647db96d56Sopenharmony_ci 1 # weekday (0 = Monday) 15657db96d56Sopenharmony_ci 325 # number of days since 1st January 15667db96d56Sopenharmony_ci -1 # dst - method tzinfo.dst() returned None 15677db96d56Sopenharmony_ci 15687db96d56Sopenharmony_ci >>> # Date in ISO format 15697db96d56Sopenharmony_ci >>> ic = dt.isocalendar() 15707db96d56Sopenharmony_ci >>> for it in ic: # doctest: +SKIP 15717db96d56Sopenharmony_ci ... print(it) 15727db96d56Sopenharmony_ci ... 15737db96d56Sopenharmony_ci 2006 # ISO year 15747db96d56Sopenharmony_ci 47 # ISO week 15757db96d56Sopenharmony_ci 2 # ISO weekday 15767db96d56Sopenharmony_ci 15777db96d56Sopenharmony_ci >>> # Formatting a datetime 15787db96d56Sopenharmony_ci >>> dt.strftime("%A, %d. %B %Y %I:%M%p") 15797db96d56Sopenharmony_ci 'Tuesday, 21. November 2006 04:30PM' 15807db96d56Sopenharmony_ci >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time") 15817db96d56Sopenharmony_ci 'The day is 21, the month is November, the time is 04:30PM.' 15827db96d56Sopenharmony_ci 15837db96d56Sopenharmony_ciThe example below defines a :class:`tzinfo` subclass capturing time zone 15847db96d56Sopenharmony_ciinformation for Kabul, Afghanistan, which used +4 UTC until 1945 15857db96d56Sopenharmony_ciand then +4:30 UTC thereafter:: 15867db96d56Sopenharmony_ci 15877db96d56Sopenharmony_ci from datetime import timedelta, datetime, tzinfo, timezone 15887db96d56Sopenharmony_ci 15897db96d56Sopenharmony_ci class KabulTz(tzinfo): 15907db96d56Sopenharmony_ci # Kabul used +4 until 1945, when they moved to +4:30 15917db96d56Sopenharmony_ci UTC_MOVE_DATE = datetime(1944, 12, 31, 20, tzinfo=timezone.utc) 15927db96d56Sopenharmony_ci 15937db96d56Sopenharmony_ci def utcoffset(self, dt): 15947db96d56Sopenharmony_ci if dt.year < 1945: 15957db96d56Sopenharmony_ci return timedelta(hours=4) 15967db96d56Sopenharmony_ci elif (1945, 1, 1, 0, 0) <= dt.timetuple()[:5] < (1945, 1, 1, 0, 30): 15977db96d56Sopenharmony_ci # An ambiguous ("imaginary") half-hour range representing 15987db96d56Sopenharmony_ci # a 'fold' in time due to the shift from +4 to +4:30. 15997db96d56Sopenharmony_ci # If dt falls in the imaginary range, use fold to decide how 16007db96d56Sopenharmony_ci # to resolve. See PEP495. 16017db96d56Sopenharmony_ci return timedelta(hours=4, minutes=(30 if dt.fold else 0)) 16027db96d56Sopenharmony_ci else: 16037db96d56Sopenharmony_ci return timedelta(hours=4, minutes=30) 16047db96d56Sopenharmony_ci 16057db96d56Sopenharmony_ci def fromutc(self, dt): 16067db96d56Sopenharmony_ci # Follow same validations as in datetime.tzinfo 16077db96d56Sopenharmony_ci if not isinstance(dt, datetime): 16087db96d56Sopenharmony_ci raise TypeError("fromutc() requires a datetime argument") 16097db96d56Sopenharmony_ci if dt.tzinfo is not self: 16107db96d56Sopenharmony_ci raise ValueError("dt.tzinfo is not self") 16117db96d56Sopenharmony_ci 16127db96d56Sopenharmony_ci # A custom implementation is required for fromutc as 16137db96d56Sopenharmony_ci # the input to this function is a datetime with utc values 16147db96d56Sopenharmony_ci # but with a tzinfo set to self. 16157db96d56Sopenharmony_ci # See datetime.astimezone or fromtimestamp. 16167db96d56Sopenharmony_ci if dt.replace(tzinfo=timezone.utc) >= self.UTC_MOVE_DATE: 16177db96d56Sopenharmony_ci return dt + timedelta(hours=4, minutes=30) 16187db96d56Sopenharmony_ci else: 16197db96d56Sopenharmony_ci return dt + timedelta(hours=4) 16207db96d56Sopenharmony_ci 16217db96d56Sopenharmony_ci def dst(self, dt): 16227db96d56Sopenharmony_ci # Kabul does not observe daylight saving time. 16237db96d56Sopenharmony_ci return timedelta(0) 16247db96d56Sopenharmony_ci 16257db96d56Sopenharmony_ci def tzname(self, dt): 16267db96d56Sopenharmony_ci if dt >= self.UTC_MOVE_DATE: 16277db96d56Sopenharmony_ci return "+04:30" 16287db96d56Sopenharmony_ci return "+04" 16297db96d56Sopenharmony_ci 16307db96d56Sopenharmony_ciUsage of ``KabulTz`` from above:: 16317db96d56Sopenharmony_ci 16327db96d56Sopenharmony_ci >>> tz1 = KabulTz() 16337db96d56Sopenharmony_ci 16347db96d56Sopenharmony_ci >>> # Datetime before the change 16357db96d56Sopenharmony_ci >>> dt1 = datetime(1900, 11, 21, 16, 30, tzinfo=tz1) 16367db96d56Sopenharmony_ci >>> print(dt1.utcoffset()) 16377db96d56Sopenharmony_ci 4:00:00 16387db96d56Sopenharmony_ci 16397db96d56Sopenharmony_ci >>> # Datetime after the change 16407db96d56Sopenharmony_ci >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=tz1) 16417db96d56Sopenharmony_ci >>> print(dt2.utcoffset()) 16427db96d56Sopenharmony_ci 4:30:00 16437db96d56Sopenharmony_ci 16447db96d56Sopenharmony_ci >>> # Convert datetime to another time zone 16457db96d56Sopenharmony_ci >>> dt3 = dt2.astimezone(timezone.utc) 16467db96d56Sopenharmony_ci >>> dt3 16477db96d56Sopenharmony_ci datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc) 16487db96d56Sopenharmony_ci >>> dt2 16497db96d56Sopenharmony_ci datetime.datetime(2006, 6, 14, 13, 0, tzinfo=KabulTz()) 16507db96d56Sopenharmony_ci >>> dt2 == dt3 16517db96d56Sopenharmony_ci True 16527db96d56Sopenharmony_ci 16537db96d56Sopenharmony_ci.. _datetime-time: 16547db96d56Sopenharmony_ci 16557db96d56Sopenharmony_ci:class:`.time` Objects 16567db96d56Sopenharmony_ci---------------------- 16577db96d56Sopenharmony_ci 16587db96d56Sopenharmony_ciA :class:`time` object represents a (local) time of day, independent of any particular 16597db96d56Sopenharmony_ciday, and subject to adjustment via a :class:`tzinfo` object. 16607db96d56Sopenharmony_ci 16617db96d56Sopenharmony_ci.. class:: time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0) 16627db96d56Sopenharmony_ci 16637db96d56Sopenharmony_ci All arguments are optional. *tzinfo* may be ``None``, or an instance of a 16647db96d56Sopenharmony_ci :class:`tzinfo` subclass. The remaining arguments must be integers in the 16657db96d56Sopenharmony_ci following ranges: 16667db96d56Sopenharmony_ci 16677db96d56Sopenharmony_ci * ``0 <= hour < 24``, 16687db96d56Sopenharmony_ci * ``0 <= minute < 60``, 16697db96d56Sopenharmony_ci * ``0 <= second < 60``, 16707db96d56Sopenharmony_ci * ``0 <= microsecond < 1000000``, 16717db96d56Sopenharmony_ci * ``fold in [0, 1]``. 16727db96d56Sopenharmony_ci 16737db96d56Sopenharmony_ci If an argument outside those ranges is given, :exc:`ValueError` is raised. All 16747db96d56Sopenharmony_ci default to ``0`` except *tzinfo*, which defaults to :const:`None`. 16757db96d56Sopenharmony_ci 16767db96d56Sopenharmony_ciClass attributes: 16777db96d56Sopenharmony_ci 16787db96d56Sopenharmony_ci 16797db96d56Sopenharmony_ci.. attribute:: time.min 16807db96d56Sopenharmony_ci 16817db96d56Sopenharmony_ci The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``. 16827db96d56Sopenharmony_ci 16837db96d56Sopenharmony_ci 16847db96d56Sopenharmony_ci.. attribute:: time.max 16857db96d56Sopenharmony_ci 16867db96d56Sopenharmony_ci The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``. 16877db96d56Sopenharmony_ci 16887db96d56Sopenharmony_ci 16897db96d56Sopenharmony_ci.. attribute:: time.resolution 16907db96d56Sopenharmony_ci 16917db96d56Sopenharmony_ci The smallest possible difference between non-equal :class:`.time` objects, 16927db96d56Sopenharmony_ci ``timedelta(microseconds=1)``, although note that arithmetic on 16937db96d56Sopenharmony_ci :class:`.time` objects is not supported. 16947db96d56Sopenharmony_ci 16957db96d56Sopenharmony_ci 16967db96d56Sopenharmony_ciInstance attributes (read-only): 16977db96d56Sopenharmony_ci 16987db96d56Sopenharmony_ci.. attribute:: time.hour 16997db96d56Sopenharmony_ci 17007db96d56Sopenharmony_ci In ``range(24)``. 17017db96d56Sopenharmony_ci 17027db96d56Sopenharmony_ci 17037db96d56Sopenharmony_ci.. attribute:: time.minute 17047db96d56Sopenharmony_ci 17057db96d56Sopenharmony_ci In ``range(60)``. 17067db96d56Sopenharmony_ci 17077db96d56Sopenharmony_ci 17087db96d56Sopenharmony_ci.. attribute:: time.second 17097db96d56Sopenharmony_ci 17107db96d56Sopenharmony_ci In ``range(60)``. 17117db96d56Sopenharmony_ci 17127db96d56Sopenharmony_ci 17137db96d56Sopenharmony_ci.. attribute:: time.microsecond 17147db96d56Sopenharmony_ci 17157db96d56Sopenharmony_ci In ``range(1000000)``. 17167db96d56Sopenharmony_ci 17177db96d56Sopenharmony_ci 17187db96d56Sopenharmony_ci.. attribute:: time.tzinfo 17197db96d56Sopenharmony_ci 17207db96d56Sopenharmony_ci The object passed as the tzinfo argument to the :class:`.time` constructor, or 17217db96d56Sopenharmony_ci ``None`` if none was passed. 17227db96d56Sopenharmony_ci 17237db96d56Sopenharmony_ci 17247db96d56Sopenharmony_ci.. attribute:: time.fold 17257db96d56Sopenharmony_ci 17267db96d56Sopenharmony_ci In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. (A 17277db96d56Sopenharmony_ci repeated interval occurs when clocks are rolled back at the end of daylight saving 17287db96d56Sopenharmony_ci time or when the UTC offset for the current zone is decreased for political reasons.) 17297db96d56Sopenharmony_ci The value 0 (1) represents the earlier (later) of the two moments with the same wall 17307db96d56Sopenharmony_ci time representation. 17317db96d56Sopenharmony_ci 17327db96d56Sopenharmony_ci .. versionadded:: 3.6 17337db96d56Sopenharmony_ci 17347db96d56Sopenharmony_ci:class:`.time` objects support comparison of :class:`.time` to :class:`.time`, 17357db96d56Sopenharmony_ciwhere *a* is considered less 17367db96d56Sopenharmony_cithan *b* when *a* precedes *b* in time. If one comparand is naive and the other 17377db96d56Sopenharmony_ciis aware, :exc:`TypeError` is raised if an order comparison is attempted. For equality 17387db96d56Sopenharmony_cicomparisons, naive instances are never equal to aware instances. 17397db96d56Sopenharmony_ci 17407db96d56Sopenharmony_ciIf both comparands are aware, and have 17417db96d56Sopenharmony_cithe same :attr:`~time.tzinfo` attribute, the common :attr:`~time.tzinfo` attribute is 17427db96d56Sopenharmony_ciignored and the base times are compared. If both comparands are aware and 17437db96d56Sopenharmony_cihave different :attr:`~time.tzinfo` attributes, the comparands are first adjusted by 17447db96d56Sopenharmony_cisubtracting their UTC offsets (obtained from ``self.utcoffset()``). In order 17457db96d56Sopenharmony_cito stop mixed-type comparisons from falling back to the default comparison by 17467db96d56Sopenharmony_ciobject address, when a :class:`.time` object is compared to an object of a 17477db96d56Sopenharmony_cidifferent type, :exc:`TypeError` is raised unless the comparison is ``==`` or 17487db96d56Sopenharmony_ci``!=``. The latter cases return :const:`False` or :const:`True`, respectively. 17497db96d56Sopenharmony_ci 17507db96d56Sopenharmony_ci.. versionchanged:: 3.3 17517db96d56Sopenharmony_ci Equality comparisons between aware and naive :class:`~datetime.time` instances 17527db96d56Sopenharmony_ci don't raise :exc:`TypeError`. 17537db96d56Sopenharmony_ci 17547db96d56Sopenharmony_ciIn Boolean contexts, a :class:`.time` object is always considered to be true. 17557db96d56Sopenharmony_ci 17567db96d56Sopenharmony_ci.. versionchanged:: 3.5 17577db96d56Sopenharmony_ci Before Python 3.5, a :class:`.time` object was considered to be false if it 17587db96d56Sopenharmony_ci represented midnight in UTC. This behavior was considered obscure and 17597db96d56Sopenharmony_ci error-prone and has been removed in Python 3.5. See :issue:`13936` for full 17607db96d56Sopenharmony_ci details. 17617db96d56Sopenharmony_ci 17627db96d56Sopenharmony_ci 17637db96d56Sopenharmony_ciOther constructor: 17647db96d56Sopenharmony_ci 17657db96d56Sopenharmony_ci.. classmethod:: time.fromisoformat(time_string) 17667db96d56Sopenharmony_ci 17677db96d56Sopenharmony_ci Return a :class:`.time` corresponding to a *time_string* in any valid 17687db96d56Sopenharmony_ci ISO 8601 format, with the following exceptions: 17697db96d56Sopenharmony_ci 17707db96d56Sopenharmony_ci 1. Time zone offsets may have fractional seconds. 17717db96d56Sopenharmony_ci 2. The leading ``T``, normally required in cases where there may be ambiguity between 17727db96d56Sopenharmony_ci a date and a time, is not required. 17737db96d56Sopenharmony_ci 3. Fractional seconds may have any number of digits (anything beyond 6 will 17747db96d56Sopenharmony_ci be truncated). 17757db96d56Sopenharmony_ci 4. Fractional hours and minutes are not supported. 17767db96d56Sopenharmony_ci 17777db96d56Sopenharmony_ci Examples:: 17787db96d56Sopenharmony_ci 17797db96d56Sopenharmony_ci >>> from datetime import time 17807db96d56Sopenharmony_ci >>> time.fromisoformat('04:23:01') 17817db96d56Sopenharmony_ci datetime.time(4, 23, 1) 17827db96d56Sopenharmony_ci >>> time.fromisoformat('T04:23:01') 17837db96d56Sopenharmony_ci datetime.time(4, 23, 1) 17847db96d56Sopenharmony_ci >>> time.fromisoformat('T042301') 17857db96d56Sopenharmony_ci datetime.time(4, 23, 1) 17867db96d56Sopenharmony_ci >>> time.fromisoformat('04:23:01.000384') 17877db96d56Sopenharmony_ci datetime.time(4, 23, 1, 384) 17887db96d56Sopenharmony_ci >>> time.fromisoformat('04:23:01,000') 17897db96d56Sopenharmony_ci datetime.time(4, 23, 1, 384) 17907db96d56Sopenharmony_ci >>> time.fromisoformat('04:23:01+04:00') 17917db96d56Sopenharmony_ci datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400))) 17927db96d56Sopenharmony_ci >>> time.fromisoformat('04:23:01Z') 17937db96d56Sopenharmony_ci datetime.time(4, 23, 1, tzinfo=datetime.timezone.utc) 17947db96d56Sopenharmony_ci >>> time.fromisoformat('04:23:01+00:00') 17957db96d56Sopenharmony_ci datetime.time(4, 23, 1, tzinfo=datetime.timezone.utc) 17967db96d56Sopenharmony_ci 17977db96d56Sopenharmony_ci 17987db96d56Sopenharmony_ci .. versionadded:: 3.7 17997db96d56Sopenharmony_ci .. versionchanged:: 3.11 18007db96d56Sopenharmony_ci Previously, this method only supported formats that could be emitted by 18017db96d56Sopenharmony_ci :meth:`time.isoformat()`. 18027db96d56Sopenharmony_ci 18037db96d56Sopenharmony_ci 18047db96d56Sopenharmony_ciInstance methods: 18057db96d56Sopenharmony_ci 18067db96d56Sopenharmony_ci.. method:: time.replace(hour=self.hour, minute=self.minute, second=self.second, \ 18077db96d56Sopenharmony_ci microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0) 18087db96d56Sopenharmony_ci 18097db96d56Sopenharmony_ci Return a :class:`.time` with the same value, except for those attributes given 18107db96d56Sopenharmony_ci new values by whichever keyword arguments are specified. Note that 18117db96d56Sopenharmony_ci ``tzinfo=None`` can be specified to create a naive :class:`.time` from an 18127db96d56Sopenharmony_ci aware :class:`.time`, without conversion of the time data. 18137db96d56Sopenharmony_ci 18147db96d56Sopenharmony_ci .. versionadded:: 3.6 18157db96d56Sopenharmony_ci Added the ``fold`` argument. 18167db96d56Sopenharmony_ci 18177db96d56Sopenharmony_ci 18187db96d56Sopenharmony_ci.. method:: time.isoformat(timespec='auto') 18197db96d56Sopenharmony_ci 18207db96d56Sopenharmony_ci Return a string representing the time in ISO 8601 format, one of: 18217db96d56Sopenharmony_ci 18227db96d56Sopenharmony_ci - ``HH:MM:SS.ffffff``, if :attr:`microsecond` is not 0 18237db96d56Sopenharmony_ci - ``HH:MM:SS``, if :attr:`microsecond` is 0 18247db96d56Sopenharmony_ci - ``HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :meth:`utcoffset` does not return ``None`` 18257db96d56Sopenharmony_ci - ``HH:MM:SS+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` is 0 and :meth:`utcoffset` does not return ``None`` 18267db96d56Sopenharmony_ci 18277db96d56Sopenharmony_ci The optional argument *timespec* specifies the number of additional 18287db96d56Sopenharmony_ci components of the time to include (the default is ``'auto'``). 18297db96d56Sopenharmony_ci It can be one of the following: 18307db96d56Sopenharmony_ci 18317db96d56Sopenharmony_ci - ``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0, 18327db96d56Sopenharmony_ci same as ``'microseconds'`` otherwise. 18337db96d56Sopenharmony_ci - ``'hours'``: Include the :attr:`hour` in the two-digit ``HH`` format. 18347db96d56Sopenharmony_ci - ``'minutes'``: Include :attr:`hour` and :attr:`minute` in ``HH:MM`` format. 18357db96d56Sopenharmony_ci - ``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second` 18367db96d56Sopenharmony_ci in ``HH:MM:SS`` format. 18377db96d56Sopenharmony_ci - ``'milliseconds'``: Include full time, but truncate fractional second 18387db96d56Sopenharmony_ci part to milliseconds. ``HH:MM:SS.sss`` format. 18397db96d56Sopenharmony_ci - ``'microseconds'``: Include full time in ``HH:MM:SS.ffffff`` format. 18407db96d56Sopenharmony_ci 18417db96d56Sopenharmony_ci .. note:: 18427db96d56Sopenharmony_ci 18437db96d56Sopenharmony_ci Excluded time components are truncated, not rounded. 18447db96d56Sopenharmony_ci 18457db96d56Sopenharmony_ci :exc:`ValueError` will be raised on an invalid *timespec* argument. 18467db96d56Sopenharmony_ci 18477db96d56Sopenharmony_ci Example:: 18487db96d56Sopenharmony_ci 18497db96d56Sopenharmony_ci >>> from datetime import time 18507db96d56Sopenharmony_ci >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes') 18517db96d56Sopenharmony_ci '12:34' 18527db96d56Sopenharmony_ci >>> dt = time(hour=12, minute=34, second=56, microsecond=0) 18537db96d56Sopenharmony_ci >>> dt.isoformat(timespec='microseconds') 18547db96d56Sopenharmony_ci '12:34:56.000000' 18557db96d56Sopenharmony_ci >>> dt.isoformat(timespec='auto') 18567db96d56Sopenharmony_ci '12:34:56' 18577db96d56Sopenharmony_ci 18587db96d56Sopenharmony_ci .. versionadded:: 3.6 18597db96d56Sopenharmony_ci Added the *timespec* argument. 18607db96d56Sopenharmony_ci 18617db96d56Sopenharmony_ci 18627db96d56Sopenharmony_ci.. method:: time.__str__() 18637db96d56Sopenharmony_ci 18647db96d56Sopenharmony_ci For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``. 18657db96d56Sopenharmony_ci 18667db96d56Sopenharmony_ci 18677db96d56Sopenharmony_ci.. method:: time.strftime(format) 18687db96d56Sopenharmony_ci 18697db96d56Sopenharmony_ci Return a string representing the time, controlled by an explicit format 18707db96d56Sopenharmony_ci string. See also :ref:`strftime-strptime-behavior` and :meth:`time.isoformat`. 18717db96d56Sopenharmony_ci 18727db96d56Sopenharmony_ci 18737db96d56Sopenharmony_ci.. method:: time.__format__(format) 18747db96d56Sopenharmony_ci 18757db96d56Sopenharmony_ci Same as :meth:`.time.strftime`. This makes it possible to specify 18767db96d56Sopenharmony_ci a format string for a :class:`.time` object in :ref:`formatted string 18777db96d56Sopenharmony_ci literals <f-strings>` and when using :meth:`str.format`. 18787db96d56Sopenharmony_ci See also :ref:`strftime-strptime-behavior` and :meth:`time.isoformat`. 18797db96d56Sopenharmony_ci 18807db96d56Sopenharmony_ci 18817db96d56Sopenharmony_ci.. method:: time.utcoffset() 18827db96d56Sopenharmony_ci 18837db96d56Sopenharmony_ci If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 18847db96d56Sopenharmony_ci ``self.tzinfo.utcoffset(None)``, and raises an exception if the latter doesn't 18857db96d56Sopenharmony_ci return ``None`` or a :class:`timedelta` object with magnitude less than one day. 18867db96d56Sopenharmony_ci 18877db96d56Sopenharmony_ci .. versionchanged:: 3.7 18887db96d56Sopenharmony_ci The UTC offset is not restricted to a whole number of minutes. 18897db96d56Sopenharmony_ci 18907db96d56Sopenharmony_ci 18917db96d56Sopenharmony_ci.. method:: time.dst() 18927db96d56Sopenharmony_ci 18937db96d56Sopenharmony_ci If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 18947db96d56Sopenharmony_ci ``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't return 18957db96d56Sopenharmony_ci ``None``, or a :class:`timedelta` object with magnitude less than one day. 18967db96d56Sopenharmony_ci 18977db96d56Sopenharmony_ci .. versionchanged:: 3.7 18987db96d56Sopenharmony_ci The DST offset is not restricted to a whole number of minutes. 18997db96d56Sopenharmony_ci 19007db96d56Sopenharmony_ci.. method:: time.tzname() 19017db96d56Sopenharmony_ci 19027db96d56Sopenharmony_ci If :attr:`.tzinfo` is ``None``, returns ``None``, else returns 19037db96d56Sopenharmony_ci ``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't 19047db96d56Sopenharmony_ci return ``None`` or a string object. 19057db96d56Sopenharmony_ci 19067db96d56Sopenharmony_ciExamples of Usage: :class:`.time` 19077db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 19087db96d56Sopenharmony_ci 19097db96d56Sopenharmony_ciExamples of working with a :class:`.time` object:: 19107db96d56Sopenharmony_ci 19117db96d56Sopenharmony_ci >>> from datetime import time, tzinfo, timedelta 19127db96d56Sopenharmony_ci >>> class TZ1(tzinfo): 19137db96d56Sopenharmony_ci ... def utcoffset(self, dt): 19147db96d56Sopenharmony_ci ... return timedelta(hours=1) 19157db96d56Sopenharmony_ci ... def dst(self, dt): 19167db96d56Sopenharmony_ci ... return timedelta(0) 19177db96d56Sopenharmony_ci ... def tzname(self,dt): 19187db96d56Sopenharmony_ci ... return "+01:00" 19197db96d56Sopenharmony_ci ... def __repr__(self): 19207db96d56Sopenharmony_ci ... return f"{self.__class__.__name__}()" 19217db96d56Sopenharmony_ci ... 19227db96d56Sopenharmony_ci >>> t = time(12, 10, 30, tzinfo=TZ1()) 19237db96d56Sopenharmony_ci >>> t 19247db96d56Sopenharmony_ci datetime.time(12, 10, 30, tzinfo=TZ1()) 19257db96d56Sopenharmony_ci >>> t.isoformat() 19267db96d56Sopenharmony_ci '12:10:30+01:00' 19277db96d56Sopenharmony_ci >>> t.dst() 19287db96d56Sopenharmony_ci datetime.timedelta(0) 19297db96d56Sopenharmony_ci >>> t.tzname() 19307db96d56Sopenharmony_ci '+01:00' 19317db96d56Sopenharmony_ci >>> t.strftime("%H:%M:%S %Z") 19327db96d56Sopenharmony_ci '12:10:30 +01:00' 19337db96d56Sopenharmony_ci >>> 'The {} is {:%H:%M}.'.format("time", t) 19347db96d56Sopenharmony_ci 'The time is 12:10.' 19357db96d56Sopenharmony_ci 19367db96d56Sopenharmony_ci 19377db96d56Sopenharmony_ci.. _datetime-tzinfo: 19387db96d56Sopenharmony_ci 19397db96d56Sopenharmony_ci:class:`tzinfo` Objects 19407db96d56Sopenharmony_ci----------------------- 19417db96d56Sopenharmony_ci 19427db96d56Sopenharmony_ci.. class:: tzinfo() 19437db96d56Sopenharmony_ci 19447db96d56Sopenharmony_ci This is an abstract base class, meaning that this class should not be 19457db96d56Sopenharmony_ci instantiated directly. Define a subclass of :class:`tzinfo` to capture 19467db96d56Sopenharmony_ci information about a particular time zone. 19477db96d56Sopenharmony_ci 19487db96d56Sopenharmony_ci An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the 19497db96d56Sopenharmony_ci constructors for :class:`.datetime` and :class:`.time` objects. The latter objects 19507db96d56Sopenharmony_ci view their attributes as being in local time, and the :class:`tzinfo` object 19517db96d56Sopenharmony_ci supports methods revealing offset of local time from UTC, the name of the time 19527db96d56Sopenharmony_ci zone, and DST offset, all relative to a date or time object passed to them. 19537db96d56Sopenharmony_ci 19547db96d56Sopenharmony_ci You need to derive a concrete subclass, and (at least) 19557db96d56Sopenharmony_ci supply implementations of the standard :class:`tzinfo` methods needed by the 19567db96d56Sopenharmony_ci :class:`.datetime` methods you use. The :mod:`datetime` module provides 19577db96d56Sopenharmony_ci :class:`timezone`, a simple concrete subclass of :class:`tzinfo` which can 19587db96d56Sopenharmony_ci represent timezones with fixed offset from UTC such as UTC itself or North 19597db96d56Sopenharmony_ci American EST and EDT. 19607db96d56Sopenharmony_ci 19617db96d56Sopenharmony_ci Special requirement for pickling: A :class:`tzinfo` subclass must have an 19627db96d56Sopenharmony_ci :meth:`__init__` method that can be called with no arguments, otherwise it can be 19637db96d56Sopenharmony_ci pickled but possibly not unpickled again. This is a technical requirement that 19647db96d56Sopenharmony_ci may be relaxed in the future. 19657db96d56Sopenharmony_ci 19667db96d56Sopenharmony_ci A concrete subclass of :class:`tzinfo` may need to implement the following 19677db96d56Sopenharmony_ci methods. Exactly which methods are needed depends on the uses made of aware 19687db96d56Sopenharmony_ci :mod:`datetime` objects. If in doubt, simply implement all of them. 19697db96d56Sopenharmony_ci 19707db96d56Sopenharmony_ci 19717db96d56Sopenharmony_ci.. method:: tzinfo.utcoffset(dt) 19727db96d56Sopenharmony_ci 19737db96d56Sopenharmony_ci Return offset of local time from UTC, as a :class:`timedelta` object that is 19747db96d56Sopenharmony_ci positive east of UTC. If local time is west of UTC, this should be negative. 19757db96d56Sopenharmony_ci 19767db96d56Sopenharmony_ci This represents the *total* offset from UTC; for example, if a 19777db96d56Sopenharmony_ci :class:`tzinfo` object represents both time zone and DST adjustments, 19787db96d56Sopenharmony_ci :meth:`utcoffset` should return their sum. If the UTC offset isn't known, 19797db96d56Sopenharmony_ci return ``None``. Else the value returned must be a :class:`timedelta` object 19807db96d56Sopenharmony_ci strictly between ``-timedelta(hours=24)`` and ``timedelta(hours=24)`` 19817db96d56Sopenharmony_ci (the magnitude of the offset must be less than one day). Most implementations 19827db96d56Sopenharmony_ci of :meth:`utcoffset` will probably look like one of these two:: 19837db96d56Sopenharmony_ci 19847db96d56Sopenharmony_ci return CONSTANT # fixed-offset class 19857db96d56Sopenharmony_ci return CONSTANT + self.dst(dt) # daylight-aware class 19867db96d56Sopenharmony_ci 19877db96d56Sopenharmony_ci If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return 19887db96d56Sopenharmony_ci ``None`` either. 19897db96d56Sopenharmony_ci 19907db96d56Sopenharmony_ci The default implementation of :meth:`utcoffset` raises 19917db96d56Sopenharmony_ci :exc:`NotImplementedError`. 19927db96d56Sopenharmony_ci 19937db96d56Sopenharmony_ci .. versionchanged:: 3.7 19947db96d56Sopenharmony_ci The UTC offset is not restricted to a whole number of minutes. 19957db96d56Sopenharmony_ci 19967db96d56Sopenharmony_ci 19977db96d56Sopenharmony_ci.. method:: tzinfo.dst(dt) 19987db96d56Sopenharmony_ci 19997db96d56Sopenharmony_ci Return the daylight saving time (DST) adjustment, as a :class:`timedelta` 20007db96d56Sopenharmony_ci object or 20017db96d56Sopenharmony_ci ``None`` if DST information isn't known. 20027db96d56Sopenharmony_ci 20037db96d56Sopenharmony_ci Return ``timedelta(0)`` if DST is not in effect. 20047db96d56Sopenharmony_ci If DST is in effect, return the offset as a :class:`timedelta` object 20057db96d56Sopenharmony_ci (see :meth:`utcoffset` for details). Note that DST offset, if applicable, has 20067db96d56Sopenharmony_ci already been added to the UTC offset returned by :meth:`utcoffset`, so there's 20077db96d56Sopenharmony_ci no need to consult :meth:`dst` unless you're interested in obtaining DST info 20087db96d56Sopenharmony_ci separately. For example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo` 20097db96d56Sopenharmony_ci attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag 20107db96d56Sopenharmony_ci should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for 20117db96d56Sopenharmony_ci DST changes when crossing time zones. 20127db96d56Sopenharmony_ci 20137db96d56Sopenharmony_ci An instance *tz* of a :class:`tzinfo` subclass that models both standard and 20147db96d56Sopenharmony_ci daylight times must be consistent in this sense: 20157db96d56Sopenharmony_ci 20167db96d56Sopenharmony_ci ``tz.utcoffset(dt) - tz.dst(dt)`` 20177db96d56Sopenharmony_ci 20187db96d56Sopenharmony_ci must return the same result for every :class:`.datetime` *dt* with ``dt.tzinfo == 20197db96d56Sopenharmony_ci tz`` For sane :class:`tzinfo` subclasses, this expression yields the time 20207db96d56Sopenharmony_ci zone's "standard offset", which should not depend on the date or the time, but 20217db96d56Sopenharmony_ci only on geographic location. The implementation of :meth:`datetime.astimezone` 20227db96d56Sopenharmony_ci relies on this, but cannot detect violations; it's the programmer's 20237db96d56Sopenharmony_ci responsibility to ensure it. If a :class:`tzinfo` subclass cannot guarantee 20247db96d56Sopenharmony_ci this, it may be able to override the default implementation of 20257db96d56Sopenharmony_ci :meth:`tzinfo.fromutc` to work correctly with :meth:`astimezone` regardless. 20267db96d56Sopenharmony_ci 20277db96d56Sopenharmony_ci Most implementations of :meth:`dst` will probably look like one of these two:: 20287db96d56Sopenharmony_ci 20297db96d56Sopenharmony_ci def dst(self, dt): 20307db96d56Sopenharmony_ci # a fixed-offset class: doesn't account for DST 20317db96d56Sopenharmony_ci return timedelta(0) 20327db96d56Sopenharmony_ci 20337db96d56Sopenharmony_ci or:: 20347db96d56Sopenharmony_ci 20357db96d56Sopenharmony_ci def dst(self, dt): 20367db96d56Sopenharmony_ci # Code to set dston and dstoff to the time zone's DST 20377db96d56Sopenharmony_ci # transition times based on the input dt.year, and expressed 20387db96d56Sopenharmony_ci # in standard local time. 20397db96d56Sopenharmony_ci 20407db96d56Sopenharmony_ci if dston <= dt.replace(tzinfo=None) < dstoff: 20417db96d56Sopenharmony_ci return timedelta(hours=1) 20427db96d56Sopenharmony_ci else: 20437db96d56Sopenharmony_ci return timedelta(0) 20447db96d56Sopenharmony_ci 20457db96d56Sopenharmony_ci The default implementation of :meth:`dst` raises :exc:`NotImplementedError`. 20467db96d56Sopenharmony_ci 20477db96d56Sopenharmony_ci .. versionchanged:: 3.7 20487db96d56Sopenharmony_ci The DST offset is not restricted to a whole number of minutes. 20497db96d56Sopenharmony_ci 20507db96d56Sopenharmony_ci 20517db96d56Sopenharmony_ci.. method:: tzinfo.tzname(dt) 20527db96d56Sopenharmony_ci 20537db96d56Sopenharmony_ci Return the time zone name corresponding to the :class:`.datetime` object *dt*, as 20547db96d56Sopenharmony_ci a string. Nothing about string names is defined by the :mod:`datetime` module, 20557db96d56Sopenharmony_ci and there's no requirement that it mean anything in particular. For example, 20567db96d56Sopenharmony_ci "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all 20577db96d56Sopenharmony_ci valid replies. Return ``None`` if a string name isn't known. Note that this is 20587db96d56Sopenharmony_ci a method rather than a fixed string primarily because some :class:`tzinfo` 20597db96d56Sopenharmony_ci subclasses will wish to return different names depending on the specific value 20607db96d56Sopenharmony_ci of *dt* passed, especially if the :class:`tzinfo` class is accounting for 20617db96d56Sopenharmony_ci daylight time. 20627db96d56Sopenharmony_ci 20637db96d56Sopenharmony_ci The default implementation of :meth:`tzname` raises :exc:`NotImplementedError`. 20647db96d56Sopenharmony_ci 20657db96d56Sopenharmony_ci 20667db96d56Sopenharmony_ciThese methods are called by a :class:`.datetime` or :class:`.time` object, in 20677db96d56Sopenharmony_ciresponse to their methods of the same names. A :class:`.datetime` object passes 20687db96d56Sopenharmony_ciitself as the argument, and a :class:`.time` object passes ``None`` as the 20697db96d56Sopenharmony_ciargument. A :class:`tzinfo` subclass's methods should therefore be prepared to 20707db96d56Sopenharmony_ciaccept a *dt* argument of ``None``, or of class :class:`.datetime`. 20717db96d56Sopenharmony_ci 20727db96d56Sopenharmony_ciWhen ``None`` is passed, it's up to the class designer to decide the best 20737db96d56Sopenharmony_ciresponse. For example, returning ``None`` is appropriate if the class wishes to 20747db96d56Sopenharmony_cisay that time objects don't participate in the :class:`tzinfo` protocols. It 20757db96d56Sopenharmony_cimay be more useful for ``utcoffset(None)`` to return the standard UTC offset, as 20767db96d56Sopenharmony_cithere is no other convention for discovering the standard offset. 20777db96d56Sopenharmony_ci 20787db96d56Sopenharmony_ciWhen a :class:`.datetime` object is passed in response to a :class:`.datetime` 20797db96d56Sopenharmony_cimethod, ``dt.tzinfo`` is the same object as *self*. :class:`tzinfo` methods can 20807db96d56Sopenharmony_cirely on this, unless user code calls :class:`tzinfo` methods directly. The 20817db96d56Sopenharmony_ciintent is that the :class:`tzinfo` methods interpret *dt* as being in local 20827db96d56Sopenharmony_citime, and not need worry about objects in other timezones. 20837db96d56Sopenharmony_ci 20847db96d56Sopenharmony_ciThere is one more :class:`tzinfo` method that a subclass may wish to override: 20857db96d56Sopenharmony_ci 20867db96d56Sopenharmony_ci 20877db96d56Sopenharmony_ci.. method:: tzinfo.fromutc(dt) 20887db96d56Sopenharmony_ci 20897db96d56Sopenharmony_ci This is called from the default :class:`datetime.astimezone()` 20907db96d56Sopenharmony_ci implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s 20917db96d56Sopenharmony_ci date and time data are to be viewed as expressing a UTC time. The purpose 20927db96d56Sopenharmony_ci of :meth:`fromutc` is to adjust the date and time data, returning an 20937db96d56Sopenharmony_ci equivalent datetime in *self*'s local time. 20947db96d56Sopenharmony_ci 20957db96d56Sopenharmony_ci Most :class:`tzinfo` subclasses should be able to inherit the default 20967db96d56Sopenharmony_ci :meth:`fromutc` implementation without problems. It's strong enough to handle 20977db96d56Sopenharmony_ci fixed-offset time zones, and time zones accounting for both standard and 20987db96d56Sopenharmony_ci daylight time, and the latter even if the DST transition times differ in 20997db96d56Sopenharmony_ci different years. An example of a time zone the default :meth:`fromutc` 21007db96d56Sopenharmony_ci implementation may not handle correctly in all cases is one where the standard 21017db96d56Sopenharmony_ci offset (from UTC) depends on the specific date and time passed, which can happen 21027db96d56Sopenharmony_ci for political reasons. The default implementations of :meth:`astimezone` and 21037db96d56Sopenharmony_ci :meth:`fromutc` may not produce the result you want if the result is one of the 21047db96d56Sopenharmony_ci hours straddling the moment the standard offset changes. 21057db96d56Sopenharmony_ci 21067db96d56Sopenharmony_ci Skipping code for error cases, the default :meth:`fromutc` implementation acts 21077db96d56Sopenharmony_ci like:: 21087db96d56Sopenharmony_ci 21097db96d56Sopenharmony_ci def fromutc(self, dt): 21107db96d56Sopenharmony_ci # raise ValueError error if dt.tzinfo is not self 21117db96d56Sopenharmony_ci dtoff = dt.utcoffset() 21127db96d56Sopenharmony_ci dtdst = dt.dst() 21137db96d56Sopenharmony_ci # raise ValueError if dtoff is None or dtdst is None 21147db96d56Sopenharmony_ci delta = dtoff - dtdst # this is self's standard offset 21157db96d56Sopenharmony_ci if delta: 21167db96d56Sopenharmony_ci dt += delta # convert to standard local time 21177db96d56Sopenharmony_ci dtdst = dt.dst() 21187db96d56Sopenharmony_ci # raise ValueError if dtdst is None 21197db96d56Sopenharmony_ci if dtdst: 21207db96d56Sopenharmony_ci return dt + dtdst 21217db96d56Sopenharmony_ci else: 21227db96d56Sopenharmony_ci return dt 21237db96d56Sopenharmony_ci 21247db96d56Sopenharmony_ciIn the following :download:`tzinfo_examples.py 21257db96d56Sopenharmony_ci<../includes/tzinfo_examples.py>` file there are some examples of 21267db96d56Sopenharmony_ci:class:`tzinfo` classes: 21277db96d56Sopenharmony_ci 21287db96d56Sopenharmony_ci.. literalinclude:: ../includes/tzinfo_examples.py 21297db96d56Sopenharmony_ci 21307db96d56Sopenharmony_ciNote that there are unavoidable subtleties twice per year in a :class:`tzinfo` 21317db96d56Sopenharmony_cisubclass accounting for both standard and daylight time, at the DST transition 21327db96d56Sopenharmony_cipoints. For concreteness, consider US Eastern (UTC -0500), where EDT begins the 21337db96d56Sopenharmony_ciminute after 1:59 (EST) on the second Sunday in March, and ends the minute after 21347db96d56Sopenharmony_ci1:59 (EDT) on the first Sunday in November:: 21357db96d56Sopenharmony_ci 21367db96d56Sopenharmony_ci UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM 21377db96d56Sopenharmony_ci EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM 21387db96d56Sopenharmony_ci EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM 21397db96d56Sopenharmony_ci 21407db96d56Sopenharmony_ci start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM 21417db96d56Sopenharmony_ci 21427db96d56Sopenharmony_ci end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM 21437db96d56Sopenharmony_ci 21447db96d56Sopenharmony_ciWhen DST starts (the "start" line), the local wall clock leaps from 1:59 to 21457db96d56Sopenharmony_ci3:00. A wall time of the form 2:MM doesn't really make sense on that day, so 21467db96d56Sopenharmony_ci``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the day DST 21477db96d56Sopenharmony_cibegins. For example, at the Spring forward transition of 2016, we get:: 21487db96d56Sopenharmony_ci 21497db96d56Sopenharmony_ci >>> from datetime import datetime, timezone 21507db96d56Sopenharmony_ci >>> from tzinfo_examples import HOUR, Eastern 21517db96d56Sopenharmony_ci >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc) 21527db96d56Sopenharmony_ci >>> for i in range(4): 21537db96d56Sopenharmony_ci ... u = u0 + i*HOUR 21547db96d56Sopenharmony_ci ... t = u.astimezone(Eastern) 21557db96d56Sopenharmony_ci ... print(u.time(), 'UTC =', t.time(), t.tzname()) 21567db96d56Sopenharmony_ci ... 21577db96d56Sopenharmony_ci 05:00:00 UTC = 00:00:00 EST 21587db96d56Sopenharmony_ci 06:00:00 UTC = 01:00:00 EST 21597db96d56Sopenharmony_ci 07:00:00 UTC = 03:00:00 EDT 21607db96d56Sopenharmony_ci 08:00:00 UTC = 04:00:00 EDT 21617db96d56Sopenharmony_ci 21627db96d56Sopenharmony_ci 21637db96d56Sopenharmony_ciWhen DST ends (the "end" line), there's a potentially worse problem: there's an 21647db96d56Sopenharmony_cihour that can't be spelled unambiguously in local wall time: the last hour of 21657db96d56Sopenharmony_cidaylight time. In Eastern, that's times of the form 5:MM UTC on the day 21667db96d56Sopenharmony_cidaylight time ends. The local wall clock leaps from 1:59 (daylight time) back 21677db96d56Sopenharmony_cito 1:00 (standard time) again. Local times of the form 1:MM are ambiguous. 21687db96d56Sopenharmony_ci:meth:`astimezone` mimics the local clock's behavior by mapping two adjacent UTC 21697db96d56Sopenharmony_cihours into the same local hour then. In the Eastern example, UTC times of the 21707db96d56Sopenharmony_ciform 5:MM and 6:MM both map to 1:MM when converted to Eastern, but earlier times 21717db96d56Sopenharmony_cihave the :attr:`~datetime.fold` attribute set to 0 and the later times have it set to 1. 21727db96d56Sopenharmony_ciFor example, at the Fall back transition of 2016, we get:: 21737db96d56Sopenharmony_ci 21747db96d56Sopenharmony_ci >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc) 21757db96d56Sopenharmony_ci >>> for i in range(4): 21767db96d56Sopenharmony_ci ... u = u0 + i*HOUR 21777db96d56Sopenharmony_ci ... t = u.astimezone(Eastern) 21787db96d56Sopenharmony_ci ... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold) 21797db96d56Sopenharmony_ci ... 21807db96d56Sopenharmony_ci 04:00:00 UTC = 00:00:00 EDT 0 21817db96d56Sopenharmony_ci 05:00:00 UTC = 01:00:00 EDT 0 21827db96d56Sopenharmony_ci 06:00:00 UTC = 01:00:00 EST 1 21837db96d56Sopenharmony_ci 07:00:00 UTC = 02:00:00 EST 0 21847db96d56Sopenharmony_ci 21857db96d56Sopenharmony_ciNote that the :class:`.datetime` instances that differ only by the value of the 21867db96d56Sopenharmony_ci:attr:`~datetime.fold` attribute are considered equal in comparisons. 21877db96d56Sopenharmony_ci 21887db96d56Sopenharmony_ciApplications that can't bear wall-time ambiguities should explicitly check the 21897db96d56Sopenharmony_civalue of the :attr:`~datetime.fold` attribute or avoid using hybrid 21907db96d56Sopenharmony_ci:class:`tzinfo` subclasses; there are no ambiguities when using :class:`timezone`, 21917db96d56Sopenharmony_cior any other fixed-offset :class:`tzinfo` subclass (such as a class representing 21927db96d56Sopenharmony_cionly EST (fixed offset -5 hours), or only EDT (fixed offset -4 hours)). 21937db96d56Sopenharmony_ci 21947db96d56Sopenharmony_ci.. seealso:: 21957db96d56Sopenharmony_ci 21967db96d56Sopenharmony_ci :mod:`zoneinfo` 21977db96d56Sopenharmony_ci The :mod:`datetime` module has a basic :class:`timezone` class (for 21987db96d56Sopenharmony_ci handling arbitrary fixed offsets from UTC) and its :attr:`timezone.utc` 21997db96d56Sopenharmony_ci attribute (a UTC timezone instance). 22007db96d56Sopenharmony_ci 22017db96d56Sopenharmony_ci ``zoneinfo`` brings the *IANA timezone database* (also known as the Olson 22027db96d56Sopenharmony_ci database) to Python, and its usage is recommended. 22037db96d56Sopenharmony_ci 22047db96d56Sopenharmony_ci `IANA timezone database <https://www.iana.org/time-zones>`_ 22057db96d56Sopenharmony_ci The Time Zone Database (often called tz, tzdata or zoneinfo) contains code 22067db96d56Sopenharmony_ci and data that represent the history of local time for many representative 22077db96d56Sopenharmony_ci locations around the globe. It is updated periodically to reflect changes 22087db96d56Sopenharmony_ci made by political bodies to time zone boundaries, UTC offsets, and 22097db96d56Sopenharmony_ci daylight-saving rules. 22107db96d56Sopenharmony_ci 22117db96d56Sopenharmony_ci 22127db96d56Sopenharmony_ci.. _datetime-timezone: 22137db96d56Sopenharmony_ci 22147db96d56Sopenharmony_ci:class:`timezone` Objects 22157db96d56Sopenharmony_ci-------------------------- 22167db96d56Sopenharmony_ci 22177db96d56Sopenharmony_ciThe :class:`timezone` class is a subclass of :class:`tzinfo`, each 22187db96d56Sopenharmony_ciinstance of which represents a timezone defined by a fixed offset from 22197db96d56Sopenharmony_ciUTC. 22207db96d56Sopenharmony_ci 22217db96d56Sopenharmony_ciObjects of this class cannot be used to represent timezone information in the 22227db96d56Sopenharmony_cilocations where different offsets are used in different days of the year or 22237db96d56Sopenharmony_ciwhere historical changes have been made to civil time. 22247db96d56Sopenharmony_ci 22257db96d56Sopenharmony_ci 22267db96d56Sopenharmony_ci.. class:: timezone(offset, name=None) 22277db96d56Sopenharmony_ci 22287db96d56Sopenharmony_ci The *offset* argument must be specified as a :class:`timedelta` 22297db96d56Sopenharmony_ci object representing the difference between the local time and UTC. It must 22307db96d56Sopenharmony_ci be strictly between ``-timedelta(hours=24)`` and 22317db96d56Sopenharmony_ci ``timedelta(hours=24)``, otherwise :exc:`ValueError` is raised. 22327db96d56Sopenharmony_ci 22337db96d56Sopenharmony_ci The *name* argument is optional. If specified it must be a string that 22347db96d56Sopenharmony_ci will be used as the value returned by the :meth:`datetime.tzname` method. 22357db96d56Sopenharmony_ci 22367db96d56Sopenharmony_ci .. versionadded:: 3.2 22377db96d56Sopenharmony_ci 22387db96d56Sopenharmony_ci .. versionchanged:: 3.7 22397db96d56Sopenharmony_ci The UTC offset is not restricted to a whole number of minutes. 22407db96d56Sopenharmony_ci 22417db96d56Sopenharmony_ci 22427db96d56Sopenharmony_ci.. method:: timezone.utcoffset(dt) 22437db96d56Sopenharmony_ci 22447db96d56Sopenharmony_ci Return the fixed value specified when the :class:`timezone` instance is 22457db96d56Sopenharmony_ci constructed. 22467db96d56Sopenharmony_ci 22477db96d56Sopenharmony_ci The *dt* argument is ignored. The return value is a :class:`timedelta` 22487db96d56Sopenharmony_ci instance equal to the difference between the local time and UTC. 22497db96d56Sopenharmony_ci 22507db96d56Sopenharmony_ci .. versionchanged:: 3.7 22517db96d56Sopenharmony_ci The UTC offset is not restricted to a whole number of minutes. 22527db96d56Sopenharmony_ci 22537db96d56Sopenharmony_ci.. method:: timezone.tzname(dt) 22547db96d56Sopenharmony_ci 22557db96d56Sopenharmony_ci Return the fixed value specified when the :class:`timezone` instance 22567db96d56Sopenharmony_ci is constructed. 22577db96d56Sopenharmony_ci 22587db96d56Sopenharmony_ci If *name* is not provided in the constructor, the name returned by 22597db96d56Sopenharmony_ci ``tzname(dt)`` is generated from the value of the ``offset`` as follows. If 22607db96d56Sopenharmony_ci *offset* is ``timedelta(0)``, the name is "UTC", otherwise it is a string in 22617db96d56Sopenharmony_ci the format ``UTC±HH:MM``, where ± is the sign of ``offset``, HH and MM are 22627db96d56Sopenharmony_ci two digits of ``offset.hours`` and ``offset.minutes`` respectively. 22637db96d56Sopenharmony_ci 22647db96d56Sopenharmony_ci .. versionchanged:: 3.6 22657db96d56Sopenharmony_ci Name generated from ``offset=timedelta(0)`` is now plain ``'UTC'``, not 22667db96d56Sopenharmony_ci ``'UTC+00:00'``. 22677db96d56Sopenharmony_ci 22687db96d56Sopenharmony_ci 22697db96d56Sopenharmony_ci.. method:: timezone.dst(dt) 22707db96d56Sopenharmony_ci 22717db96d56Sopenharmony_ci Always returns ``None``. 22727db96d56Sopenharmony_ci 22737db96d56Sopenharmony_ci.. method:: timezone.fromutc(dt) 22747db96d56Sopenharmony_ci 22757db96d56Sopenharmony_ci Return ``dt + offset``. The *dt* argument must be an aware 22767db96d56Sopenharmony_ci :class:`.datetime` instance, with ``tzinfo`` set to ``self``. 22777db96d56Sopenharmony_ci 22787db96d56Sopenharmony_ciClass attributes: 22797db96d56Sopenharmony_ci 22807db96d56Sopenharmony_ci.. attribute:: timezone.utc 22817db96d56Sopenharmony_ci 22827db96d56Sopenharmony_ci The UTC timezone, ``timezone(timedelta(0))``. 22837db96d56Sopenharmony_ci 22847db96d56Sopenharmony_ci 22857db96d56Sopenharmony_ci.. index:: 22867db96d56Sopenharmony_ci single: % (percent); datetime format 22877db96d56Sopenharmony_ci 22887db96d56Sopenharmony_ci.. _strftime-strptime-behavior: 22897db96d56Sopenharmony_ci 22907db96d56Sopenharmony_ci:meth:`strftime` and :meth:`strptime` Behavior 22917db96d56Sopenharmony_ci---------------------------------------------- 22927db96d56Sopenharmony_ci 22937db96d56Sopenharmony_ci:class:`date`, :class:`.datetime`, and :class:`.time` objects all support a 22947db96d56Sopenharmony_ci``strftime(format)`` method, to create a string representing the time under the 22957db96d56Sopenharmony_cicontrol of an explicit format string. 22967db96d56Sopenharmony_ci 22977db96d56Sopenharmony_ciConversely, the :meth:`datetime.strptime` class method creates a 22987db96d56Sopenharmony_ci:class:`.datetime` object from a string representing a date and time and a 22997db96d56Sopenharmony_cicorresponding format string. 23007db96d56Sopenharmony_ci 23017db96d56Sopenharmony_ciThe table below provides a high-level comparison of :meth:`strftime` 23027db96d56Sopenharmony_civersus :meth:`strptime`: 23037db96d56Sopenharmony_ci 23047db96d56Sopenharmony_ci+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+ 23057db96d56Sopenharmony_ci| | ``strftime`` | ``strptime`` | 23067db96d56Sopenharmony_ci+================+========================================================+==============================================================================+ 23077db96d56Sopenharmony_ci| Usage | Convert object to a string according to a given format | Parse a string into a :class:`.datetime` object given a corresponding format | 23087db96d56Sopenharmony_ci+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+ 23097db96d56Sopenharmony_ci| Type of method | Instance method | Class method | 23107db96d56Sopenharmony_ci+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+ 23117db96d56Sopenharmony_ci| Method of | :class:`date`; :class:`.datetime`; :class:`.time` | :class:`.datetime` | 23127db96d56Sopenharmony_ci+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+ 23137db96d56Sopenharmony_ci| Signature | ``strftime(format)`` | ``strptime(date_string, format)`` | 23147db96d56Sopenharmony_ci+----------------+--------------------------------------------------------+------------------------------------------------------------------------------+ 23157db96d56Sopenharmony_ci 23167db96d56Sopenharmony_ci 23177db96d56Sopenharmony_ci:meth:`strftime` and :meth:`strptime` Format Codes 23187db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 23197db96d56Sopenharmony_ci 23207db96d56Sopenharmony_ciThese methods accept format codes that can be used to parse and format dates:: 23217db96d56Sopenharmony_ci 23227db96d56Sopenharmony_ci >>> datetime.strptime('31/01/22 23:59:59.999999', 23237db96d56Sopenharmony_ci ... '%d/%m/%y %H:%M:%S.%f') 23247db96d56Sopenharmony_ci datetime.datetime(2022, 1, 31, 23, 59, 59, 999999) 23257db96d56Sopenharmony_ci >>> _.strftime('%a %d %b %Y, %I:%M%p') 23267db96d56Sopenharmony_ci 'Mon 31 Jan 2022, 11:59PM' 23277db96d56Sopenharmony_ci 23287db96d56Sopenharmony_ciThe following is a list of all the format codes that the 1989 C standard 23297db96d56Sopenharmony_cirequires, and these work on all platforms with a standard C implementation. 23307db96d56Sopenharmony_ci 23317db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23327db96d56Sopenharmony_ci| Directive | Meaning | Example | Notes | 23337db96d56Sopenharmony_ci+===========+================================+========================+=======+ 23347db96d56Sopenharmony_ci| ``%a`` | Weekday as locale's || Sun, Mon, ..., Sat | \(1) | 23357db96d56Sopenharmony_ci| | abbreviated name. | (en_US); | | 23367db96d56Sopenharmony_ci| | || So, Mo, ..., Sa | | 23377db96d56Sopenharmony_ci| | | (de_DE) | | 23387db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23397db96d56Sopenharmony_ci| ``%A`` | Weekday as locale's full name. || Sunday, Monday, ..., | \(1) | 23407db96d56Sopenharmony_ci| | | Saturday (en_US); | | 23417db96d56Sopenharmony_ci| | || Sonntag, Montag, ..., | | 23427db96d56Sopenharmony_ci| | | Samstag (de_DE) | | 23437db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23447db96d56Sopenharmony_ci| ``%w`` | Weekday as a decimal number, | 0, 1, ..., 6 | | 23457db96d56Sopenharmony_ci| | where 0 is Sunday and 6 is | | | 23467db96d56Sopenharmony_ci| | Saturday. | | | 23477db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23487db96d56Sopenharmony_ci| ``%d`` | Day of the month as a | 01, 02, ..., 31 | \(9) | 23497db96d56Sopenharmony_ci| | zero-padded decimal number. | | | 23507db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23517db96d56Sopenharmony_ci| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) | 23527db96d56Sopenharmony_ci| | name. | (en_US); | | 23537db96d56Sopenharmony_ci| | || Jan, Feb, ..., Dez | | 23547db96d56Sopenharmony_ci| | | (de_DE) | | 23557db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23567db96d56Sopenharmony_ci| ``%B`` | Month as locale's full name. || January, February, | \(1) | 23577db96d56Sopenharmony_ci| | | ..., December (en_US);| | 23587db96d56Sopenharmony_ci| | || Januar, Februar, ..., | | 23597db96d56Sopenharmony_ci| | | Dezember (de_DE) | | 23607db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23617db96d56Sopenharmony_ci| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | \(9) | 23627db96d56Sopenharmony_ci| | decimal number. | | | 23637db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23647db96d56Sopenharmony_ci| ``%y`` | Year without century as a | 00, 01, ..., 99 | \(9) | 23657db96d56Sopenharmony_ci| | zero-padded decimal number. | | | 23667db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23677db96d56Sopenharmony_ci| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) | 23687db96d56Sopenharmony_ci| | number. | 2014, ..., 9998, 9999 | | 23697db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23707db96d56Sopenharmony_ci| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | \(9) | 23717db96d56Sopenharmony_ci| | zero-padded decimal number. | | | 23727db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23737db96d56Sopenharmony_ci| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | \(9) | 23747db96d56Sopenharmony_ci| | zero-padded decimal number. | | | 23757db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23767db96d56Sopenharmony_ci| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), | 23777db96d56Sopenharmony_ci| | AM or PM. || am, pm (de_DE) | \(3) | 23787db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23797db96d56Sopenharmony_ci| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | \(9) | 23807db96d56Sopenharmony_ci| | decimal number. | | | 23817db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23827db96d56Sopenharmony_ci| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4), | 23837db96d56Sopenharmony_ci| | decimal number. | | \(9) | 23847db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23857db96d56Sopenharmony_ci| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) | 23867db96d56Sopenharmony_ci| | number, zero-padded to 6 | 999999 | | 23877db96d56Sopenharmony_ci| | digits. | | | 23887db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23897db96d56Sopenharmony_ci| ``%z`` | UTC offset in the form | (empty), +0000, | \(6) | 23907db96d56Sopenharmony_ci| | ``±HHMM[SS[.ffffff]]`` (empty | -0400, +1030, | | 23917db96d56Sopenharmony_ci| | string if the object is | +063415, | | 23927db96d56Sopenharmony_ci| | naive). | -030712.345216 | | 23937db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23947db96d56Sopenharmony_ci| ``%Z`` | Time zone name (empty string | (empty), UTC, GMT | \(6) | 23957db96d56Sopenharmony_ci| | if the object is naive). | | | 23967db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 23977db96d56Sopenharmony_ci| ``%j`` | Day of the year as a | 001, 002, ..., 366 | \(9) | 23987db96d56Sopenharmony_ci| | zero-padded decimal number. | | | 23997db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24007db96d56Sopenharmony_ci| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7), | 24017db96d56Sopenharmony_ci| | (Sunday as the first day of | | \(9) | 24027db96d56Sopenharmony_ci| | the week) as a zero-padded | | | 24037db96d56Sopenharmony_ci| | decimal number. All days in a | | | 24047db96d56Sopenharmony_ci| | new year preceding the first | | | 24057db96d56Sopenharmony_ci| | Sunday are considered to be in | | | 24067db96d56Sopenharmony_ci| | week 0. | | | 24077db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24087db96d56Sopenharmony_ci| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7), | 24097db96d56Sopenharmony_ci| | (Monday as the first day of | | \(9) | 24107db96d56Sopenharmony_ci| | the week) as a zero-padded | | | 24117db96d56Sopenharmony_ci| | decimal number. All days in a | | | 24127db96d56Sopenharmony_ci| | new year preceding the first | | | 24137db96d56Sopenharmony_ci| | Monday are considered to be in | | | 24147db96d56Sopenharmony_ci| | week 0. | | | 24157db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24167db96d56Sopenharmony_ci| ``%c`` | Locale's appropriate date and || Tue Aug 16 21:30:00 | \(1) | 24177db96d56Sopenharmony_ci| | time representation. | 1988 (en_US); | | 24187db96d56Sopenharmony_ci| | || Di 16 Aug 21:30:00 | | 24197db96d56Sopenharmony_ci| | | 1988 (de_DE) | | 24207db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24217db96d56Sopenharmony_ci| ``%x`` | Locale's appropriate date || 08/16/88 (None); | \(1) | 24227db96d56Sopenharmony_ci| | representation. || 08/16/1988 (en_US); | | 24237db96d56Sopenharmony_ci| | || 16.08.1988 (de_DE) | | 24247db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24257db96d56Sopenharmony_ci| ``%X`` | Locale's appropriate time || 21:30:00 (en_US); | \(1) | 24267db96d56Sopenharmony_ci| | representation. || 21:30:00 (de_DE) | | 24277db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24287db96d56Sopenharmony_ci| ``%%`` | A literal ``'%'`` character. | % | | 24297db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24307db96d56Sopenharmony_ci 24317db96d56Sopenharmony_ciSeveral additional directives not required by the C89 standard are included for 24327db96d56Sopenharmony_ciconvenience. These parameters all correspond to ISO 8601 date values. 24337db96d56Sopenharmony_ci 24347db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24357db96d56Sopenharmony_ci| Directive | Meaning | Example | Notes | 24367db96d56Sopenharmony_ci+===========+================================+========================+=======+ 24377db96d56Sopenharmony_ci| ``%G`` | ISO 8601 year with century | 0001, 0002, ..., 2013, | \(8) | 24387db96d56Sopenharmony_ci| | representing the year that | 2014, ..., 9998, 9999 | | 24397db96d56Sopenharmony_ci| | contains the greater part of | | | 24407db96d56Sopenharmony_ci| | the ISO week (``%V``). | | | 24417db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24427db96d56Sopenharmony_ci| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | | 24437db96d56Sopenharmony_ci| | number where 1 is Monday. | | | 24447db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24457db96d56Sopenharmony_ci| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8), | 24467db96d56Sopenharmony_ci| | number with Monday as | | \(9) | 24477db96d56Sopenharmony_ci| | the first day of the week. | | | 24487db96d56Sopenharmony_ci| | Week 01 is the week containing | | | 24497db96d56Sopenharmony_ci| | Jan 4. | | | 24507db96d56Sopenharmony_ci+-----------+--------------------------------+------------------------+-------+ 24517db96d56Sopenharmony_ci 24527db96d56Sopenharmony_ciThese may not be available on all platforms when used with the :meth:`strftime` 24537db96d56Sopenharmony_cimethod. The ISO 8601 year and ISO 8601 week directives are not interchangeable 24547db96d56Sopenharmony_ciwith the year and week number directives above. Calling :meth:`strptime` with 24557db96d56Sopenharmony_ciincomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`. 24567db96d56Sopenharmony_ci 24577db96d56Sopenharmony_ciThe full set of format codes supported varies across platforms, because Python 24587db96d56Sopenharmony_cicalls the platform C library's :func:`strftime` function, and platform 24597db96d56Sopenharmony_civariations are common. To see the full set of format codes supported on your 24607db96d56Sopenharmony_ciplatform, consult the :manpage:`strftime(3)` documentation. There are also 24617db96d56Sopenharmony_cidifferences between platforms in handling of unsupported format specifiers. 24627db96d56Sopenharmony_ci 24637db96d56Sopenharmony_ci.. versionadded:: 3.6 24647db96d56Sopenharmony_ci ``%G``, ``%u`` and ``%V`` were added. 24657db96d56Sopenharmony_ci 24667db96d56Sopenharmony_ciTechnical Detail 24677db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^ 24687db96d56Sopenharmony_ci 24697db96d56Sopenharmony_ciBroadly speaking, ``d.strftime(fmt)`` acts like the :mod:`time` module's 24707db96d56Sopenharmony_ci``time.strftime(fmt, d.timetuple())`` although not all objects support a 24717db96d56Sopenharmony_ci:meth:`timetuple` method. 24727db96d56Sopenharmony_ci 24737db96d56Sopenharmony_ciFor the :meth:`datetime.strptime` class method, the default value is 24747db96d56Sopenharmony_ci``1900-01-01T00:00:00.000``: any components not specified in the format string 24757db96d56Sopenharmony_ciwill be pulled from the default value. [#]_ 24767db96d56Sopenharmony_ci 24777db96d56Sopenharmony_ciUsing ``datetime.strptime(date_string, format)`` is equivalent to:: 24787db96d56Sopenharmony_ci 24797db96d56Sopenharmony_ci datetime(*(time.strptime(date_string, format)[0:6])) 24807db96d56Sopenharmony_ci 24817db96d56Sopenharmony_ciexcept when the format includes sub-second components or timezone offset 24827db96d56Sopenharmony_ciinformation, which are supported in ``datetime.strptime`` but are discarded by 24837db96d56Sopenharmony_ci``time.strptime``. 24847db96d56Sopenharmony_ci 24857db96d56Sopenharmony_ciFor :class:`.time` objects, the format codes for year, month, and day should not 24867db96d56Sopenharmony_cibe used, as :class:`time` objects have no such values. If they're used anyway, 24877db96d56Sopenharmony_ci``1900`` is substituted for the year, and ``1`` for the month and day. 24887db96d56Sopenharmony_ci 24897db96d56Sopenharmony_ciFor :class:`date` objects, the format codes for hours, minutes, seconds, and 24907db96d56Sopenharmony_cimicroseconds should not be used, as :class:`date` objects have no such 24917db96d56Sopenharmony_civalues. If they're used anyway, ``0`` is substituted for them. 24927db96d56Sopenharmony_ci 24937db96d56Sopenharmony_ciFor the same reason, handling of format strings containing Unicode code points 24947db96d56Sopenharmony_cithat can't be represented in the charset of the current locale is also 24957db96d56Sopenharmony_ciplatform-dependent. On some platforms such code points are preserved intact in 24967db96d56Sopenharmony_cithe output, while on others ``strftime`` may raise :exc:`UnicodeError` or return 24977db96d56Sopenharmony_cian empty string instead. 24987db96d56Sopenharmony_ci 24997db96d56Sopenharmony_ciNotes: 25007db96d56Sopenharmony_ci 25017db96d56Sopenharmony_ci(1) 25027db96d56Sopenharmony_ci Because the format depends on the current locale, care should be taken when 25037db96d56Sopenharmony_ci making assumptions about the output value. Field orderings will vary (for 25047db96d56Sopenharmony_ci example, "month/day/year" versus "day/month/year"), and the output may 25057db96d56Sopenharmony_ci contain non-ASCII characters. 25067db96d56Sopenharmony_ci 25077db96d56Sopenharmony_ci(2) 25087db96d56Sopenharmony_ci The :meth:`strptime` method can parse years in the full [1, 9999] range, but 25097db96d56Sopenharmony_ci years < 1000 must be zero-filled to 4-digit width. 25107db96d56Sopenharmony_ci 25117db96d56Sopenharmony_ci .. versionchanged:: 3.2 25127db96d56Sopenharmony_ci In previous versions, :meth:`strftime` method was restricted to 25137db96d56Sopenharmony_ci years >= 1900. 25147db96d56Sopenharmony_ci 25157db96d56Sopenharmony_ci .. versionchanged:: 3.3 25167db96d56Sopenharmony_ci In version 3.2, :meth:`strftime` method was restricted to 25177db96d56Sopenharmony_ci years >= 1000. 25187db96d56Sopenharmony_ci 25197db96d56Sopenharmony_ci(3) 25207db96d56Sopenharmony_ci When used with the :meth:`strptime` method, the ``%p`` directive only affects 25217db96d56Sopenharmony_ci the output hour field if the ``%I`` directive is used to parse the hour. 25227db96d56Sopenharmony_ci 25237db96d56Sopenharmony_ci(4) 25247db96d56Sopenharmony_ci Unlike the :mod:`time` module, the :mod:`datetime` module does not support 25257db96d56Sopenharmony_ci leap seconds. 25267db96d56Sopenharmony_ci 25277db96d56Sopenharmony_ci(5) 25287db96d56Sopenharmony_ci When used with the :meth:`strptime` method, the ``%f`` directive 25297db96d56Sopenharmony_ci accepts from one to six digits and zero pads on the right. ``%f`` is 25307db96d56Sopenharmony_ci an extension to the set of format characters in the C standard (but 25317db96d56Sopenharmony_ci implemented separately in datetime objects, and therefore always 25327db96d56Sopenharmony_ci available). 25337db96d56Sopenharmony_ci 25347db96d56Sopenharmony_ci(6) 25357db96d56Sopenharmony_ci For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty 25367db96d56Sopenharmony_ci strings. 25377db96d56Sopenharmony_ci 25387db96d56Sopenharmony_ci For an aware object: 25397db96d56Sopenharmony_ci 25407db96d56Sopenharmony_ci ``%z`` 25417db96d56Sopenharmony_ci :meth:`utcoffset` is transformed into a string of the form 25427db96d56Sopenharmony_ci ``±HHMM[SS[.ffffff]]``, where ``HH`` is a 2-digit string giving the number 25437db96d56Sopenharmony_ci of UTC offset hours, ``MM`` is a 2-digit string giving the number of UTC 25447db96d56Sopenharmony_ci offset minutes, ``SS`` is a 2-digit string giving the number of UTC offset 25457db96d56Sopenharmony_ci seconds and ``ffffff`` is a 6-digit string giving the number of UTC 25467db96d56Sopenharmony_ci offset microseconds. The ``ffffff`` part is omitted when the offset is a 25477db96d56Sopenharmony_ci whole number of seconds and both the ``ffffff`` and the ``SS`` part is 25487db96d56Sopenharmony_ci omitted when the offset is a whole number of minutes. For example, if 25497db96d56Sopenharmony_ci :meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is 25507db96d56Sopenharmony_ci replaced with the string ``'-0330'``. 25517db96d56Sopenharmony_ci 25527db96d56Sopenharmony_ci .. versionchanged:: 3.7 25537db96d56Sopenharmony_ci The UTC offset is not restricted to a whole number of minutes. 25547db96d56Sopenharmony_ci 25557db96d56Sopenharmony_ci .. versionchanged:: 3.7 25567db96d56Sopenharmony_ci When the ``%z`` directive is provided to the :meth:`strptime` method, 25577db96d56Sopenharmony_ci the UTC offsets can have a colon as a separator between hours, minutes 25587db96d56Sopenharmony_ci and seconds. 25597db96d56Sopenharmony_ci For example, ``'+01:00:00'`` will be parsed as an offset of one hour. 25607db96d56Sopenharmony_ci In addition, providing ``'Z'`` is identical to ``'+00:00'``. 25617db96d56Sopenharmony_ci 25627db96d56Sopenharmony_ci ``%Z`` 25637db96d56Sopenharmony_ci In :meth:`strftime`, ``%Z`` is replaced by an empty string if 25647db96d56Sopenharmony_ci :meth:`tzname` returns ``None``; otherwise ``%Z`` is replaced by the 25657db96d56Sopenharmony_ci returned value, which must be a string. 25667db96d56Sopenharmony_ci 25677db96d56Sopenharmony_ci :meth:`strptime` only accepts certain values for ``%Z``: 25687db96d56Sopenharmony_ci 25697db96d56Sopenharmony_ci 1. any value in ``time.tzname`` for your machine's locale 25707db96d56Sopenharmony_ci 2. the hard-coded values ``UTC`` and ``GMT`` 25717db96d56Sopenharmony_ci 25727db96d56Sopenharmony_ci So someone living in Japan may have ``JST``, ``UTC``, and ``GMT`` as 25737db96d56Sopenharmony_ci valid values, but probably not ``EST``. It will raise ``ValueError`` for 25747db96d56Sopenharmony_ci invalid values. 25757db96d56Sopenharmony_ci 25767db96d56Sopenharmony_ci .. versionchanged:: 3.2 25777db96d56Sopenharmony_ci When the ``%z`` directive is provided to the :meth:`strptime` method, an 25787db96d56Sopenharmony_ci aware :class:`.datetime` object will be produced. The ``tzinfo`` of the 25797db96d56Sopenharmony_ci result will be set to a :class:`timezone` instance. 25807db96d56Sopenharmony_ci 25817db96d56Sopenharmony_ci(7) 25827db96d56Sopenharmony_ci When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used 25837db96d56Sopenharmony_ci in calculations when the day of the week and the calendar year (``%Y``) 25847db96d56Sopenharmony_ci are specified. 25857db96d56Sopenharmony_ci 25867db96d56Sopenharmony_ci(8) 25877db96d56Sopenharmony_ci Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the 25887db96d56Sopenharmony_ci day of the week and the ISO year (``%G``) are specified in a 25897db96d56Sopenharmony_ci :meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not 25907db96d56Sopenharmony_ci interchangeable. 25917db96d56Sopenharmony_ci 25927db96d56Sopenharmony_ci(9) 25937db96d56Sopenharmony_ci When used with the :meth:`strptime` method, the leading zero is optional 25947db96d56Sopenharmony_ci for formats ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, ``%S``, ``%j``, ``%U``, 25957db96d56Sopenharmony_ci ``%W``, and ``%V``. Format ``%y`` does require a leading zero. 25967db96d56Sopenharmony_ci 25977db96d56Sopenharmony_ci.. rubric:: Footnotes 25987db96d56Sopenharmony_ci 25997db96d56Sopenharmony_ci.. [#] If, that is, we ignore the effects of Relativity 26007db96d56Sopenharmony_ci 26017db96d56Sopenharmony_ci.. [#] This matches the definition of the "proleptic Gregorian" calendar in 26027db96d56Sopenharmony_ci Dershowitz and Reingold's book *Calendrical Calculations*, 26037db96d56Sopenharmony_ci where it's the base calendar for all computations. See the book for 26047db96d56Sopenharmony_ci algorithms for converting between proleptic Gregorian ordinals and 26057db96d56Sopenharmony_ci many other calendar systems. 26067db96d56Sopenharmony_ci 26077db96d56Sopenharmony_ci.. [#] See R. H. van Gent's `guide to the mathematics of the ISO 8601 calendar 26087db96d56Sopenharmony_ci <https://web.archive.org/web/20220531051136/https://webspace.science.uu.nl/~gent0113/calendar/isocalendar.htm>`_ 26097db96d56Sopenharmony_ci for a good explanation. 26107db96d56Sopenharmony_ci 26117db96d56Sopenharmony_ci.. [#] Passing ``datetime.strptime('Feb 29', '%b %d')`` will fail since ``1900`` is not a leap year. 2612