tzdata: Python package providing IANA time zone data ==================================================== This is a Python package containing ``zic``-compiled binaries for the IANA time zone database. It is intended to be a fallback for systems that do not have system time zone data installed (or don't have it installed in a standard location), as a part of `PEP 615 `_ This repository generates a ``pip``-installable package, published on PyPI as `tzdata `_. Overview -------- ``tzdata`` is a *data-only* package, organized in such a way that its resources are accessible via :mod:`importlib.resources` (or, in older versions of Python, its backport `importlib_resources`_). Although ``importlib.resources`` or equivalent is recommended, it is also possible to access the data via :func:`pkgutil.get_data` as well. .. TODO: Change ``zoneinfo`` to :mod:`zoneinfo` when 3.9 is released It is primarily intended to be used by standard library's ``zoneinfo`` module (new in Python 3.9), but it is also available as a source for time zone data for other time zone libraries. It is generally recommended that any time zone libraries should attempt to use the system data before using the ``tzdata`` package, but some systems (notably Windows) do not deploy zoneinfo binaries of this type, and so ``tzdata`` is necessary. Contents -------- The ``tzdata`` package provides the output of ``zic`` compilation (the equivalent of something like ``/usr/share/zoneinfo``) under the ``tzdata.zoneinfo`` package unaltered. This includes the ``tzdata.zi`` file, which is a compact text representation of the un-compiled time zone database. The package organization looks something like this:: src/tzdata ├── __init__.py ├── zoneinfo │   ├── __init__.py │   ├── Africa │   │   ├── __init__.py │   │   ├── Abidjan │   │   ├── Accra │   │   ├── … │   │   └── Windhoek │   ├── America │   │   ├── __init__.py │   │   ├── Adak │   │   ├── Anchorage │   │   ├── … │   │   └── Yellowknife │   ├── … │   ├── tzdata.zi │   ├── … │   ├── zone.tab │   └── Zulu └── zones 21 directories, 623 files In addition to the zoneinfo files, it also provides a small amount of extra metadata about the time zones. The ``tzdata.zones`` file is a newline-delimited file listing all the IANA keys for time zone files present in the ``tzdata.zoneinfo`` package. The version of the IANA data is provided as a Python variable as ``tzdata.IANA_VERSION``. Examples -------- End users should generally **not** need to use this package directly and should use a Python library like :mod:`dateutil.tz` or `zoneinfo`_, like so: .. code-block:: python # Python 3.9+ from datetime import datetime from zoneinfo import ZoneInfo dt = datetime.now(ZoneInfo("America/New_York")) For those writing time zone libraries, the recommended mechanism for access is to open the relevant zoneinfo binaries with :func:`importlib.resources.open_binary`, like so: .. code-block:: python from importlib import resources # America/New_York with resources.open_binary("tzdata.zoneinfo.America", "New_York") as f: assert f.read(4) == b"TZif" Note that the way this is organized, each folder in ``tzdata.zoneinfo`` is a package with resources below it. An example function for converting IANA keys to package names: .. code-block:: python def iana_key_to_resource(key): package_loc, resource = key.rsplit("/", 1) package = "tzdata.zoneinfo." + package_loc.replace("/", ".") return package, resource assert iana_key_to_resource("America/New_York") == \ ("tzdata.zoneinfo.America", "New_York") assert iana_key_to_resource("America/Indiana/Indianapolis") == \ ("tzdata.zoneinfo.America.Indiana", "Indianapolis") .. Links .. _importlib_resources: https://importlib-resources.readthedocs.io/en/latest/ .. _zoneinfo: https://docs.python.org/3/library/zoneinfo.html .. toctree:: :maxdepth: 1 :caption: Contents: maintaining Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search`