Я начинаю с времени в формате UTC, например:
Код: Выделить всё
>>> utc = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("UTC"))
Код: Выделить всё
>>> est = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("US/Eastern"))
>>> est-utc
datetime.timedelta(seconds=17760)
>>> 17760/3600
4.933333333333334
Двигаясь на запад, я стараюсь прибыть на один час раньше:
Код: Выделить всё
>>> cst = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("US/Central"))
>>> cst-utc
datetime.timedelta(seconds=21060)
>>> 21060/3600
5.85
Код: Выделить всё
>>> mst = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("US/Mountain"))
>>> mst-utc
datetime.timedelta(seconds=25200)
>>> 25200/3600
7.0
Код: Выделить всё
>>> pst = datetime.datetime(2021, 3, 5, 7, 59, 58, tzinfo=pytz.timezone("US/Pacific"))
>>> pst-utc
datetime.timedelta(seconds=28380)
>>> 28380/3600
7.883333333333334
И если я покажу время, я получу вот что:
Код: Выделить всё
>>> 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=)
Очевидно, что мои ожидания относительно того, как эти смещения часовых поясов должны работать, неверны.
Я попробовал еще раз с более простыми именами часовых поясов: pytz распознает EST и CST и выдает ожидаемые целые часы смещения для них, но отклоняет MST и PST.
Теперь я получил эти результаты в Windows 10 и уже слышу ответ типа «Ах, ну, Windows, все знают, что часовые пояса в Windows странные» (это правда), но они не такие странные, и кроме того, я получаю результаты, идентичные показанным выше в Python 3.8 на Linux.
Что мне здесь не хватает?