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

什么时候datetime.now(pytz_timezone)会失败?

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

什么时候datetime.now(pytz_timezone)会失败?

什么时候

datetime.now(pytz_timezone)
失败?

据我所知,在任何情况下它都不会失败。
在参数中传递的实例上

datetime.now
调用
fromutc
函数
tzinfo
。从UTC到当地时间的所有转换都是明确的,因此没有失败的机会。

同样,原始代码甚至无法正常工作。

d = est.normalize(EST)

这似乎将字符串作为唯一参数传递给

normalize
,该参数应采用
datetime
。这给出:

AttributeError: 'str' object has no attribute 'tzinfo'

我相信他们打算写:

d = est.normalize(d.astimezone(est))

就是说,我认为他们代码的冗长性不会增加太多价值。如您所述,只需一步就可以轻松完成此操作:

d = datetime.now(est)

查看的cpython源代码

datetime.now
,我可以看到,当
tzinfo
提供一个对象时,它将调用该
fromutc
对象上的方法。

if (self != NULL && tz != Py_None) {        PyObject *temp = self;    self = _PyObject_CallMethodId(tz, &PyId_fromutc, "O", self);    Py_DECREF(temp);}

然后,在源pytz,我看到

fromutc
方法被实现不同取决于该区域是否是
pytz.UTC
或的一个实例
StaticTzInfo
,或
DstTzInfo
。在所有三种情况下,从输入UTC值到目标时区的转换都是明确的。这是
DstTzInfo
实现,这是三个中的更复杂的:

def fromutc(self, dt):    '''See datetime.tzinfo.fromutc'''    if (dt.tzinfo is not None        and getattr(dt.tzinfo, '_tzinfos', None) is not self._tzinfos):        raise ValueError('fromutc: dt.tzinfo is not self')    dt = dt.replace(tzinfo=None)    idx = max(0, bisect_right(self._utc_transition_times, dt) - 1)    inf = self._transition_info[idx]    return (dt + inf[0]).replace(tzinfo=self._tzinfos[inf])

这似乎是找到

_utc_transition_times
时区的过渡,然后将其应用于return
datetime
。在这个方向上没有歧义,因此结果将是相同的。

另外值得一提的,在该

datetime
文档它说,
datetime.now
等效于调用:

tz.fromutc(datetime.utcnow().replace(tzinfo=tz))

鉴于

fromutc
我之前显示的pytz的来源,我不确定这与只是有什么不同:

tz.fromutc(datetime.utcnow())

但在任何情况下,我不认为

localize
normalize
是必要的。



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

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

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