11

我很困惑为什么使用 freezegun 冻结时间的函数会根据是否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 在我的测试代码中生成时间,我想知道它的“正确”行为应该是什么。)

4

1 回答 1

5

这是 freezegun 中的一个问题,请参见此处此处

看起来这不会很快得到解决。最后,我将此用作解决方法:

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

为了这

 datetime.datetime.now(pytz.utc)

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

于 2019-04-22T13:15:31.373 回答