Неожиданные смещения UTC на доли часа с использованием PYTZ с общими часовыми поясамиPython

Программы на Python
Anonymous
Неожиданные смещения UTC на доли часа с использованием PYTZ с общими часовыми поясами

Сообщение Anonymous »

У меня возникли проблемы с пониманием эффекта смещения часовых поясов с помощью pytz.
Я начинаю с времени в формате UTC, например:

Код: Выделить всё

>>> utc = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("UTC"))
Теперь я беру такое же время на настенных часах по восточному стандартному времени, которое составляет 5 стандартных меридианов к западу и должно отличаться (я полагаю) на 5 часов.

Код: Выделить всё

>>> est = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("US/Eastern"))
>>> est-utc
datetime.timedelta(seconds=17760)
>>> 17760/3600
4.933333333333334
Эта разница составляет не те 5 часов, которые я ожидал, а 4 часа 56 минут, что на 4 минуты меньше.
Двигаясь на запад, я стараюсь прибыть на один час раньше:

Код: Выделить всё

>>> cst = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("US/Central"))
>>> cst-utc
datetime.timedelta(seconds=21060)
>>> 21060/3600
5.85
Эта разница составляет не ожидаемые 6 часов, а 5 часов 51 минуту, что на 9 минут меньше.

Код: Выделить всё

>>> mst = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("US/Mountain"))
>>> mst-utc
datetime.timedelta(seconds=25200)
>>> 25200/3600
7.0
Это дает ожидаемую разницу в 7 часов.

Код: Выделить всё

>>> pst = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("US/Pacific"))
>>> pst-utc
datetime.timedelta(seconds=28380)
>>> 28380/3600
7.883333333333334
Теперь разница составляет не ожидаемые 8 часов, а 7:53, что меньше на 7 минут.
И если я покажу время, я получу вот что:

Код: Выделить всё

>>> est
datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=)
>>> cst
datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=)
>>> mst
datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=)
>>> pst
datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=)
Таким образом, datetime полностью осознает, что смещения UTC для этого времени отличаются от ожидаемого четного количества часов на 4, 9, 0 и 7 минут соответственно.
Очевидно, что мои ожидания относительно того, как эти смещения часовых поясов должны работать, неверны.
Я попробовал еще раз с более простыми именами часовых поясов: pytz распознает EST и CST и выдает ожидаемые целые часы смещения для них, но отклоняет MST и PST.
Теперь я получил эти результаты в Windows 10 и уже слышу ответ типа «Ах, ну, Windows, все знают, что часовые пояса в Windows странные» (это правда), но они не такие странные, и кроме того, я получаю результаты, идентичные показанным выше в Python 3.8 на Linux.
Что мне здесь не хватает?

Вернуться в «Python»