xref: /third_party/python/Doc/library/time.rst (revision 7db96d56)
17db96d56Sopenharmony_ci:mod:`time` --- Time access and conversions
27db96d56Sopenharmony_ci===========================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: time
57db96d56Sopenharmony_ci   :synopsis: Time access and conversions.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci--------------
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciThis module provides various time-related functions. For related
107db96d56Sopenharmony_cifunctionality, see also the :mod:`datetime` and :mod:`calendar` modules.
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ciAlthough this module is always available,
137db96d56Sopenharmony_cinot all functions are available on all platforms.  Most of the functions
147db96d56Sopenharmony_cidefined in this module call platform C library functions with the same name.  It
157db96d56Sopenharmony_cimay sometimes be helpful to consult the platform documentation, because the
167db96d56Sopenharmony_cisemantics of these functions varies among platforms.
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ciAn explanation of some terminology and conventions is in order.
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci.. _epoch:
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci.. index:: single: epoch
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci* The :dfn:`epoch` is the point where the time starts, the return value of
257db96d56Sopenharmony_ci  ``time.gmtime(0)``. It is January 1, 1970, 00:00:00 (UTC) on all platforms.
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci.. _leap seconds: https://en.wikipedia.org/wiki/Leap_second
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci.. index:: seconds since the epoch
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci* The term :dfn:`seconds since the epoch` refers to the total number
327db96d56Sopenharmony_ci  of elapsed seconds since the epoch, typically excluding
337db96d56Sopenharmony_ci  `leap seconds`_.  Leap seconds are excluded from this total on all
347db96d56Sopenharmony_ci  POSIX-compliant platforms.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci.. index:: single: Year 2038
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci* The functions in this module may not handle dates and times before the epoch_ or
397db96d56Sopenharmony_ci  far in the future.  The cut-off point in the future is determined by the C
407db96d56Sopenharmony_ci  library; for 32-bit systems, it is typically in 2038.
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci.. index::
437db96d56Sopenharmony_ci   single: 2-digit years
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci* Function :func:`strptime` can parse 2-digit years when given ``%y`` format
467db96d56Sopenharmony_ci  code. When 2-digit years are parsed, they are converted according to the POSIX
477db96d56Sopenharmony_ci  and ISO C standards: values 69--99 are mapped to 1969--1999, and values 0--68
487db96d56Sopenharmony_ci  are mapped to 2000--2068.
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci.. index::
517db96d56Sopenharmony_ci   single: UTC
527db96d56Sopenharmony_ci   single: Coordinated Universal Time
537db96d56Sopenharmony_ci   single: Greenwich Mean Time
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci* UTC is Coordinated Universal Time (formerly known as Greenwich Mean Time, or
567db96d56Sopenharmony_ci  GMT).  The acronym UTC is not a mistake but a compromise between English and
577db96d56Sopenharmony_ci  French.
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci.. index:: single: Daylight Saving Time
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci* DST is Daylight Saving Time, an adjustment of the timezone by (usually) one
627db96d56Sopenharmony_ci  hour during part of the year.  DST rules are magic (determined by local law) and
637db96d56Sopenharmony_ci  can change from year to year.  The C library has a table containing the local
647db96d56Sopenharmony_ci  rules (often it is read from a system file for flexibility) and is the only
657db96d56Sopenharmony_ci  source of True Wisdom in this respect.
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci* The precision of the various real-time functions may be less than suggested by
687db96d56Sopenharmony_ci  the units in which their value or argument is expressed. E.g. on most Unix
697db96d56Sopenharmony_ci  systems, the clock "ticks" only 50 or 100 times a second.
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci* On the other hand, the precision of :func:`.time` and :func:`sleep` is better
727db96d56Sopenharmony_ci  than their Unix equivalents: times are expressed as floating point numbers,
737db96d56Sopenharmony_ci  :func:`.time` returns the most accurate time available (using Unix
747db96d56Sopenharmony_ci  :c:func:`gettimeofday` where available), and :func:`sleep` will accept a time
757db96d56Sopenharmony_ci  with a nonzero fraction (Unix :c:func:`select` is used to implement this, where
767db96d56Sopenharmony_ci  available).
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci* The time value as returned by :func:`gmtime`, :func:`localtime`, and
797db96d56Sopenharmony_ci  :func:`strptime`, and accepted by :func:`asctime`, :func:`mktime` and
807db96d56Sopenharmony_ci  :func:`strftime`, is a sequence of 9 integers.  The return values of
817db96d56Sopenharmony_ci  :func:`gmtime`, :func:`localtime`, and :func:`strptime` also offer attribute
827db96d56Sopenharmony_ci  names for individual fields.
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci  See :class:`struct_time` for a description of these objects.
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci  .. versionchanged:: 3.3
877db96d56Sopenharmony_ci     The :class:`struct_time` type was extended to provide the :attr:`tm_gmtoff`
887db96d56Sopenharmony_ci     and :attr:`tm_zone` attributes when platform supports corresponding
897db96d56Sopenharmony_ci     ``struct tm`` members.
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci  .. versionchanged:: 3.6
927db96d56Sopenharmony_ci     The :class:`struct_time` attributes :attr:`tm_gmtoff` and :attr:`tm_zone`
937db96d56Sopenharmony_ci     are now available on all platforms.
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci* Use the following functions to convert between time representations:
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci  +-------------------------+-------------------------+-------------------------+
987db96d56Sopenharmony_ci  | From                    | To                      | Use                     |
997db96d56Sopenharmony_ci  +=========================+=========================+=========================+
1007db96d56Sopenharmony_ci  | seconds since the epoch | :class:`struct_time` in | :func:`gmtime`          |
1017db96d56Sopenharmony_ci  |                         | UTC                     |                         |
1027db96d56Sopenharmony_ci  +-------------------------+-------------------------+-------------------------+
1037db96d56Sopenharmony_ci  | seconds since the epoch | :class:`struct_time` in | :func:`localtime`       |
1047db96d56Sopenharmony_ci  |                         | local time              |                         |
1057db96d56Sopenharmony_ci  +-------------------------+-------------------------+-------------------------+
1067db96d56Sopenharmony_ci  | :class:`struct_time` in | seconds since the epoch | :func:`calendar.timegm` |
1077db96d56Sopenharmony_ci  | UTC                     |                         |                         |
1087db96d56Sopenharmony_ci  +-------------------------+-------------------------+-------------------------+
1097db96d56Sopenharmony_ci  | :class:`struct_time` in | seconds since the epoch | :func:`mktime`          |
1107db96d56Sopenharmony_ci  | local time              |                         |                         |
1117db96d56Sopenharmony_ci  +-------------------------+-------------------------+-------------------------+
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci.. _time-functions:
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ciFunctions
1177db96d56Sopenharmony_ci---------
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci.. function:: asctime([t])
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci   Convert a tuple or :class:`struct_time` representing a time as returned by
1227db96d56Sopenharmony_ci   :func:`gmtime` or :func:`localtime` to a string of the following
1237db96d56Sopenharmony_ci   form: ``'Sun Jun 20 23:21:05 1993'``. The day field is two characters long
1247db96d56Sopenharmony_ci   and is space padded if the day is a single digit,
1257db96d56Sopenharmony_ci   e.g.: ``'Wed Jun  9 04:26:40 1993'``.
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci   If *t* is not provided, the current time as returned by :func:`localtime`
1287db96d56Sopenharmony_ci   is used. Locale information is not used by :func:`asctime`.
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci   .. note::
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci      Unlike the C function of the same name, :func:`asctime` does not add a
1337db96d56Sopenharmony_ci      trailing newline.
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci.. function:: pthread_getcpuclockid(thread_id)
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci   Return the *clk_id* of the thread-specific CPU-time clock for the specified *thread_id*.
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci   Use :func:`threading.get_ident` or the :attr:`~threading.Thread.ident`
1407db96d56Sopenharmony_ci   attribute of :class:`threading.Thread` objects to get a suitable value
1417db96d56Sopenharmony_ci   for *thread_id*.
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci   .. warning::
1447db96d56Sopenharmony_ci      Passing an invalid or expired *thread_id* may result in
1457db96d56Sopenharmony_ci      undefined behavior, such as segmentation fault.
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci   .. availability:: Unix
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci      See the man page for :manpage:`pthread_getcpuclockid(3)` for
1507db96d56Sopenharmony_ci      further information.
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci   .. versionadded:: 3.7
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci.. function:: clock_getres(clk_id)
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci   Return the resolution (precision) of the specified clock *clk_id*.  Refer to
1577db96d56Sopenharmony_ci   :ref:`time-clock-id-constants` for a list of accepted values for *clk_id*.
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci   .. availability:: Unix.
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci   .. versionadded:: 3.3
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci.. function:: clock_gettime(clk_id) -> float
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   Return the time of the specified clock *clk_id*.  Refer to
1677db96d56Sopenharmony_ci   :ref:`time-clock-id-constants` for a list of accepted values for *clk_id*.
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci   Use :func:`clock_gettime_ns` to avoid the precision loss caused by the
1707db96d56Sopenharmony_ci   :class:`float` type.
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci   .. availability:: Unix.
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci   .. versionadded:: 3.3
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci.. function:: clock_gettime_ns(clk_id) -> int
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci   Similar to :func:`clock_gettime` but return time as nanoseconds.
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci   .. availability:: Unix.
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci   .. versionadded:: 3.7
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci.. function:: clock_settime(clk_id, time: float)
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci   Set the time of the specified clock *clk_id*.  Currently,
1897db96d56Sopenharmony_ci   :data:`CLOCK_REALTIME` is the only accepted value for *clk_id*.
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci   Use :func:`clock_settime_ns` to avoid the precision loss caused by the
1927db96d56Sopenharmony_ci   :class:`float` type.
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci   .. availability:: Unix.
1957db96d56Sopenharmony_ci
1967db96d56Sopenharmony_ci   .. versionadded:: 3.3
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_ci.. function:: clock_settime_ns(clk_id, time: int)
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci   Similar to :func:`clock_settime` but set time with nanoseconds.
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci   .. availability:: Unix.
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci   .. versionadded:: 3.7
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci.. function:: ctime([secs])
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci   Convert a time expressed in seconds since the epoch_ to a string of a form:
2117db96d56Sopenharmony_ci   ``'Sun Jun 20 23:21:05 1993'`` representing local time. The day field
2127db96d56Sopenharmony_ci   is two characters long and is space padded if the day is a single digit,
2137db96d56Sopenharmony_ci   e.g.: ``'Wed Jun  9 04:26:40 1993'``.
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci   If *secs* is not provided or :const:`None`, the current time as
2167db96d56Sopenharmony_ci   returned by :func:`.time` is used. ``ctime(secs)`` is equivalent to
2177db96d56Sopenharmony_ci   ``asctime(localtime(secs))``. Locale information is not used by
2187db96d56Sopenharmony_ci   :func:`ctime`.
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci.. function:: get_clock_info(name)
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci   Get information on the specified clock as a namespace object.
2247db96d56Sopenharmony_ci   Supported clock names and the corresponding functions to read their value
2257db96d56Sopenharmony_ci   are:
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci   * ``'monotonic'``: :func:`time.monotonic`
2287db96d56Sopenharmony_ci   * ``'perf_counter'``: :func:`time.perf_counter`
2297db96d56Sopenharmony_ci   * ``'process_time'``: :func:`time.process_time`
2307db96d56Sopenharmony_ci   * ``'thread_time'``: :func:`time.thread_time`
2317db96d56Sopenharmony_ci   * ``'time'``: :func:`time.time`
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci   The result has the following attributes:
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ci   - *adjustable*: ``True`` if the clock can be changed automatically (e.g. by
2367db96d56Sopenharmony_ci     a NTP daemon) or manually by the system administrator, ``False`` otherwise
2377db96d56Sopenharmony_ci   - *implementation*: The name of the underlying C function used to get
2387db96d56Sopenharmony_ci     the clock value.  Refer to :ref:`time-clock-id-constants` for possible values.
2397db96d56Sopenharmony_ci   - *monotonic*: ``True`` if the clock cannot go backward,
2407db96d56Sopenharmony_ci     ``False`` otherwise
2417db96d56Sopenharmony_ci   - *resolution*: The resolution of the clock in seconds (:class:`float`)
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci   .. versionadded:: 3.3
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ci.. function:: gmtime([secs])
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci   Convert a time expressed in seconds since the epoch_ to a :class:`struct_time` in
2497db96d56Sopenharmony_ci   UTC in which the dst flag is always zero.  If *secs* is not provided or
2507db96d56Sopenharmony_ci   :const:`None`, the current time as returned by :func:`.time` is used.  Fractions
2517db96d56Sopenharmony_ci   of a second are ignored.  See above for a description of the
2527db96d56Sopenharmony_ci   :class:`struct_time` object. See :func:`calendar.timegm` for the inverse of this
2537db96d56Sopenharmony_ci   function.
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci.. function:: localtime([secs])
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci   Like :func:`gmtime` but converts to local time.  If *secs* is not provided or
2597db96d56Sopenharmony_ci   :const:`None`, the current time as returned by :func:`.time` is used.  The dst
2607db96d56Sopenharmony_ci   flag is set to ``1`` when DST applies to the given time.
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci   :func:`localtime` may raise :exc:`OverflowError`, if the timestamp is
2637db96d56Sopenharmony_ci   outside the range of values supported by the platform C :c:func:`localtime`
2647db96d56Sopenharmony_ci   or :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or
2657db96d56Sopenharmony_ci   :c:func:`gmtime` failure. It's common for this to be restricted to years
2667db96d56Sopenharmony_ci   between 1970 and 2038.
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ci.. function:: mktime(t)
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci   This is the inverse function of :func:`localtime`.  Its argument is the
2727db96d56Sopenharmony_ci   :class:`struct_time` or full 9-tuple (since the dst flag is needed; use ``-1``
2737db96d56Sopenharmony_ci   as the dst flag if it is unknown) which expresses the time in *local* time, not
2747db96d56Sopenharmony_ci   UTC.  It returns a floating point number, for compatibility with :func:`.time`.
2757db96d56Sopenharmony_ci   If the input value cannot be represented as a valid time, either
2767db96d56Sopenharmony_ci   :exc:`OverflowError` or :exc:`ValueError` will be raised (which depends on
2777db96d56Sopenharmony_ci   whether the invalid value is caught by Python or the underlying C libraries).
2787db96d56Sopenharmony_ci   The earliest date for which it can generate a time is platform-dependent.
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci.. function:: monotonic() -> float
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ci   Return the value (in fractional seconds) of a monotonic clock, i.e. a clock
2847db96d56Sopenharmony_ci   that cannot go backwards.  The clock is not affected by system clock updates.
2857db96d56Sopenharmony_ci   The reference point of the returned value is undefined, so that only the
2867db96d56Sopenharmony_ci   difference between the results of two calls is valid.
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_ci   Use :func:`monotonic_ns` to avoid the precision loss caused by the
2897db96d56Sopenharmony_ci   :class:`float` type.
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci   .. versionadded:: 3.3
2927db96d56Sopenharmony_ci
2937db96d56Sopenharmony_ci   .. versionchanged:: 3.5
2947db96d56Sopenharmony_ci      The function is now always available and always system-wide.
2957db96d56Sopenharmony_ci
2967db96d56Sopenharmony_ci   .. versionchanged:: 3.10
2977db96d56Sopenharmony_ci      On macOS, the function is now system-wide.
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci.. function:: monotonic_ns() -> int
3017db96d56Sopenharmony_ci
3027db96d56Sopenharmony_ci   Similar to :func:`monotonic`, but return time as nanoseconds.
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci   .. versionadded:: 3.7
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci.. function:: perf_counter() -> float
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci   .. index::
3097db96d56Sopenharmony_ci      single: benchmarking
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ci   Return the value (in fractional seconds) of a performance counter, i.e. a
3127db96d56Sopenharmony_ci   clock with the highest available resolution to measure a short duration.  It
3137db96d56Sopenharmony_ci   does include time elapsed during sleep and is system-wide.  The reference
3147db96d56Sopenharmony_ci   point of the returned value is undefined, so that only the difference between
3157db96d56Sopenharmony_ci   the results of two calls is valid.
3167db96d56Sopenharmony_ci
3177db96d56Sopenharmony_ci   Use :func:`perf_counter_ns` to avoid the precision loss caused by the
3187db96d56Sopenharmony_ci   :class:`float` type.
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci   .. versionadded:: 3.3
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ci   .. versionchanged:: 3.10
3237db96d56Sopenharmony_ci      On Windows, the function is now system-wide.
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ci.. function:: perf_counter_ns() -> int
3267db96d56Sopenharmony_ci
3277db96d56Sopenharmony_ci   Similar to :func:`perf_counter`, but return time as nanoseconds.
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci   .. versionadded:: 3.7
3307db96d56Sopenharmony_ci
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci.. function:: process_time() -> float
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci   .. index::
3357db96d56Sopenharmony_ci      single: CPU time
3367db96d56Sopenharmony_ci      single: processor time
3377db96d56Sopenharmony_ci      single: benchmarking
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ci   Return the value (in fractional seconds) of the sum of the system and user
3407db96d56Sopenharmony_ci   CPU time of the current process.  It does not include time elapsed during
3417db96d56Sopenharmony_ci   sleep.  It is process-wide by definition.  The reference point of the
3427db96d56Sopenharmony_ci   returned value is undefined, so that only the difference between the results
3437db96d56Sopenharmony_ci   of two calls is valid.
3447db96d56Sopenharmony_ci
3457db96d56Sopenharmony_ci   Use :func:`process_time_ns` to avoid the precision loss caused by the
3467db96d56Sopenharmony_ci   :class:`float` type.
3477db96d56Sopenharmony_ci
3487db96d56Sopenharmony_ci   .. versionadded:: 3.3
3497db96d56Sopenharmony_ci
3507db96d56Sopenharmony_ci.. function:: process_time_ns() -> int
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ci   Similar to :func:`process_time` but return time as nanoseconds.
3537db96d56Sopenharmony_ci
3547db96d56Sopenharmony_ci   .. versionadded:: 3.7
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci.. function:: sleep(secs)
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ci   Suspend execution of the calling thread for the given number of seconds.
3597db96d56Sopenharmony_ci   The argument may be a floating point number to indicate a more precise sleep
3607db96d56Sopenharmony_ci   time.
3617db96d56Sopenharmony_ci
3627db96d56Sopenharmony_ci   If the sleep is interrupted by a signal and no exception is raised by the
3637db96d56Sopenharmony_ci   signal handler, the sleep is restarted with a recomputed timeout.
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci   The suspension time may be longer than requested by an arbitrary amount,
3667db96d56Sopenharmony_ci   because of the scheduling of other activity in the system.
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci   On Windows, if *secs* is zero, the thread relinquishes the remainder of its
3697db96d56Sopenharmony_ci   time slice to any other thread that is ready to run. If there are no other
3707db96d56Sopenharmony_ci   threads ready to run, the function returns immediately, and the thread
3717db96d56Sopenharmony_ci   continues execution.  On Windows 8.1 and newer the implementation uses
3727db96d56Sopenharmony_ci   a `high-resolution timer
3737db96d56Sopenharmony_ci   <https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/high-resolution-timers>`_
3747db96d56Sopenharmony_ci   which provides resolution of 100 nanoseconds. If *secs* is zero, ``Sleep(0)`` is used.
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_ci   Unix implementation:
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci   * Use ``clock_nanosleep()`` if available (resolution: 1 nanosecond);
3797db96d56Sopenharmony_ci   * Or use ``nanosleep()`` if available (resolution: 1 nanosecond);
3807db96d56Sopenharmony_ci   * Or use ``select()`` (resolution: 1 microsecond).
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ci   .. versionchanged:: 3.11
3837db96d56Sopenharmony_ci      On Unix, the ``clock_nanosleep()`` and ``nanosleep()`` functions are now
3847db96d56Sopenharmony_ci      used if available. On Windows, a waitable timer is now used.
3857db96d56Sopenharmony_ci
3867db96d56Sopenharmony_ci   .. versionchanged:: 3.5
3877db96d56Sopenharmony_ci      The function now sleeps at least *secs* even if the sleep is interrupted
3887db96d56Sopenharmony_ci      by a signal, except if the signal handler raises an exception (see
3897db96d56Sopenharmony_ci      :pep:`475` for the rationale).
3907db96d56Sopenharmony_ci
3917db96d56Sopenharmony_ci
3927db96d56Sopenharmony_ci.. index::
3937db96d56Sopenharmony_ci   single: % (percent); datetime format
3947db96d56Sopenharmony_ci
3957db96d56Sopenharmony_ci.. function:: strftime(format[, t])
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci   Convert a tuple or :class:`struct_time` representing a time as returned by
3987db96d56Sopenharmony_ci   :func:`gmtime` or :func:`localtime` to a string as specified by the *format*
3997db96d56Sopenharmony_ci   argument.  If *t* is not provided, the current time as returned by
4007db96d56Sopenharmony_ci   :func:`localtime` is used.  *format* must be a string.  :exc:`ValueError` is
4017db96d56Sopenharmony_ci   raised if any field in *t* is outside of the allowed range.
4027db96d56Sopenharmony_ci
4037db96d56Sopenharmony_ci   0 is a legal argument for any position in the time tuple; if it is normally
4047db96d56Sopenharmony_ci   illegal the value is forced to a correct one.
4057db96d56Sopenharmony_ci
4067db96d56Sopenharmony_ci   The following directives can be embedded in the *format* string. They are shown
4077db96d56Sopenharmony_ci   without the optional field width and precision specification, and are replaced
4087db96d56Sopenharmony_ci   by the indicated characters in the :func:`strftime` result:
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4117db96d56Sopenharmony_ci   | Directive | Meaning                                        | Notes |
4127db96d56Sopenharmony_ci   +===========+================================================+=======+
4137db96d56Sopenharmony_ci   | ``%a``    | Locale's abbreviated weekday name.             |       |
4147db96d56Sopenharmony_ci   |           |                                                |       |
4157db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4167db96d56Sopenharmony_ci   | ``%A``    | Locale's full weekday name.                    |       |
4177db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4187db96d56Sopenharmony_ci   | ``%b``    | Locale's abbreviated month name.               |       |
4197db96d56Sopenharmony_ci   |           |                                                |       |
4207db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4217db96d56Sopenharmony_ci   | ``%B``    | Locale's full month name.                      |       |
4227db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4237db96d56Sopenharmony_ci   | ``%c``    | Locale's appropriate date and time             |       |
4247db96d56Sopenharmony_ci   |           | representation.                                |       |
4257db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4267db96d56Sopenharmony_ci   | ``%d``    | Day of the month as a decimal number [01,31].  |       |
4277db96d56Sopenharmony_ci   |           |                                                |       |
4287db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4297db96d56Sopenharmony_ci   | ``%H``    | Hour (24-hour clock) as a decimal number       |       |
4307db96d56Sopenharmony_ci   |           | [00,23].                                       |       |
4317db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4327db96d56Sopenharmony_ci   | ``%I``    | Hour (12-hour clock) as a decimal number       |       |
4337db96d56Sopenharmony_ci   |           | [01,12].                                       |       |
4347db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4357db96d56Sopenharmony_ci   | ``%j``    | Day of the year as a decimal number [001,366]. |       |
4367db96d56Sopenharmony_ci   |           |                                                |       |
4377db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4387db96d56Sopenharmony_ci   | ``%m``    | Month as a decimal number [01,12].             |       |
4397db96d56Sopenharmony_ci   |           |                                                |       |
4407db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4417db96d56Sopenharmony_ci   | ``%M``    | Minute as a decimal number [00,59].            |       |
4427db96d56Sopenharmony_ci   |           |                                                |       |
4437db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4447db96d56Sopenharmony_ci   | ``%p``    | Locale's equivalent of either AM or PM.        | \(1)  |
4457db96d56Sopenharmony_ci   |           |                                                |       |
4467db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4477db96d56Sopenharmony_ci   | ``%S``    | Second as a decimal number [00,61].            | \(2)  |
4487db96d56Sopenharmony_ci   |           |                                                |       |
4497db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4507db96d56Sopenharmony_ci   | ``%U``    | Week number of the year (Sunday as the first   | \(3)  |
4517db96d56Sopenharmony_ci   |           | day of the week) as a decimal number [00,53].  |       |
4527db96d56Sopenharmony_ci   |           | All days in a new year preceding the first     |       |
4537db96d56Sopenharmony_ci   |           | Sunday are considered to be in week 0.         |       |
4547db96d56Sopenharmony_ci   |           |                                                |       |
4557db96d56Sopenharmony_ci   |           |                                                |       |
4567db96d56Sopenharmony_ci   |           |                                                |       |
4577db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4587db96d56Sopenharmony_ci   | ``%w``    | Weekday as a decimal number [0(Sunday),6].     |       |
4597db96d56Sopenharmony_ci   |           |                                                |       |
4607db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4617db96d56Sopenharmony_ci   | ``%W``    | Week number of the year (Monday as the first   | \(3)  |
4627db96d56Sopenharmony_ci   |           | day of the week) as a decimal number [00,53].  |       |
4637db96d56Sopenharmony_ci   |           | All days in a new year preceding the first     |       |
4647db96d56Sopenharmony_ci   |           | Monday are considered to be in week 0.         |       |
4657db96d56Sopenharmony_ci   |           |                                                |       |
4667db96d56Sopenharmony_ci   |           |                                                |       |
4677db96d56Sopenharmony_ci   |           |                                                |       |
4687db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4697db96d56Sopenharmony_ci   | ``%x``    | Locale's appropriate date representation.      |       |
4707db96d56Sopenharmony_ci   |           |                                                |       |
4717db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4727db96d56Sopenharmony_ci   | ``%X``    | Locale's appropriate time representation.      |       |
4737db96d56Sopenharmony_ci   |           |                                                |       |
4747db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4757db96d56Sopenharmony_ci   | ``%y``    | Year without century as a decimal number       |       |
4767db96d56Sopenharmony_ci   |           | [00,99].                                       |       |
4777db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4787db96d56Sopenharmony_ci   | ``%Y``    | Year with century as a decimal number.         |       |
4797db96d56Sopenharmony_ci   |           |                                                |       |
4807db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4817db96d56Sopenharmony_ci   | ``%z``    | Time zone offset indicating a positive or      |       |
4827db96d56Sopenharmony_ci   |           | negative time difference from UTC/GMT of the   |       |
4837db96d56Sopenharmony_ci   |           | form +HHMM or -HHMM, where H represents decimal|       |
4847db96d56Sopenharmony_ci   |           | hour digits and M represents decimal minute    |       |
4857db96d56Sopenharmony_ci   |           | digits [-23:59, +23:59]. [1]_                  |       |
4867db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4877db96d56Sopenharmony_ci   | ``%Z``    | Time zone name (no characters if no time zone  |       |
4887db96d56Sopenharmony_ci   |           | exists). Deprecated. [1]_                      |       |
4897db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4907db96d56Sopenharmony_ci   | ``%%``    | A literal ``'%'`` character.                   |       |
4917db96d56Sopenharmony_ci   +-----------+------------------------------------------------+-------+
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ci   Notes:
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci   (1)
4967db96d56Sopenharmony_ci      When used with the :func:`strptime` function, the ``%p`` directive only affects
4977db96d56Sopenharmony_ci      the output hour field if the ``%I`` directive is used to parse the hour.
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci   (2)
5007db96d56Sopenharmony_ci      The range really is ``0`` to ``61``; value ``60`` is valid in
5017db96d56Sopenharmony_ci      timestamps representing `leap seconds`_ and value ``61`` is supported
5027db96d56Sopenharmony_ci      for historical reasons.
5037db96d56Sopenharmony_ci
5047db96d56Sopenharmony_ci   (3)
5057db96d56Sopenharmony_ci      When used with the :func:`strptime` function, ``%U`` and ``%W`` are only used in
5067db96d56Sopenharmony_ci      calculations when the day of the week and the year are specified.
5077db96d56Sopenharmony_ci
5087db96d56Sopenharmony_ci   Here is an example, a format for dates compatible with that specified  in the
5097db96d56Sopenharmony_ci   :rfc:`2822` Internet email standard.  [1]_ ::
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci      >>> from time import gmtime, strftime
5127db96d56Sopenharmony_ci      >>> strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
5137db96d56Sopenharmony_ci      'Thu, 28 Jun 2001 14:17:15 +0000'
5147db96d56Sopenharmony_ci
5157db96d56Sopenharmony_ci   Additional directives may be supported on certain platforms, but only the
5167db96d56Sopenharmony_ci   ones listed here have a meaning standardized by ANSI C.  To see the full set
5177db96d56Sopenharmony_ci   of format codes supported on your platform, consult the :manpage:`strftime(3)`
5187db96d56Sopenharmony_ci   documentation.
5197db96d56Sopenharmony_ci
5207db96d56Sopenharmony_ci   On some platforms, an optional field width and precision specification can
5217db96d56Sopenharmony_ci   immediately follow the initial ``'%'`` of a directive in the following order;
5227db96d56Sopenharmony_ci   this is also not portable. The field width is normally 2 except for ``%j`` where
5237db96d56Sopenharmony_ci   it is 3.
5247db96d56Sopenharmony_ci
5257db96d56Sopenharmony_ci
5267db96d56Sopenharmony_ci.. index::
5277db96d56Sopenharmony_ci   single: % (percent); datetime format
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_ci.. function:: strptime(string[, format])
5307db96d56Sopenharmony_ci
5317db96d56Sopenharmony_ci   Parse a string representing a time according to a format.  The return value
5327db96d56Sopenharmony_ci   is a :class:`struct_time` as returned by :func:`gmtime` or
5337db96d56Sopenharmony_ci   :func:`localtime`.
5347db96d56Sopenharmony_ci
5357db96d56Sopenharmony_ci   The *format* parameter uses the same directives as those used by
5367db96d56Sopenharmony_ci   :func:`strftime`; it defaults to ``"%a %b %d %H:%M:%S %Y"`` which matches the
5377db96d56Sopenharmony_ci   formatting returned by :func:`ctime`. If *string* cannot be parsed according
5387db96d56Sopenharmony_ci   to *format*, or if it has excess data after parsing, :exc:`ValueError` is
5397db96d56Sopenharmony_ci   raised. The default values used to fill in any missing data when more
5407db96d56Sopenharmony_ci   accurate values cannot be inferred are ``(1900, 1, 1, 0, 0, 0, 0, 1, -1)``.
5417db96d56Sopenharmony_ci   Both *string* and *format* must be strings.
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci   For example:
5447db96d56Sopenharmony_ci
5457db96d56Sopenharmony_ci      >>> import time
5467db96d56Sopenharmony_ci      >>> time.strptime("30 Nov 00", "%d %b %y")   # doctest: +NORMALIZE_WHITESPACE
5477db96d56Sopenharmony_ci      time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0,
5487db96d56Sopenharmony_ci                       tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ci   Support for the ``%Z`` directive is based on the values contained in ``tzname``
5517db96d56Sopenharmony_ci   and whether ``daylight`` is true.  Because of this, it is platform-specific
5527db96d56Sopenharmony_ci   except for recognizing UTC and GMT which are always known (and are considered to
5537db96d56Sopenharmony_ci   be non-daylight savings timezones).
5547db96d56Sopenharmony_ci
5557db96d56Sopenharmony_ci   Only the directives specified in the documentation are supported.  Because
5567db96d56Sopenharmony_ci   ``strftime()`` is implemented per platform it can sometimes offer more
5577db96d56Sopenharmony_ci   directives than those listed.  But ``strptime()`` is independent of any platform
5587db96d56Sopenharmony_ci   and thus does not necessarily support all directives available that are not
5597db96d56Sopenharmony_ci   documented as supported.
5607db96d56Sopenharmony_ci
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci.. class:: struct_time
5637db96d56Sopenharmony_ci
5647db96d56Sopenharmony_ci   The type of the time value sequence returned by :func:`gmtime`,
5657db96d56Sopenharmony_ci   :func:`localtime`, and :func:`strptime`.  It is an object with a :term:`named
5667db96d56Sopenharmony_ci   tuple` interface: values can be accessed by index and by attribute name.  The
5677db96d56Sopenharmony_ci   following values are present:
5687db96d56Sopenharmony_ci
5697db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5707db96d56Sopenharmony_ci   | Index | Attribute         | Values                          |
5717db96d56Sopenharmony_ci   +=======+===================+=================================+
5727db96d56Sopenharmony_ci   | 0     | :attr:`tm_year`   | (for example, 1993)             |
5737db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5747db96d56Sopenharmony_ci   | 1     | :attr:`tm_mon`    | range [1, 12]                   |
5757db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5767db96d56Sopenharmony_ci   | 2     | :attr:`tm_mday`   | range [1, 31]                   |
5777db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5787db96d56Sopenharmony_ci   | 3     | :attr:`tm_hour`   | range [0, 23]                   |
5797db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5807db96d56Sopenharmony_ci   | 4     | :attr:`tm_min`    | range [0, 59]                   |
5817db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5827db96d56Sopenharmony_ci   | 5     | :attr:`tm_sec`    | range [0, 61]; see **(2)** in   |
5837db96d56Sopenharmony_ci   |       |                   | :func:`strftime` description    |
5847db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5857db96d56Sopenharmony_ci   | 6     | :attr:`tm_wday`   | range [0, 6], Monday is 0       |
5867db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5877db96d56Sopenharmony_ci   | 7     | :attr:`tm_yday`   | range [1, 366]                  |
5887db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5897db96d56Sopenharmony_ci   | 8     | :attr:`tm_isdst`  | 0, 1 or -1; see below           |
5907db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5917db96d56Sopenharmony_ci   | N/A   | :attr:`tm_zone`   | abbreviation of timezone name   |
5927db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5937db96d56Sopenharmony_ci   | N/A   | :attr:`tm_gmtoff` | offset east of UTC in seconds   |
5947db96d56Sopenharmony_ci   +-------+-------------------+---------------------------------+
5957db96d56Sopenharmony_ci
5967db96d56Sopenharmony_ci   Note that unlike the C structure, the month value is a range of [1, 12], not
5977db96d56Sopenharmony_ci   [0, 11].
5987db96d56Sopenharmony_ci
5997db96d56Sopenharmony_ci   In calls to :func:`mktime`, :attr:`tm_isdst` may be set to 1 when daylight
6007db96d56Sopenharmony_ci   savings time is in effect, and 0 when it is not.  A value of -1 indicates that
6017db96d56Sopenharmony_ci   this is not known, and will usually result in the correct state being filled in.
6027db96d56Sopenharmony_ci
6037db96d56Sopenharmony_ci   When a tuple with an incorrect length is passed to a function expecting a
6047db96d56Sopenharmony_ci   :class:`struct_time`, or having elements of the wrong type, a
6057db96d56Sopenharmony_ci   :exc:`TypeError` is raised.
6067db96d56Sopenharmony_ci
6077db96d56Sopenharmony_ci.. function:: time() -> float
6087db96d56Sopenharmony_ci
6097db96d56Sopenharmony_ci   Return the time in seconds since the epoch_ as a floating point
6107db96d56Sopenharmony_ci   number. The handling of `leap seconds`_ is platform dependent.
6117db96d56Sopenharmony_ci   On Windows and most Unix systems, the leap seconds are not counted towards
6127db96d56Sopenharmony_ci   the time in seconds since the epoch_. This is commonly referred to as `Unix
6137db96d56Sopenharmony_ci   time <https://en.wikipedia.org/wiki/Unix_time>`_.
6147db96d56Sopenharmony_ci
6157db96d56Sopenharmony_ci   Note that even though the time is always returned as a floating point
6167db96d56Sopenharmony_ci   number, not all systems provide time with a better precision than 1 second.
6177db96d56Sopenharmony_ci   While this function normally returns non-decreasing values, it can return a
6187db96d56Sopenharmony_ci   lower value than a previous call if the system clock has been set back
6197db96d56Sopenharmony_ci   between the two calls.
6207db96d56Sopenharmony_ci
6217db96d56Sopenharmony_ci   The number returned by :func:`.time` may be converted into a more common
6227db96d56Sopenharmony_ci   time format (i.e. year, month, day, hour, etc...) in UTC by passing it to
6237db96d56Sopenharmony_ci   :func:`gmtime` function or in local time by passing it to the
6247db96d56Sopenharmony_ci   :func:`localtime` function. In both cases a
6257db96d56Sopenharmony_ci   :class:`struct_time` object is returned, from which the components
6267db96d56Sopenharmony_ci   of the calendar date may be accessed as attributes.
6277db96d56Sopenharmony_ci
6287db96d56Sopenharmony_ci   Use :func:`time_ns` to avoid the precision loss caused by the :class:`float`
6297db96d56Sopenharmony_ci   type.
6307db96d56Sopenharmony_ci
6317db96d56Sopenharmony_ci
6327db96d56Sopenharmony_ci.. function:: time_ns() -> int
6337db96d56Sopenharmony_ci
6347db96d56Sopenharmony_ci   Similar to :func:`~time.time` but returns time as an integer number of
6357db96d56Sopenharmony_ci   nanoseconds since the epoch_.
6367db96d56Sopenharmony_ci
6377db96d56Sopenharmony_ci   .. versionadded:: 3.7
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_ci
6407db96d56Sopenharmony_ci.. function:: thread_time() -> float
6417db96d56Sopenharmony_ci
6427db96d56Sopenharmony_ci   .. index::
6437db96d56Sopenharmony_ci      single: CPU time
6447db96d56Sopenharmony_ci      single: processor time
6457db96d56Sopenharmony_ci      single: benchmarking
6467db96d56Sopenharmony_ci
6477db96d56Sopenharmony_ci   Return the value (in fractional seconds) of the sum of the system and user
6487db96d56Sopenharmony_ci   CPU time of the current thread.  It does not include time elapsed during
6497db96d56Sopenharmony_ci   sleep.  It is thread-specific by definition.  The reference point of the
6507db96d56Sopenharmony_ci   returned value is undefined, so that only the difference between the results
6517db96d56Sopenharmony_ci   of two calls in the same thread is valid.
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci   Use :func:`thread_time_ns` to avoid the precision loss caused by the
6547db96d56Sopenharmony_ci   :class:`float` type.
6557db96d56Sopenharmony_ci
6567db96d56Sopenharmony_ci   .. availability::  Linux, Unix, Windows.
6577db96d56Sopenharmony_ci
6587db96d56Sopenharmony_ci      Unix systems supporting ``CLOCK_THREAD_CPUTIME_ID``.
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_ci   .. versionadded:: 3.7
6617db96d56Sopenharmony_ci
6627db96d56Sopenharmony_ci
6637db96d56Sopenharmony_ci.. function:: thread_time_ns() -> int
6647db96d56Sopenharmony_ci
6657db96d56Sopenharmony_ci   Similar to :func:`thread_time` but return time as nanoseconds.
6667db96d56Sopenharmony_ci
6677db96d56Sopenharmony_ci   .. versionadded:: 3.7
6687db96d56Sopenharmony_ci
6697db96d56Sopenharmony_ci
6707db96d56Sopenharmony_ci.. function:: tzset()
6717db96d56Sopenharmony_ci
6727db96d56Sopenharmony_ci   Reset the time conversion rules used by the library routines. The environment
6737db96d56Sopenharmony_ci   variable :envvar:`TZ` specifies how this is done. It will also set the variables
6747db96d56Sopenharmony_ci   ``tzname`` (from the :envvar:`TZ` environment variable), ``timezone`` (non-DST
6757db96d56Sopenharmony_ci   seconds West of UTC), ``altzone`` (DST seconds west of UTC) and ``daylight``
6767db96d56Sopenharmony_ci   (to 0 if this timezone does not have any daylight saving time rules, or to
6777db96d56Sopenharmony_ci   nonzero if there is a time, past, present or future when daylight saving time
6787db96d56Sopenharmony_ci   applies).
6797db96d56Sopenharmony_ci
6807db96d56Sopenharmony_ci   .. availability:: Unix.
6817db96d56Sopenharmony_ci
6827db96d56Sopenharmony_ci   .. note::
6837db96d56Sopenharmony_ci
6847db96d56Sopenharmony_ci      Although in many cases, changing the :envvar:`TZ` environment variable may
6857db96d56Sopenharmony_ci      affect the output of functions like :func:`localtime` without calling
6867db96d56Sopenharmony_ci      :func:`tzset`, this behavior should not be relied on.
6877db96d56Sopenharmony_ci
6887db96d56Sopenharmony_ci      The :envvar:`TZ` environment variable should contain no whitespace.
6897db96d56Sopenharmony_ci
6907db96d56Sopenharmony_ci   The standard format of the :envvar:`TZ` environment variable is (whitespace
6917db96d56Sopenharmony_ci   added for clarity)::
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci      std offset [dst [offset [,start[/time], end[/time]]]]
6947db96d56Sopenharmony_ci
6957db96d56Sopenharmony_ci   Where the components are:
6967db96d56Sopenharmony_ci
6977db96d56Sopenharmony_ci   ``std`` and ``dst``
6987db96d56Sopenharmony_ci      Three or more alphanumerics giving the timezone abbreviations. These will be
6997db96d56Sopenharmony_ci      propagated into time.tzname
7007db96d56Sopenharmony_ci
7017db96d56Sopenharmony_ci   ``offset``
7027db96d56Sopenharmony_ci      The offset has the form: ``± hh[:mm[:ss]]``. This indicates the value
7037db96d56Sopenharmony_ci      added the local time to arrive at UTC.  If preceded by a '-', the timezone
7047db96d56Sopenharmony_ci      is east of the Prime Meridian; otherwise, it is west. If no offset follows
7057db96d56Sopenharmony_ci      dst, summer time is assumed to be one hour ahead of standard time.
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ci   ``start[/time], end[/time]``
7087db96d56Sopenharmony_ci      Indicates when to change to and back from DST. The format of the
7097db96d56Sopenharmony_ci      start and end dates are one of the following:
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ci      :samp:`J{n}`
7127db96d56Sopenharmony_ci         The Julian day *n* (1 <= *n* <= 365). Leap days are not counted, so in
7137db96d56Sopenharmony_ci         all years February 28 is day 59 and March 1 is day 60.
7147db96d56Sopenharmony_ci
7157db96d56Sopenharmony_ci      :samp:`{n}`
7167db96d56Sopenharmony_ci         The zero-based Julian day (0 <= *n* <= 365). Leap days are counted, and
7177db96d56Sopenharmony_ci         it is possible to refer to February 29.
7187db96d56Sopenharmony_ci
7197db96d56Sopenharmony_ci      :samp:`M{m}.{n}.{d}`
7207db96d56Sopenharmony_ci         The *d*'th day (0 <= *d* <= 6) of week *n* of month *m* of the year (1
7217db96d56Sopenharmony_ci         <= *n* <= 5, 1 <= *m* <= 12, where week 5 means "the last *d* day in
7227db96d56Sopenharmony_ci         month *m*" which may occur in either the fourth or the fifth
7237db96d56Sopenharmony_ci         week). Week 1 is the first week in which the *d*'th day occurs. Day
7247db96d56Sopenharmony_ci         zero is a Sunday.
7257db96d56Sopenharmony_ci
7267db96d56Sopenharmony_ci      ``time`` has the same format as ``offset`` except that no leading sign
7277db96d56Sopenharmony_ci      ('-' or '+') is allowed. The default, if time is not given, is 02:00:00.
7287db96d56Sopenharmony_ci
7297db96d56Sopenharmony_ci   ::
7307db96d56Sopenharmony_ci
7317db96d56Sopenharmony_ci      >>> os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0'
7327db96d56Sopenharmony_ci      >>> time.tzset()
7337db96d56Sopenharmony_ci      >>> time.strftime('%X %x %Z')
7347db96d56Sopenharmony_ci      '02:07:36 05/08/03 EDT'
7357db96d56Sopenharmony_ci      >>> os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
7367db96d56Sopenharmony_ci      >>> time.tzset()
7377db96d56Sopenharmony_ci      >>> time.strftime('%X %x %Z')
7387db96d56Sopenharmony_ci      '16:08:12 05/08/03 AEST'
7397db96d56Sopenharmony_ci
7407db96d56Sopenharmony_ci   On many Unix systems (including \*BSD, Linux, Solaris, and Darwin), it is more
7417db96d56Sopenharmony_ci   convenient to use the system's zoneinfo (:manpage:`tzfile(5)`)  database to
7427db96d56Sopenharmony_ci   specify the timezone rules. To do this, set the  :envvar:`TZ` environment
7437db96d56Sopenharmony_ci   variable to the path of the required timezone  datafile, relative to the root of
7447db96d56Sopenharmony_ci   the systems 'zoneinfo' timezone database, usually located at
7457db96d56Sopenharmony_ci   :file:`/usr/share/zoneinfo`. For example,  ``'US/Eastern'``,
7467db96d56Sopenharmony_ci   ``'Australia/Melbourne'``, ``'Egypt'`` or  ``'Europe/Amsterdam'``. ::
7477db96d56Sopenharmony_ci
7487db96d56Sopenharmony_ci      >>> os.environ['TZ'] = 'US/Eastern'
7497db96d56Sopenharmony_ci      >>> time.tzset()
7507db96d56Sopenharmony_ci      >>> time.tzname
7517db96d56Sopenharmony_ci      ('EST', 'EDT')
7527db96d56Sopenharmony_ci      >>> os.environ['TZ'] = 'Egypt'
7537db96d56Sopenharmony_ci      >>> time.tzset()
7547db96d56Sopenharmony_ci      >>> time.tzname
7557db96d56Sopenharmony_ci      ('EET', 'EEST')
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci
7587db96d56Sopenharmony_ci.. _time-clock-id-constants:
7597db96d56Sopenharmony_ci
7607db96d56Sopenharmony_ciClock ID Constants
7617db96d56Sopenharmony_ci------------------
7627db96d56Sopenharmony_ci
7637db96d56Sopenharmony_ciThese constants are used as parameters for :func:`clock_getres` and
7647db96d56Sopenharmony_ci:func:`clock_gettime`.
7657db96d56Sopenharmony_ci
7667db96d56Sopenharmony_ci.. data:: CLOCK_BOOTTIME
7677db96d56Sopenharmony_ci
7687db96d56Sopenharmony_ci   Identical to :data:`CLOCK_MONOTONIC`, except it also includes any time that
7697db96d56Sopenharmony_ci   the system is suspended.
7707db96d56Sopenharmony_ci
7717db96d56Sopenharmony_ci   This allows applications to get a suspend-aware monotonic  clock  without
7727db96d56Sopenharmony_ci   having to deal with the complications of :data:`CLOCK_REALTIME`, which may
7737db96d56Sopenharmony_ci   have  discontinuities if the time is changed using ``settimeofday()`` or
7747db96d56Sopenharmony_ci   similar.
7757db96d56Sopenharmony_ci
7767db96d56Sopenharmony_ci   .. availability:: Linux >= 2.6.39.
7777db96d56Sopenharmony_ci
7787db96d56Sopenharmony_ci   .. versionadded:: 3.7
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ci
7817db96d56Sopenharmony_ci.. data:: CLOCK_HIGHRES
7827db96d56Sopenharmony_ci
7837db96d56Sopenharmony_ci   The Solaris OS has a ``CLOCK_HIGHRES`` timer that attempts to use an optimal
7847db96d56Sopenharmony_ci   hardware source, and may give close to nanosecond resolution.
7857db96d56Sopenharmony_ci   ``CLOCK_HIGHRES`` is the nonadjustable, high-resolution clock.
7867db96d56Sopenharmony_ci
7877db96d56Sopenharmony_ci   .. availability:: Solaris.
7887db96d56Sopenharmony_ci
7897db96d56Sopenharmony_ci   .. versionadded:: 3.3
7907db96d56Sopenharmony_ci
7917db96d56Sopenharmony_ci
7927db96d56Sopenharmony_ci.. data:: CLOCK_MONOTONIC
7937db96d56Sopenharmony_ci
7947db96d56Sopenharmony_ci   Clock that cannot be set and represents monotonic time since some unspecified
7957db96d56Sopenharmony_ci   starting point.
7967db96d56Sopenharmony_ci
7977db96d56Sopenharmony_ci   .. availability:: Unix.
7987db96d56Sopenharmony_ci
7997db96d56Sopenharmony_ci   .. versionadded:: 3.3
8007db96d56Sopenharmony_ci
8017db96d56Sopenharmony_ci
8027db96d56Sopenharmony_ci.. data:: CLOCK_MONOTONIC_RAW
8037db96d56Sopenharmony_ci
8047db96d56Sopenharmony_ci   Similar to :data:`CLOCK_MONOTONIC`, but provides access to a raw
8057db96d56Sopenharmony_ci   hardware-based time that is not subject to NTP adjustments.
8067db96d56Sopenharmony_ci
8077db96d56Sopenharmony_ci   .. availability:: Linux >= 2.6.28, macOS >= 10.12.
8087db96d56Sopenharmony_ci
8097db96d56Sopenharmony_ci   .. versionadded:: 3.3
8107db96d56Sopenharmony_ci
8117db96d56Sopenharmony_ci
8127db96d56Sopenharmony_ci.. data:: CLOCK_PROCESS_CPUTIME_ID
8137db96d56Sopenharmony_ci
8147db96d56Sopenharmony_ci   High-resolution per-process timer from the CPU.
8157db96d56Sopenharmony_ci
8167db96d56Sopenharmony_ci   .. availability:: Unix.
8177db96d56Sopenharmony_ci
8187db96d56Sopenharmony_ci   .. versionadded:: 3.3
8197db96d56Sopenharmony_ci
8207db96d56Sopenharmony_ci
8217db96d56Sopenharmony_ci.. data:: CLOCK_PROF
8227db96d56Sopenharmony_ci
8237db96d56Sopenharmony_ci   High-resolution per-process timer from the CPU.
8247db96d56Sopenharmony_ci
8257db96d56Sopenharmony_ci   .. availability:: FreeBSD, NetBSD >= 7, OpenBSD.
8267db96d56Sopenharmony_ci
8277db96d56Sopenharmony_ci   .. versionadded:: 3.7
8287db96d56Sopenharmony_ci
8297db96d56Sopenharmony_ci.. data:: CLOCK_TAI
8307db96d56Sopenharmony_ci
8317db96d56Sopenharmony_ci   `International Atomic Time <https://www.nist.gov/pml/time-and-frequency-division/nist-time-frequently-asked-questions-faq#tai>`_
8327db96d56Sopenharmony_ci
8337db96d56Sopenharmony_ci   The system must have a current leap second table in order for this to give
8347db96d56Sopenharmony_ci   the correct answer.  PTP or NTP software can maintain a leap second table.
8357db96d56Sopenharmony_ci
8367db96d56Sopenharmony_ci   .. availability:: Linux.
8377db96d56Sopenharmony_ci
8387db96d56Sopenharmony_ci   .. versionadded:: 3.9
8397db96d56Sopenharmony_ci
8407db96d56Sopenharmony_ci.. data:: CLOCK_THREAD_CPUTIME_ID
8417db96d56Sopenharmony_ci
8427db96d56Sopenharmony_ci   Thread-specific CPU-time clock.
8437db96d56Sopenharmony_ci
8447db96d56Sopenharmony_ci   .. availability::  Unix.
8457db96d56Sopenharmony_ci
8467db96d56Sopenharmony_ci   .. versionadded:: 3.3
8477db96d56Sopenharmony_ci
8487db96d56Sopenharmony_ci
8497db96d56Sopenharmony_ci.. data:: CLOCK_UPTIME
8507db96d56Sopenharmony_ci
8517db96d56Sopenharmony_ci   Time whose absolute value is the time the system has been running and not
8527db96d56Sopenharmony_ci   suspended, providing accurate uptime measurement, both absolute and
8537db96d56Sopenharmony_ci   interval.
8547db96d56Sopenharmony_ci
8557db96d56Sopenharmony_ci   .. availability:: FreeBSD, OpenBSD >= 5.5.
8567db96d56Sopenharmony_ci
8577db96d56Sopenharmony_ci   .. versionadded:: 3.7
8587db96d56Sopenharmony_ci
8597db96d56Sopenharmony_ci
8607db96d56Sopenharmony_ci.. data:: CLOCK_UPTIME_RAW
8617db96d56Sopenharmony_ci
8627db96d56Sopenharmony_ci   Clock that increments monotonically, tracking the time since an arbitrary
8637db96d56Sopenharmony_ci   point, unaffected by frequency or time adjustments and not incremented while
8647db96d56Sopenharmony_ci   the system is asleep.
8657db96d56Sopenharmony_ci
8667db96d56Sopenharmony_ci   .. availability:: macOS >= 10.12.
8677db96d56Sopenharmony_ci
8687db96d56Sopenharmony_ci   .. versionadded:: 3.8
8697db96d56Sopenharmony_ci
8707db96d56Sopenharmony_ciThe following constant is the only parameter that can be sent to
8717db96d56Sopenharmony_ci:func:`clock_settime`.
8727db96d56Sopenharmony_ci
8737db96d56Sopenharmony_ci
8747db96d56Sopenharmony_ci.. data:: CLOCK_REALTIME
8757db96d56Sopenharmony_ci
8767db96d56Sopenharmony_ci   System-wide real-time clock.  Setting this clock requires appropriate
8777db96d56Sopenharmony_ci   privileges.
8787db96d56Sopenharmony_ci
8797db96d56Sopenharmony_ci   .. availability:: Unix.
8807db96d56Sopenharmony_ci
8817db96d56Sopenharmony_ci   .. versionadded:: 3.3
8827db96d56Sopenharmony_ci
8837db96d56Sopenharmony_ci
8847db96d56Sopenharmony_ci.. _time-timezone-constants:
8857db96d56Sopenharmony_ci
8867db96d56Sopenharmony_ciTimezone Constants
8877db96d56Sopenharmony_ci-------------------
8887db96d56Sopenharmony_ci
8897db96d56Sopenharmony_ci.. data:: altzone
8907db96d56Sopenharmony_ci
8917db96d56Sopenharmony_ci   The offset of the local DST timezone, in seconds west of UTC, if one is defined.
8927db96d56Sopenharmony_ci   This is negative if the local DST timezone is east of UTC (as in Western Europe,
8937db96d56Sopenharmony_ci   including the UK).  Only use this if ``daylight`` is nonzero.  See note below.
8947db96d56Sopenharmony_ci
8957db96d56Sopenharmony_ci.. data:: daylight
8967db96d56Sopenharmony_ci
8977db96d56Sopenharmony_ci   Nonzero if a DST timezone is defined.  See note below.
8987db96d56Sopenharmony_ci
8997db96d56Sopenharmony_ci.. data:: timezone
9007db96d56Sopenharmony_ci
9017db96d56Sopenharmony_ci   The offset of the local (non-DST) timezone, in seconds west of UTC (negative in
9027db96d56Sopenharmony_ci   most of Western Europe, positive in the US, zero in the UK).  See note below.
9037db96d56Sopenharmony_ci
9047db96d56Sopenharmony_ci.. data:: tzname
9057db96d56Sopenharmony_ci
9067db96d56Sopenharmony_ci   A tuple of two strings: the first is the name of the local non-DST timezone, the
9077db96d56Sopenharmony_ci   second is the name of the local DST timezone.  If no DST timezone is defined,
9087db96d56Sopenharmony_ci   the second string should not be used.  See note below.
9097db96d56Sopenharmony_ci
9107db96d56Sopenharmony_ci.. note::
9117db96d56Sopenharmony_ci
9127db96d56Sopenharmony_ci   For the above Timezone constants (:data:`altzone`, :data:`daylight`, :data:`timezone`,
9137db96d56Sopenharmony_ci   and :data:`tzname`), the value is determined by the timezone rules in effect
9147db96d56Sopenharmony_ci   at module load time or the last time :func:`tzset` is called and may be incorrect
9157db96d56Sopenharmony_ci   for times in the past.  It is recommended to use the :attr:`tm_gmtoff` and
9167db96d56Sopenharmony_ci   :attr:`tm_zone` results from :func:`localtime` to obtain timezone information.
9177db96d56Sopenharmony_ci
9187db96d56Sopenharmony_ci
9197db96d56Sopenharmony_ci.. seealso::
9207db96d56Sopenharmony_ci
9217db96d56Sopenharmony_ci   Module :mod:`datetime`
9227db96d56Sopenharmony_ci      More object-oriented interface to dates and times.
9237db96d56Sopenharmony_ci
9247db96d56Sopenharmony_ci   Module :mod:`locale`
9257db96d56Sopenharmony_ci      Internationalization services.  The locale setting affects the interpretation
9267db96d56Sopenharmony_ci      of many format specifiers in :func:`strftime` and :func:`strptime`.
9277db96d56Sopenharmony_ci
9287db96d56Sopenharmony_ci   Module :mod:`calendar`
9297db96d56Sopenharmony_ci      General calendar-related functions.   :func:`~calendar.timegm` is the
9307db96d56Sopenharmony_ci      inverse of :func:`gmtime` from this module.
9317db96d56Sopenharmony_ci
9327db96d56Sopenharmony_ci.. rubric:: Footnotes
9337db96d56Sopenharmony_ci
9347db96d56Sopenharmony_ci.. [1] The use of ``%Z`` is now deprecated, but the ``%z`` escape that expands to the
9357db96d56Sopenharmony_ci   preferred hour/minute offset is not supported by all ANSI C libraries. Also, a
9367db96d56Sopenharmony_ci   strict reading of the original 1982 :rfc:`822` standard calls for a two-digit
9377db96d56Sopenharmony_ci   year (``%y`` rather than ``%Y``), but practice moved to 4-digit years long before the
9387db96d56Sopenharmony_ci   year 2000.  After that, :rfc:`822` became obsolete and the 4-digit year has
9397db96d56Sopenharmony_ci   been first recommended by :rfc:`1123` and then mandated by :rfc:`2822`.
940