Документы говорят, что вы не можете использовать datetime.datetime(..., tzinfo)
, как вы делаете:
К сожалению, использование аргумента tzinfo стандартных конструкторов даты и времени не работает с pytz для многих часовых поясов.
И что любопытно, несмотря на все признаки того, что часовой пояс Europe/Paris
неправильный, когда вы на самом деле используете с localize
, как он рекомендует, он тем не менее работает:
>>> tz= pytz.timezone('Europe/Paris') # using built-in zoneinfo
>>> tz
<DstTzInfo 'Europe/Paris' PMT+0:09:00 STD> # what? Pierre et Miquelon Time?
>>> datetime.datetime(2010,1,1,12,0,0, tzinfo=tz)
datetime.datetime(2010, 1, 1, 12, 0, tzinfo=<DstTzInfo 'Europe/Paris' PMT+0:09:00 STD>) # bad
>>> tz.localize(datetime.datetime(2010,1,1,12,0,0))
datetime.datetime(2010, 1, 1, 12, 0, tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>) # OK
Обратите внимание, что свойство tzinfo
локализованной даты и времени ссылается на совершенно иной объект по сравнению с tz
, из которого он был создан, и имеет только имя.
Для меня загадка, почему это происходит. Кажется, это проблема с файлами городов, которые понимают названия нескольких часовых поясов, но почему вы не получите часовой пояс по умолчанию для города, пока не наберете localize
, я понятия не имею.
(Если честно, я никогда не доверял данным Python о timetime и tzinfo. Очень предпочитаю работать с временными метками int UTC.)