Добавлен в Python 3.9.
Модуль zoneinfo
предоставляет конкретную реализацию часового пояса для поддержки базы данных часовых поясов IANA. По умолчанию zoneinfo
использует данные системного часового пояса, если они доступны. Если данные системного часового пояса недоступны, то библиотека вернется к использованию пакета tzdata
, доступного на PyPI.
Класс zoneinfo.ZoneInfo()
предназначен для использования в модуле datetime
, который предоставляет типы datetime.time
и datetime.datetime
.
Смотрите также:
tzdata
, поддерживаемый разработчиками ядра CPython для предоставления данных о часовых поясах.Модуль zoneinfo
не предоставляет данные о часовом поясе напрямую, а извлекает информацию о часовом поясе из системной базы данных часовых поясов или из основного пакета tzdata
, если он доступен. В некоторых системах, включая, в частности, системы Windows, база данных IANA недоступна, поэтому для проектов, нацеленных на кроссплатформенную совместимость, требующих данных о часовых поясах, рекомендуется объявить зависимость от tzdata
. Если ни системные данные, ни пакет tzdata
недоступны, то все вызовы класса zoneinfo.ZoneInfo()
вызовут исключение ZoneInfoNotFoundError
.
Когда вызывается класс zoneinfo.ZoneInfo(key)
, то ключ соответствия файла конструктор сначала ищет в каталогах, указанных в TZPATH
, а в случае ошибки ищет совпадение в пакете tzdata
. Это поведение можно настроить тремя способами:
zoneinfo.TZPATH
по умолчанию, можно настроить во время компиляции, если не указано иное,zoneinfo.TZPATH
можно настроить с помощью переменной среды окружения PYTHONTZPATH
,zoneinfo.reset_tzpath()
.По умолчанию zoneinfo.TZPATH
включает несколько общих мест развертывания для базы данных часовых поясов (кроме Windows, где нет известных мест для данных часовых поясов).
В системах POSIX, дистрибьюторы и те, кто собирает Python из источника (необходимо знать, где развернуты системные данные о часовых поясах в системе) могут изменить путь часового пояса по умолчанию, указав во время компиляции параметр TZPATH
или установить флаг конфигурации --with-tzpath
, который должен быть строкой, разделенной os.pathsep
.
На всех платформах, настроенное значение доступно как ключ TZPATH
в sysconfig.get_config_var()
.
PYTHONTZPATH
.При инициализации zoneinfo.TZPATH
либо во время импорта, либо всякий раз, когда вызывается zoneinfo.reset_tzpath()
без аргументов, для установки пути поиска, модуль zoneinfo
будет использовать переменную окружения PYTHONTZPATH
, если она существует.
PYTHONTZPATH
:Это строка, разделенная os.pathsep
, содержащая путь поиска часового пояса. Он должен состоять только из абсолютных, а не относительных путей. Относительные компоненты, указанные в PYTHONTZPATH
, использоваться не будут, но в противном случае поведение при указании относительного пути определяется реализацией. CPython вызовет InvalidTZPathWarning
, но другие реализации могут игнорировать ошибочный компонент или вызывать исключение.
Чтобы система игнорировала системные данные и использовала пакет tzdata
, установите PYTHONTZPATH=''
.
Путь поиска TZ
также можно настроить во время выполнения программы при помощи функции zoneinfo.reset_tzpath()
. Обычно это не рекомендуется, хотя разумно использовать ее в тестовых функциях, которые требуют использования пути определенного часового пояса или требуют отключения доступа к системным часовым поясам.
zoneinfo
:Класс zoneinfo.ZoneInfo()
является конкретной реализацией абстрактного базового класса datetime.tzinfo
и предназначен для присоединения к tzinfo
либо через конструктор, либо через метод datetime.replace
, либо через datetime.astimezone
:
>>> from zoneinfo import ZoneInfo >>> from datetime import datetime, timedelta >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles")) >>> print(dt) # 2020-10-31 12:00:00-07:00 >>> dt.tzname() # 'PDT'
Часовые пояса поддерживают атрибут fold
- автоматический переход на летнее/зимнее время.
>>> dt = datetime(2020, 11, 1, 1, tzinfo=ZoneInfo("America/Los_Angeles")) >>> print(dt) # 2020-11-01 01:00:00-07:00 >>> print(dt.replace(fold=1)) # 2020-11-01 01:00:00-08:00