我在将输出与dateutil
和进行比较时遇到问题pytz
。我正在创建一个感知日期时间对象 (UTC),然后转换为给定的时区,但我得到了不同的答案。我怀疑 dateutil 有时会给出错误的结果,因为它在考虑夏令时时存在问题(至少,我阅读了关于它的评论),但我找不到对该问题的确认或修复。这是代码:
import dateutil
u = dateutil.tz.tzutc()
date1 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u)
# 2010-05-02 11:10:00+00:00
u2 = dateutil.tz.gettz('America/Chicago')
date2 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u2)
# 2010-05-02 11:10:00-05:00
import pytz
u = pytz.timezone('UTC')
date1 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u)
# 2010-05-02 11:10:00+00:00
u2 = pytz.timezone('America/Chicago')
date2 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u2)
# 2010-05-02 11:10:00-06:00
那么,这可能是什么问题?
更新:
我刚试过这个:
print u2.normalize(date1.astimezone(u2))
# 2010-05-02 06:10:00-05:00
那么pytz需要normalize
考虑夏令时吗?
更新 2:
似乎 pytz 和 dateutil 没有给出 America/Argentina/San_Luis 的答案,但这有效:
import pytz, dateutil, datetime
now = datetime.datetime.now()
for zone in pytz.all_timezones:
utc_dateutil = dateutil.tz.tzutc()
utcdate_dateutil = datetime.datetime(now.year, now.month, now.day, now.hour, now.minute, tzinfo=utc_dateutil)
zone_dateutil = dateutil.tz.gettz(zone)
newzone_dateutil = utcdate_dateutil.astimezone(zone_dateutil)
utc_pytz = pytz.timezone('UTC')
utcdate_pytz = datetime.datetime(now.year, now.month, now.day, now.hour, now.minute, tzinfo=utc_pytz)
zone_pytz = pytz.timezone(zone)
newzone_pytz = utcdate_pytz.astimezone(zone_pytz)
assert newzone_dateutil == newzone_pytz
我错过了什么吗?
谢谢