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

标签 python datetime pytz freezegun

我很困惑,为什么使用 freezegun 卡住时间的函数会输出不同的 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 在被测试的代码中生成时间,我想知道它的“正确”行为应该是什么。)

最佳答案

这是 freezegun 中的一个问题,请参阅 herehere .

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

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

为此

 datetime.datetime.now(pytz.utc)

也许将它包装起来并手动修补它会更好。

关于python - 使用 freezegun,为什么 pytz.utc 和 utcnow() 输出不同的日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31193789/

相关文章:

python - 我的 Django ModelForm 是未绑定(bind)的吗?

python - 绘制 python 日期时间的累积图

Python:strptime() 格式时区字段未按预期工作

php - 无法将数据库值 "1876-01-01 00:00:00-00:00:00"转换为 Doctrine 类型日期时间

python - 时区偏移量的表达 - 澄清

python - 使用 Python 找出当前是否处于夏令时的时区

Python Tkinter : multiple images and text on a BIG button?

python - 有没有办法定期运行非 void python 函数?

python - 用python解压缩tar.Z文件?

python - 将 python 日期时间转换为时间戳并返回 UTC 仍使用本地时区