使用freezegun,为什么pytz.utc和utcnow()输出不同的日期时间?

问题描述 投票:6回答:1

我很困惑为什么用冻结枪冻结时间的函数会输出不同的UTC时间,具体取决于是调用datetime.datetime.utcnow()还是datetime.datetime.now(pytz.utc)。我不是说它坏了,只是因为我不明白为什么,而且想知道!

例如,使用此功能:

@freeze_time("2012-01-14 03:21:34", tz_offset=-4)
def test():
    print("utcnow(): %s" % datetime.datetime.utcnow())
    print("pytz.utc: %s" % datetime.datetime.now(pytz.utc))

输出是:

utcnow(): 2012-01-14 03:21:34
pytz.utc: 2012-01-13 23:21:34+00:00

我想第一个是天真的约会时间,但为什么它们的时间不同?

(最终为什么我想知道:如果我在我的测试中使用freezegun,并且我在我的代码中使用pytz生成时间进行测试,我想知道它的“正确”行为应该是什么。)

python datetime pytz freezegun
1个回答
1
投票

这是冻结枪中的问题,请参阅herehere

看起来不会很快修复。最后我用它作为解决方法:

def freezegun_utc_workaround():
    return datetime.utcnow().replace(tzinfo=pytz.utc)

为了这

 datetime.datetime.now(pytz.utc)

可能包装它并手动修补它会更好。

© www.soinside.com 2019 - 2024. All rights reserved.