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

Класс timezone() модуля datetime в Python

Преобразовать локальное время в UTC

Если ваша программа предназначена для работы в разных часовых поясах, а параметр времени оказывает влияние на генерируемые события, то придерживайтесь простого, но очень важного правила:

  • Всегда храните и работайте со временем в UTC. Если вам нужно сохранить оригинальные данные - пишите их отдельно. Никогда не храните локальное время и tz - Time Zone.

UTC - это зона без перехода на летнее время и без каких бы то ни было изменений в прошлом. Из UTC можно конвертировать время в локальное для любого часового пояса.

Дополнительно смотрите модуль zoneinfo (добавлен в Python 3.9) - конкретная реализация часового пояса для поддержки базы данных часовых поясов IANA.

Синтаксис:

import datetime

tz = datetime.timezone(offset, name=None)

Параметры:

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

  • объект смещения времени, который передается в качестве аргумента tz объектам datetime.datetime() и datetime.time().

Описание:

Класс timezone() модуля datetime является подклассом datetime.tzinfo, каждый экземпляр которого представляет часовой пояс, определенный фиксированным смещением от UTC.

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

Аргумент смещения offset должен быть указан как объект datetime.timedelta(), представляющий разницу между местным временем и UTC. Смещение должно быть строго между -timedelta(hours=24) и timedelta(hours=24), в противном случае появиться исключение ValueError.

Аргумент name не является обязательным. Если указано, то это должна быть строка, которая будет использоваться в качестве значения, возвращаемого методом datetime.tzname().

>>> import datetime
>>> offset = datetime.timedelta(hours=3)
>>> datetime.timezone(offset, name='МСК')
# datetime.timezone(datetime.timedelta(0, 10800), 'МСК')

Методы экземпляра класса datetime.timezone():

tz.utcoffset(dt):

Метод tz.utcoffset() возвращает фиксированное значение, указанное при создании экземпляра часового пояса.

Аргумент dt игнорируется. Возвращаемое значение является экземпляром datetime.timedelta(), равным разнице между местным временем и UTC.

Смещение UTC не ограничено целым числом минут.

>>> import datetime
>>> offset = datetime.timedelta(hours=3)
>>> tz = datetime.timezone(offset, name='МСК')
>>> dt = datetime.datetime.now()
>>> tz.utcoffset(dt)
# datetime.timedelta(0, 10800)

# или
>>> dt = datetime.datetime.now(tz=tz)
>>> dt.utcoffset()
# datetime.timedelta(0, 10800)

tz.tzname(dt):

Метод tz.tzname() возвращает фиксированное значение, указанное при создании экземпляра часового пояса.

Если имя часового пояса name при создании экземпляра не указано, то имя, возвращаемое tzname(dt), генерируется из значения смещения следующим образом. Если смещение равно timedelta(0), то имя - UTC, в противном случае это строка в формате UTC±HH:MM, где ± - это знак смещения, HH и MM - это две цифры offset.hours и offset.minutes соответственно.

>>> import datetime
>>> offset = datetime.timedelta(hours=3)
>>> tz = datetime.timezone(offset, name='МСК')
>>> dt = datetime.datetime.now()
>>> tz.tzname(dt)
# 'МСК'

# или
>>> dt = datetime.datetime.now(tz=tz)
>>> dt.tzname()
# 'МСК'

tz.dst(dt):

Метод tz.dst() всегда возвращает None.

tz.fromutc(dt):

Метод tz.fromutc() возвращает dt + offset. Аргумент dt должен быть "осведомленным" экземпляром datetime.datetime() с tzinfo, установленным в self.

Атрибут класса datetime.timezone():

tz.utc:

С версии Python 3.11. у атрибута tz.utc() есть алиас datetime.UTC, который представляет собой константу модуля.

Атрибут tz.utc() возвращает часовой пояс UTC, эквивалентно datetime.timezone(datetime.timedelta(0)).

>>> import datetime
>>> datetime.timezone(datetime.timedelta(0))
# datetime.timezone.utc