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))