栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

dateutil和pytz提供不同的结果

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

dateutil和pytz提供不同的结果

编辑: 使用时,以下讨论的差异不再存在

>>> dateutil.__version__'1.5'>>> pytz.__version__'2012c'

pytz模块警告,

该库不同于已记录的tzinfo实现的Python API;如果要创建本地时钟时间,则需要使用localize()方法

并进一步

该库仅支持构建本地时间的两种方式。第一种是使用pytz库提供的localize()方法。

In [61]: u4 = pytz.timezone('America/Chicago')In [62]: print(u4.localize(datetime.datetime(2010, 5, 2, 11, 10)))2010-05-02 11:10:00-05:00

另一种方法是使用该

astimezone
方法,该方法用于将一个时区感知的日期时间转换为另一个时区感知的日期时间。

并且完全明确地说,它警告不要使用以下

tzinfo
参数构造可识别时区的日期时间:

不幸的是,在许多时区中,使用标准datetime构造函数的tzinfo参数对pytz都不起作用。


让我们检验以下假设

datetime.datetime(year, month, day, hour, minute, tzinfo = dateutil_tz)

等于

pytz_tz.localize(datetime.datetime(year, month, day, hour, minute))

使用此代码:

import dateutil.tzimport datetimeimport pytznow  = datetime.datetime.now()for name in pytz.all_timezones:    dateutil_tz = dateutil.tz.gettz(name)    pytz_tz = pytz.timezone(name)    dateutil_date = datetime.datetime(        now.year, now.month, now.day, now.hour, now.minute, tzinfo = dateutil_tz)    pytz_date = pytz_tz.localize(datetime.datetime(        now.year, now.month, now.day, now.hour, now.minute))    try:        assert dateutil_date.isoformat() == pytz_date.isoformat()    except AssertionError:        print(name)        print(dateutil_date.isoformat())        print(pytz_date.isoformat())

该代码产生:

America/Argentina/San_Luis2012-12-18T22:32:00-04:00 <-- dateutil datetime2012-12-18T22:32:00-03:00 <-- pytz's datetime

所以我的假设是错误的:dateutil和pytz返回不同的结果。

那么哪一个是正确的呢?我不太确定,但是根据该网站,目前,

America/Argentina/San_Luis time zone offset is: UTC / GMT -03:00 hours

因此看来pytz是正确的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/626058.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号