Сообщить об ошибке.

Класс ZoneInfo() модуля zoneinfo в Python

Конкретная реализация базового класса datetime.tzinfo()

Синтаксис:

import zoneinfo

tzinfo = zoneinfo.ZoneInfo(key)

Параметры:

  • key - строковой ключ поиска в базе данных часовых поясов IANA (например 'America/New_York', 'Europe/Paris' или 'Asia/Tokyo').

Возвращаемое значение:

Описание:

Класс ZoneInfo() модуля zoneinfo представляет собой конкретный подкласс datetime.tzinfo(), представляющий часовой пояс IANA, указанный строковым ключом key.

Вызов основного конструктора всегда будет возвращать идентичные объекты для сравнения. Другими словами, запрещая аннулирование кеша через ZoneInfo.clear_cache(), для всех значений ключа всегда будет истинным следующее утверждение:

a = ZoneInfo(key)
b = ZoneInfo(key)
assert a is b

Ключ key - ключ поиска в базе данных часовых поясов IANA. Должен быть в форме относительного нормализованного пути POSIX без ссылок верхнего уровня, например 'America/Los_Angeles'.

У класса zoneinfo.ZoneInfo есть два альтернативных конструктора:

ZoneInfo.from_file(fobj, /, key=None):

Метод класса ZoneInfo.from_file() создает объект ZoneInfo из файлового объекта, возвращающего байтовые строки. Например файл, открытый в двоичном режиме или объект io.BytesIO. В отличие от основного конструктора zoneinfo.ZoneInfo(), метод класса ZoneInfo.from_file() всегда создает новый объект.

Параметр key задает имя зоны для вывода методами __str__() и __repr__() (например America/New_York, Europe/Paris или Asia/Tokyo).

Объекты, созданные с помощью этого конструктора, нельзя упаковывать при помощи модуля pickle.

ZoneInfo.no_cache(key):

Метод класса ZoneInfo.no_cache() представляет собой альтернативный конструктор, обходящий кеш конструктора. Он идентичен основному конструктору, но при каждом вызове возвращает новый объект.

Такое поведение, скорее всего, будет полезно для целей тестирования или демонстрации, но его также можно использовать для создания системы с другой стратегией аннулирования кеша.

Объекты, созданные с помощью этого конструктора, также будут обходить кеш процесса десериализации, когда их не выбирают.

Внимание! Использование конструктора zoneinfo.ZoneInfo.no_cache() может неожиданным образом изменить семантику вашего времени, используйте его только в том случае, если вы знаете, что вам это нужно.

Также доступен метод класса и атрибут:

ZoneInfo.clear_cache(*, only_keys=None):

Метод класса ZoneInfo.clear_cache() аннулирования кеша в классе zoneinfo.ZoneInfo(). Если аргументы не переданы, то все кеши становятся недействительными и следующий вызов первичного конструктора для каждого ключа вернет новый экземпляр.

Если в аргумент only_keys передается итерация имен ключей, то из кеша будут удалены только указанные ключи. Ключи, переданные в only_keys, но не найденные в кеше, игнорируются.

Предупреждение. Вызов этого метода класса может неожиданным образом изменить семантику даты и времени, использующей классом zoneinfo.ZoneInfo(). Это изменяет глобальное состояние всего процесса и может иметь широкий спектр последствий.

Используйте zoneinfo.ZoneInfo.clear_cache() только в том случае, если знаете, что вам это нужно.


ZoneInfo.key:

Атрибут ZoneInfo.key возвращает значение ключа, переданного конструктору и предназначен только для чтения. Этот атрибут должен быть ключом поиска в базе данных часовых поясов IANA (например 'America/New_York', 'Europe/Paris' или 'Asia/Tokyo').

Для зон, созданных из файла без указания ключевого параметра, будет установлено значение None.

Примечание. Значения, возвращаемые этим атрибутом предназначены в основном для использования в качестве первичного ключа для соответствующей зоны. Для получения более удобных для пользователя строковых значений ключей можно использовать проекты, такие как CLDR (хранилище данных Unicode Common Locale).

Примеры использования класса zoneinfo.ZoneInfo:

>>> 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'

Построенные таким образом даты совместимы с арифметикой дат и времени и обрабатывают переходы на летнее время без дальнейшего вмешательства:

>>> dt_add = dt + timedelta(days=1)
>>> print(dt_add)
# 2020-11-01 12:00:00-08:00
>>> dt_add.tzname()
# 'PST'

Часовые пояса также поддерживают атрибут fold - переход на летнее/зимнее время. Во время переходов, смещения, которые вызывают неоднозначное время (например, переход от летнего времени к стандартному времени), смещение before перехода используется, когда fold=0, а смещение after перехода используется, например, когда fold=1:

>>> 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

При конвертации из другого часового пояса аргумент fold будет установлен на правильное значение:

>>> from datetime import timezone
>>> LOS_ANGELES = ZoneInfo("America/Los_Angeles")
>>> dt_utc = datetime(2020, 11, 1, 8, tzinfo=timezone.utc)

# Before the PDT -> PST transition
>>> print(dt_utc.astimezone(LOS_ANGELES))
# 2020-11-01 01:00:00-07:00

# After the PDT -> PST transition
>>> print((dt_utc + timedelta(hours=1)).astimezone(LOS_ANGELES))
# 2020-11-01 01:00:00-08:00

Строковое представление временной зоны.

Строковое представление временной зоны, возвращаемое при вызове функции str для объекта zoneinfo.ZoneInfo, по умолчанию использует атрибут ZoneInfo.key:

>>> zone = ZoneInfo("Pacific/Kwajalein")
>>> str(zone)
# 'Pacific/Kwajalein'
>>> dt = datetime(2020, 4, 1, 3, 15, tzinfo=zone)
>>> f"{dt.isoformat()} [{dt.tzinfo}]"
# '2020-04-01T03:15:00+12:00 [Pacific/Kwajalein]'

Для объектов, построенных из файла без указания параметра ключа key, из вызова str(zone) происходит вызов функции repr(). Метод __repr__ объекта ZoneInfo определяется реализацией и не обязательно стабилен между версиями, но он гарантированно не является допустимым ключом ZoneInfo.