17db96d56Sopenharmony_ci:mod:`zoneinfo` --- IANA time zone support 27db96d56Sopenharmony_ci========================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: zoneinfo 57db96d56Sopenharmony_ci :synopsis: IANA time zone support 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. versionadded:: 3.9 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci.. moduleauthor:: Paul Ganssle <paul@ganssle.io> 107db96d56Sopenharmony_ci.. sectionauthor:: Paul Ganssle <paul@ganssle.io> 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci**Source code:** :source:`Lib/zoneinfo` 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci-------------- 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciThe :mod:`zoneinfo` module provides a concrete time zone implementation to 177db96d56Sopenharmony_cisupport the IANA time zone database as originally specified in :pep:`615`. By 187db96d56Sopenharmony_cidefault, :mod:`zoneinfo` uses the system's time zone data if available; if no 197db96d56Sopenharmony_cisystem time zone data is available, the library will fall back to using the 207db96d56Sopenharmony_cifirst-party `tzdata`_ package available on PyPI. 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci.. seealso:: 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci Module: :mod:`datetime` 257db96d56Sopenharmony_ci Provides the :class:`~datetime.time` and :class:`~datetime.datetime` 267db96d56Sopenharmony_ci types with which the :class:`ZoneInfo` class is designed to be used. 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci Package `tzdata`_ 297db96d56Sopenharmony_ci First-party package maintained by the CPython core developers to supply 307db96d56Sopenharmony_ci time zone data via PyPI. 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ciUsing ``ZoneInfo`` 357db96d56Sopenharmony_ci------------------ 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci:class:`ZoneInfo` is a concrete implementation of the :class:`datetime.tzinfo` 387db96d56Sopenharmony_ciabstract base class, and is intended to be attached to ``tzinfo``, either via 397db96d56Sopenharmony_cithe constructor, the :meth:`datetime.replace <datetime.datetime.replace>` 407db96d56Sopenharmony_cimethod or :meth:`datetime.astimezone <datetime.datetime.astimezone>`:: 417db96d56Sopenharmony_ci 427db96d56Sopenharmony_ci >>> from zoneinfo import ZoneInfo 437db96d56Sopenharmony_ci >>> from datetime import datetime, timedelta 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles")) 467db96d56Sopenharmony_ci >>> print(dt) 477db96d56Sopenharmony_ci 2020-10-31 12:00:00-07:00 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ci >>> dt.tzname() 507db96d56Sopenharmony_ci 'PDT' 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ciDatetimes constructed in this way are compatible with datetime arithmetic and 537db96d56Sopenharmony_cihandle daylight saving time transitions with no further intervention:: 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci >>> dt_add = dt + timedelta(days=1) 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci >>> print(dt_add) 587db96d56Sopenharmony_ci 2020-11-01 12:00:00-08:00 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci >>> dt_add.tzname() 617db96d56Sopenharmony_ci 'PST' 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ciThese time zones also support the :attr:`~datetime.datetime.fold` attribute 647db96d56Sopenharmony_ciintroduced in :pep:`495`. During offset transitions which induce ambiguous 657db96d56Sopenharmony_citimes (such as a daylight saving time to standard time transition), the offset 667db96d56Sopenharmony_cifrom *before* the transition is used when ``fold=0``, and the offset *after* 677db96d56Sopenharmony_cithe transition is used when ``fold=1``, for example:: 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci >>> dt = datetime(2020, 11, 1, 1, tzinfo=ZoneInfo("America/Los_Angeles")) 707db96d56Sopenharmony_ci >>> print(dt) 717db96d56Sopenharmony_ci 2020-11-01 01:00:00-07:00 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci >>> print(dt.replace(fold=1)) 747db96d56Sopenharmony_ci 2020-11-01 01:00:00-08:00 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ciWhen converting from another time zone, the fold will be set to the correct 777db96d56Sopenharmony_civalue:: 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci >>> from datetime import timezone 807db96d56Sopenharmony_ci >>> LOS_ANGELES = ZoneInfo("America/Los_Angeles") 817db96d56Sopenharmony_ci >>> dt_utc = datetime(2020, 11, 1, 8, tzinfo=timezone.utc) 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci >>> # Before the PDT -> PST transition 847db96d56Sopenharmony_ci >>> print(dt_utc.astimezone(LOS_ANGELES)) 857db96d56Sopenharmony_ci 2020-11-01 01:00:00-07:00 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci >>> # After the PDT -> PST transition 887db96d56Sopenharmony_ci >>> print((dt_utc + timedelta(hours=1)).astimezone(LOS_ANGELES)) 897db96d56Sopenharmony_ci 2020-11-01 01:00:00-08:00 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ciData sources 927db96d56Sopenharmony_ci------------ 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ciThe ``zoneinfo`` module does not directly provide time zone data, and instead 957db96d56Sopenharmony_cipulls time zone information from the system time zone database or the 967db96d56Sopenharmony_cifirst-party PyPI package `tzdata`_, if available. Some systems, including 977db96d56Sopenharmony_cinotably Windows systems, do not have an IANA database available, and so for 987db96d56Sopenharmony_ciprojects targeting cross-platform compatibility that require time zone data, it 997db96d56Sopenharmony_ciis recommended to declare a dependency on tzdata. If neither system data nor 1007db96d56Sopenharmony_citzdata are available, all calls to :class:`ZoneInfo` will raise 1017db96d56Sopenharmony_ci:exc:`ZoneInfoNotFoundError`. 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci.. _zoneinfo_data_configuration: 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ciConfiguring the data sources 1067db96d56Sopenharmony_ci**************************** 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ciWhen ``ZoneInfo(key)`` is called, the constructor first searches the 1097db96d56Sopenharmony_cidirectories specified in :data:`TZPATH` for a file matching ``key``, and on 1107db96d56Sopenharmony_cifailure looks for a match in the tzdata package. This behavior can be 1117db96d56Sopenharmony_ciconfigured in three ways: 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci1. The default :data:`TZPATH` when not otherwise specified can be configured at 1147db96d56Sopenharmony_ci :ref:`compile time <zoneinfo_data_compile_time_config>`. 1157db96d56Sopenharmony_ci2. :data:`TZPATH` can be configured using :ref:`an environment variable 1167db96d56Sopenharmony_ci <zoneinfo_data_environment_var>`. 1177db96d56Sopenharmony_ci3. At :ref:`runtime <zoneinfo_data_runtime_config>`, the search path can be 1187db96d56Sopenharmony_ci manipulated using the :func:`reset_tzpath` function. 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ci.. _zoneinfo_data_compile_time_config: 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ciCompile-time configuration 1237db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^ 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ciThe default :data:`TZPATH` includes several common deployment locations for the 1267db96d56Sopenharmony_citime zone database (except on Windows, where there are no "well-known" 1277db96d56Sopenharmony_cilocations for time zone data). On POSIX systems, downstream distributors and 1287db96d56Sopenharmony_cithose building Python from source who know where their system 1297db96d56Sopenharmony_citime zone data is deployed may change the default time zone path by specifying 1307db96d56Sopenharmony_cithe compile-time option ``TZPATH`` (or, more likely, the :option:`configure 1317db96d56Sopenharmony_ciflag --with-tzpath <--with-tzpath>`), which should be a string delimited by 1327db96d56Sopenharmony_ci:data:`os.pathsep`. 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ciOn all platforms, the configured value is available as the ``TZPATH`` key in 1357db96d56Sopenharmony_ci:func:`sysconfig.get_config_var`. 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci.. _zoneinfo_data_environment_var: 1387db96d56Sopenharmony_ci 1397db96d56Sopenharmony_ciEnvironment configuration 1407db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^ 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ciWhen initializing :data:`TZPATH` (either at import time or whenever 1437db96d56Sopenharmony_ci:func:`reset_tzpath` is called with no arguments), the ``zoneinfo`` module will 1447db96d56Sopenharmony_ciuse the environment variable ``PYTHONTZPATH``, if it exists, to set the search 1457db96d56Sopenharmony_cipath. 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci.. envvar:: PYTHONTZPATH 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci This is an :data:`os.pathsep`-separated string containing the time zone 1507db96d56Sopenharmony_ci search path to use. It must consist of only absolute rather than relative 1517db96d56Sopenharmony_ci paths. Relative components specified in ``PYTHONTZPATH`` will not be used, 1527db96d56Sopenharmony_ci but otherwise the behavior when a relative path is specified is 1537db96d56Sopenharmony_ci implementation-defined; CPython will raise :exc:`InvalidTZPathWarning`, but 1547db96d56Sopenharmony_ci other implementations are free to silently ignore the erroneous component 1557db96d56Sopenharmony_ci or raise an exception. 1567db96d56Sopenharmony_ci 1577db96d56Sopenharmony_ciTo set the system to ignore the system data and use the tzdata package 1587db96d56Sopenharmony_ciinstead, set ``PYTHONTZPATH=""``. 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci.. _zoneinfo_data_runtime_config: 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ciRuntime configuration 1637db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^ 1647db96d56Sopenharmony_ci 1657db96d56Sopenharmony_ciThe TZ search path can also be configured at runtime using the 1667db96d56Sopenharmony_ci:func:`reset_tzpath` function. This is generally not an advisable operation, 1677db96d56Sopenharmony_cithough it is reasonable to use it in test functions that require the use of a 1687db96d56Sopenharmony_cispecific time zone path (or require disabling access to the system time zones). 1697db96d56Sopenharmony_ci 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ciThe ``ZoneInfo`` class 1727db96d56Sopenharmony_ci---------------------- 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci.. class:: ZoneInfo(key) 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci A concrete :class:`datetime.tzinfo` subclass that represents an IANA time 1777db96d56Sopenharmony_ci zone specified by the string ``key``. Calls to the primary constructor will 1787db96d56Sopenharmony_ci always return objects that compare identically; put another way, barring 1797db96d56Sopenharmony_ci cache invalidation via :meth:`ZoneInfo.clear_cache`, for all values of 1807db96d56Sopenharmony_ci ``key``, the following assertion will always be true: 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci .. code-block:: python 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci a = ZoneInfo(key) 1857db96d56Sopenharmony_ci b = ZoneInfo(key) 1867db96d56Sopenharmony_ci assert a is b 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ci ``key`` must be in the form of a relative, normalized POSIX path, with no 1897db96d56Sopenharmony_ci up-level references. The constructor will raise :exc:`ValueError` if a 1907db96d56Sopenharmony_ci non-conforming key is passed. 1917db96d56Sopenharmony_ci 1927db96d56Sopenharmony_ci If no file matching ``key`` is found, the constructor will raise 1937db96d56Sopenharmony_ci :exc:`ZoneInfoNotFoundError`. 1947db96d56Sopenharmony_ci 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ciThe ``ZoneInfo`` class has two alternate constructors: 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci.. classmethod:: ZoneInfo.from_file(fobj, /, key=None) 1997db96d56Sopenharmony_ci 2007db96d56Sopenharmony_ci Constructs a ``ZoneInfo`` object from a file-like object returning bytes 2017db96d56Sopenharmony_ci (e.g. a file opened in binary mode or an :class:`io.BytesIO` object). 2027db96d56Sopenharmony_ci Unlike the primary constructor, this always constructs a new object. 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci The ``key`` parameter sets the name of the zone for the purposes of 2057db96d56Sopenharmony_ci :py:meth:`~object.__str__` and :py:meth:`~object.__repr__`. 2067db96d56Sopenharmony_ci 2077db96d56Sopenharmony_ci Objects created via this constructor cannot be pickled (see `pickling`_). 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ci.. classmethod:: ZoneInfo.no_cache(key) 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ci An alternate constructor that bypasses the constructor's cache. It is 2127db96d56Sopenharmony_ci identical to the primary constructor, but returns a new object on each 2137db96d56Sopenharmony_ci call. This is most likely to be useful for testing or demonstration 2147db96d56Sopenharmony_ci purposes, but it can also be used to create a system with a different cache 2157db96d56Sopenharmony_ci invalidation strategy. 2167db96d56Sopenharmony_ci 2177db96d56Sopenharmony_ci Objects created via this constructor will also bypass the cache of a 2187db96d56Sopenharmony_ci deserializing process when unpickled. 2197db96d56Sopenharmony_ci 2207db96d56Sopenharmony_ci .. TODO: Add "See `cache_behavior`_" reference when that section is ready. 2217db96d56Sopenharmony_ci 2227db96d56Sopenharmony_ci .. caution:: 2237db96d56Sopenharmony_ci 2247db96d56Sopenharmony_ci Using this constructor may change the semantics of your datetimes in 2257db96d56Sopenharmony_ci surprising ways, only use it if you know that you need to. 2267db96d56Sopenharmony_ci 2277db96d56Sopenharmony_ciThe following class methods are also available: 2287db96d56Sopenharmony_ci 2297db96d56Sopenharmony_ci.. classmethod:: ZoneInfo.clear_cache(*, only_keys=None) 2307db96d56Sopenharmony_ci 2317db96d56Sopenharmony_ci A method for invalidating the cache on the ``ZoneInfo`` class. If no 2327db96d56Sopenharmony_ci arguments are passed, all caches are invalidated and the next call to 2337db96d56Sopenharmony_ci the primary constructor for each key will return a new instance. 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci If an iterable of key names is passed to the ``only_keys`` parameter, only 2367db96d56Sopenharmony_ci the specified keys will be removed from the cache. Keys passed to 2377db96d56Sopenharmony_ci ``only_keys`` but not found in the cache are ignored. 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci .. TODO: Add "See `cache_behavior`_" reference when that section is ready. 2407db96d56Sopenharmony_ci 2417db96d56Sopenharmony_ci .. warning:: 2427db96d56Sopenharmony_ci 2437db96d56Sopenharmony_ci Invoking this function may change the semantics of datetimes using 2447db96d56Sopenharmony_ci ``ZoneInfo`` in surprising ways; this modifies process-wide global state 2457db96d56Sopenharmony_ci and thus may have wide-ranging effects. Only use it if you know that you 2467db96d56Sopenharmony_ci need to. 2477db96d56Sopenharmony_ci 2487db96d56Sopenharmony_ciThe class has one attribute: 2497db96d56Sopenharmony_ci 2507db96d56Sopenharmony_ci.. attribute:: ZoneInfo.key 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci This is a read-only :term:`attribute` that returns the value of ``key`` 2537db96d56Sopenharmony_ci passed to the constructor, which should be a lookup key in the IANA time 2547db96d56Sopenharmony_ci zone database (e.g. ``America/New_York``, ``Europe/Paris`` or 2557db96d56Sopenharmony_ci ``Asia/Tokyo``). 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_ci For zones constructed from file without specifying a ``key`` parameter, 2587db96d56Sopenharmony_ci this will be set to ``None``. 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci .. note:: 2617db96d56Sopenharmony_ci 2627db96d56Sopenharmony_ci Although it is a somewhat common practice to expose these to end users, 2637db96d56Sopenharmony_ci these values are designed to be primary keys for representing the 2647db96d56Sopenharmony_ci relevant zones and not necessarily user-facing elements. Projects like 2657db96d56Sopenharmony_ci CLDR (the Unicode Common Locale Data Repository) can be used to get 2667db96d56Sopenharmony_ci more user-friendly strings from these keys. 2677db96d56Sopenharmony_ci 2687db96d56Sopenharmony_ciString representations 2697db96d56Sopenharmony_ci********************** 2707db96d56Sopenharmony_ci 2717db96d56Sopenharmony_ciThe string representation returned when calling :py:class:`str` on a 2727db96d56Sopenharmony_ci:class:`ZoneInfo` object defaults to using the :attr:`ZoneInfo.key` attribute (see 2737db96d56Sopenharmony_cithe note on usage in the attribute documentation):: 2747db96d56Sopenharmony_ci 2757db96d56Sopenharmony_ci >>> zone = ZoneInfo("Pacific/Kwajalein") 2767db96d56Sopenharmony_ci >>> str(zone) 2777db96d56Sopenharmony_ci 'Pacific/Kwajalein' 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci >>> dt = datetime(2020, 4, 1, 3, 15, tzinfo=zone) 2807db96d56Sopenharmony_ci >>> f"{dt.isoformat()} [{dt.tzinfo}]" 2817db96d56Sopenharmony_ci '2020-04-01T03:15:00+12:00 [Pacific/Kwajalein]' 2827db96d56Sopenharmony_ci 2837db96d56Sopenharmony_ciFor objects constructed from a file without specifying a ``key`` parameter, 2847db96d56Sopenharmony_ci``str`` falls back to calling :func:`repr`. ``ZoneInfo``'s ``repr`` is 2857db96d56Sopenharmony_ciimplementation-defined and not necessarily stable between versions, but it is 2867db96d56Sopenharmony_ciguaranteed not to be a valid ``ZoneInfo`` key. 2877db96d56Sopenharmony_ci 2887db96d56Sopenharmony_ci.. _pickling: 2897db96d56Sopenharmony_ci 2907db96d56Sopenharmony_ciPickle serialization 2917db96d56Sopenharmony_ci******************** 2927db96d56Sopenharmony_ci 2937db96d56Sopenharmony_ciRather than serializing all transition data, ``ZoneInfo`` objects are 2947db96d56Sopenharmony_ciserialized by key, and ``ZoneInfo`` objects constructed from files (even those 2957db96d56Sopenharmony_ciwith a value for ``key`` specified) cannot be pickled. 2967db96d56Sopenharmony_ci 2977db96d56Sopenharmony_ciThe behavior of a ``ZoneInfo`` file depends on how it was constructed: 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_ci1. ``ZoneInfo(key)``: When constructed with the primary constructor, a 3007db96d56Sopenharmony_ci ``ZoneInfo`` object is serialized by key, and when deserialized, the 3017db96d56Sopenharmony_ci deserializing process uses the primary and thus it is expected that these 3027db96d56Sopenharmony_ci are expected to be the same object as other references to the same time 3037db96d56Sopenharmony_ci zone. For example, if ``europe_berlin_pkl`` is a string containing a pickle 3047db96d56Sopenharmony_ci constructed from ``ZoneInfo("Europe/Berlin")``, one would expect the 3057db96d56Sopenharmony_ci following behavior: 3067db96d56Sopenharmony_ci 3077db96d56Sopenharmony_ci .. code-block:: pycon 3087db96d56Sopenharmony_ci 3097db96d56Sopenharmony_ci >>> a = ZoneInfo("Europe/Berlin") 3107db96d56Sopenharmony_ci >>> b = pickle.loads(europe_berlin_pkl) 3117db96d56Sopenharmony_ci >>> a is b 3127db96d56Sopenharmony_ci True 3137db96d56Sopenharmony_ci 3147db96d56Sopenharmony_ci2. ``ZoneInfo.no_cache(key)``: When constructed from the cache-bypassing 3157db96d56Sopenharmony_ci constructor, the ``ZoneInfo`` object is also serialized by key, but when 3167db96d56Sopenharmony_ci deserialized, the deserializing process uses the cache bypassing 3177db96d56Sopenharmony_ci constructor. If ``europe_berlin_pkl_nc`` is a string containing a pickle 3187db96d56Sopenharmony_ci constructed from ``ZoneInfo.no_cache("Europe/Berlin")``, one would expect 3197db96d56Sopenharmony_ci the following behavior: 3207db96d56Sopenharmony_ci 3217db96d56Sopenharmony_ci .. code-block:: pycon 3227db96d56Sopenharmony_ci 3237db96d56Sopenharmony_ci >>> a = ZoneInfo("Europe/Berlin") 3247db96d56Sopenharmony_ci >>> b = pickle.loads(europe_berlin_pkl_nc) 3257db96d56Sopenharmony_ci >>> a is b 3267db96d56Sopenharmony_ci False 3277db96d56Sopenharmony_ci 3287db96d56Sopenharmony_ci3. ``ZoneInfo.from_file(fobj, /, key=None)``: When constructed from a file, the 3297db96d56Sopenharmony_ci ``ZoneInfo`` object raises an exception on pickling. If an end user wants to 3307db96d56Sopenharmony_ci pickle a ``ZoneInfo`` constructed from a file, it is recommended that they 3317db96d56Sopenharmony_ci use a wrapper type or a custom serialization function: either serializing by 3327db96d56Sopenharmony_ci key or storing the contents of the file object and serializing that. 3337db96d56Sopenharmony_ci 3347db96d56Sopenharmony_ciThis method of serialization requires that the time zone data for the required 3357db96d56Sopenharmony_cikey be available on both the serializing and deserializing side, similar to the 3367db96d56Sopenharmony_ciway that references to classes and functions are expected to exist in both the 3377db96d56Sopenharmony_ciserializing and deserializing environments. It also means that no guarantees 3387db96d56Sopenharmony_ciare made about the consistency of results when unpickling a ``ZoneInfo`` 3397db96d56Sopenharmony_cipickled in an environment with a different version of the time zone data. 3407db96d56Sopenharmony_ci 3417db96d56Sopenharmony_ciFunctions 3427db96d56Sopenharmony_ci--------- 3437db96d56Sopenharmony_ci 3447db96d56Sopenharmony_ci.. function:: available_timezones() 3457db96d56Sopenharmony_ci 3467db96d56Sopenharmony_ci Get a set containing all the valid keys for IANA time zones available 3477db96d56Sopenharmony_ci anywhere on the time zone path. This is recalculated on every call to the 3487db96d56Sopenharmony_ci function. 3497db96d56Sopenharmony_ci 3507db96d56Sopenharmony_ci This function only includes canonical zone names and does not include 3517db96d56Sopenharmony_ci "special" zones such as those under the ``posix/`` and ``right/`` 3527db96d56Sopenharmony_ci directories, or the ``posixrules`` zone. 3537db96d56Sopenharmony_ci 3547db96d56Sopenharmony_ci .. caution:: 3557db96d56Sopenharmony_ci 3567db96d56Sopenharmony_ci This function may open a large number of files, as the best way to 3577db96d56Sopenharmony_ci determine if a file on the time zone path is a valid time zone is to 3587db96d56Sopenharmony_ci read the "magic string" at the beginning. 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ci .. note:: 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci These values are not designed to be exposed to end-users; for user 3637db96d56Sopenharmony_ci facing elements, applications should use something like CLDR (the 3647db96d56Sopenharmony_ci Unicode Common Locale Data Repository) to get more user-friendly 3657db96d56Sopenharmony_ci strings. See also the cautionary note on :attr:`ZoneInfo.key`. 3667db96d56Sopenharmony_ci 3677db96d56Sopenharmony_ci.. function:: reset_tzpath(to=None) 3687db96d56Sopenharmony_ci 3697db96d56Sopenharmony_ci Sets or resets the time zone search path (:data:`TZPATH`) for the module. 3707db96d56Sopenharmony_ci When called with no arguments, :data:`TZPATH` is set to the default value. 3717db96d56Sopenharmony_ci 3727db96d56Sopenharmony_ci Calling ``reset_tzpath`` will not invalidate the :class:`ZoneInfo` cache, 3737db96d56Sopenharmony_ci and so calls to the primary ``ZoneInfo`` constructor will only use the new 3747db96d56Sopenharmony_ci ``TZPATH`` in the case of a cache miss. 3757db96d56Sopenharmony_ci 3767db96d56Sopenharmony_ci The ``to`` parameter must be a :term:`sequence` of strings or 3777db96d56Sopenharmony_ci :class:`os.PathLike` and not a string, all of which must be absolute paths. 3787db96d56Sopenharmony_ci :exc:`ValueError` will be raised if something other than an absolute path 3797db96d56Sopenharmony_ci is passed. 3807db96d56Sopenharmony_ci 3817db96d56Sopenharmony_ciGlobals 3827db96d56Sopenharmony_ci------- 3837db96d56Sopenharmony_ci 3847db96d56Sopenharmony_ci.. data:: TZPATH 3857db96d56Sopenharmony_ci 3867db96d56Sopenharmony_ci A read-only sequence representing the time zone search path -- when 3877db96d56Sopenharmony_ci constructing a ``ZoneInfo`` from a key, the key is joined to each entry in 3887db96d56Sopenharmony_ci the ``TZPATH``, and the first file found is used. 3897db96d56Sopenharmony_ci 3907db96d56Sopenharmony_ci ``TZPATH`` may contain only absolute paths, never relative paths, 3917db96d56Sopenharmony_ci regardless of how it is configured. 3927db96d56Sopenharmony_ci 3937db96d56Sopenharmony_ci The object that ``zoneinfo.TZPATH`` points to may change in response to a 3947db96d56Sopenharmony_ci call to :func:`reset_tzpath`, so it is recommended to use 3957db96d56Sopenharmony_ci ``zoneinfo.TZPATH`` rather than importing ``TZPATH`` from ``zoneinfo`` or 3967db96d56Sopenharmony_ci assigning a long-lived variable to ``zoneinfo.TZPATH``. 3977db96d56Sopenharmony_ci 3987db96d56Sopenharmony_ci For more information on configuring the time zone search path, see 3997db96d56Sopenharmony_ci :ref:`zoneinfo_data_configuration`. 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ciExceptions and warnings 4027db96d56Sopenharmony_ci----------------------- 4037db96d56Sopenharmony_ci 4047db96d56Sopenharmony_ci.. exception:: ZoneInfoNotFoundError 4057db96d56Sopenharmony_ci 4067db96d56Sopenharmony_ci Raised when construction of a :class:`ZoneInfo` object fails because the 4077db96d56Sopenharmony_ci specified key could not be found on the system. This is a subclass of 4087db96d56Sopenharmony_ci :exc:`KeyError`. 4097db96d56Sopenharmony_ci 4107db96d56Sopenharmony_ci.. exception:: InvalidTZPathWarning 4117db96d56Sopenharmony_ci 4127db96d56Sopenharmony_ci Raised when :envvar:`PYTHONTZPATH` contains an invalid component that will 4137db96d56Sopenharmony_ci be filtered out, such as a relative path. 4147db96d56Sopenharmony_ci 4157db96d56Sopenharmony_ci.. Links and references: 4167db96d56Sopenharmony_ci 4177db96d56Sopenharmony_ci.. _tzdata: https://pypi.org/project/tzdata/ 418