不幸的是使用标准datetime 的tzinfo 参数
对于许多时区,构造函数“不起作用”pytz。
>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)
'2002-10-27 12:00:00 LMT+0020'
但对于没有夏令时转换的时区是安全的,例如 UTC:
>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt)
'2002-10-27 12:00:00 UTC+0000'
如您所见:
>>> datetime.datetime(2000, 1, 1, 0, 1, tzinfo=pytz.timezone('Europe/Paris'))
datetime.datetime(2000, 1, 1, 0, 1, tzinfo=<DstTzInfo 'Europe/Paris' LMT+0:09:00 STD>)
“LMT+0:09:00 STD”……?!这是一个历史偏移量,而不是当前标准。
pytz 返回的时区包(包含自永远以来的所有历史偏移量)未被 datetime 正确处理,它选择了一些随机(嗯,可能是 first 偏移量)与实际时间相关的偏移量。可以说,由于它首先需要正确解释时间,因此无法从时区包中选择正确的时间偏移量。
该库仅支持两种构建本地化时间的方法。这
首先是使用pytz库提供的localize()方法。
这用于本地化幼稚的datetime(datetime,没有时区
信息):
>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
>>> print(loc_dt.strftime(fmt))
2002-10-27 06:00:00 EST-0500
构建本地化时间的第二种方法是转换现有的时间
使用标准astimezone() 方法的本地化时间:
>>> ams_dt = loc_dt.astimezone(amsterdam)
>>> ams_dt.strftime(fmt)
'2002-10-27 12:00:00 CET+0100'
http://pytz.sourceforge.net