import zoneinfo tzinfo = zoneinfo.ZoneInfo(key)
key
- строковой ключ поиска в базе данных часовых поясов IANA (например 'America/New_York'
, 'Europe/Paris'
или 'Asia/Tokyo'
).datetime.tzinfo()
.Класс 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'
.
ValueError
,zoneinfo.ZoneInfoNotFoundError
.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
.