首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >dateutil和pytz给出了不同的结果

dateutil和pytz给出了不同的结果
EN

Stack Overflow用户
提问于 2012-12-19 10:27:43
回答 1查看 6.1K关注 0票数 18

我在将输出与dateutilpytz进行比较时遇到问题。我正在创建一个aware datetime对象(UTC),然后将其转换为给定的时区,但是我得到了不同的答案。我怀疑dateutil有时会给出错误的结果,因为它在考虑夏令时时存在问题(至少,我读到了关于它的评论),但我找不到确认或解决这个问题的方法。代码如下:

代码语言:javascript
复制
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

那么,这里会有什么问题呢?

更新:

我刚试过这个:

代码语言:javascript
复制
print u2.normalize(date1.astimezone(u2))
# 2010-05-02 06:10:00-05:00

所以pytz需要normalize来考虑DST?

更新2:

似乎pytz和dateutil没有给出美国/阿根廷/圣路易斯的答案,但这是可行的:

代码语言:javascript
复制
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

我是不是遗漏了什么?

谢谢

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13944688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档