Datetime и timezone с pytz-mind blowing behavior
Я пытаюсь преобразовать объект datetime
с учетом часовых поясов в UTC, а затем вернуться к исходному часовому поясу. У меня есть следующий фрагмент
t = datetime(
2013, 11, 22, hour=11, minute=0,
tzinfo=pytz.timezone('Europe/Warsaw')
)
теперь в ipython:
In [18]: t
Out[18]: datetime.datetime(
2013, 11, 22, 11, 0, tzinfo=<DstTzInfo 'Europe/Warsaw' WMT+1:24:00 STD>
)
и теперь попробуйте сделать преобразование в UTC и обратно. Я ожидаю, что будет иметь такое же представление, как:
In [19]: t.astimezone(pytz.utc).astimezone(pytz.timezone('Europe/Warsaw'))
Out[19]: datetime.datetime(
2013, 11, 22, 10, 36, tzinfo=<DstTzInfo 'Europe/Warsaw' CET+1:00:00 STD>
)
Но мы видим, что Out[18]
и Out[19]
отличаются. Что происходит?
Ответы
Ответ 1
В документации http://pytz.sourceforge.net/ указано: "К сожалению, использование аргумента tzinfo стандартных конструкторов datetime не работает" с pytz для многих часовых поясов. " Код
t = datetime(
2013, 5, 11, hour=11, minute=0,
tzinfo=pytz.timezone('Europe/Warsaw')
)
не работает в соответствии с этим, вместо этого вы должны использовать метод localize:
t = pytz.timezone('Europe/Warsaw').localize(
datetime(2013, 5, 11, hour=11, minute=0))