The docs http://pytz.sourceforge.net/说你不能使用datetime.datetime(..., tzinfo)
就像你正在做的那样:
不幸的是使用标准日期时间构造函数的 tzinfo 参数不起作用与许多时区的 pytz 一起。
奇怪的是,尽管有种种迹象表明Europe/Paris
当你实际使用 with 时,时区是错误的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 的 datetime 和 tzinfo 东西。更喜欢使用 int UTC 时间戳。)