【发布时间】:2018-03-10 17:10:36
【问题描述】:
概念问题。为什么datetime.utcnow() 会返回一个幼稚的日期:
from datetime import datetime
datetime.utcnow()
而不是像这样指定 UTC 时区的时间:
from datetime import datetime, timezone
datetime.utcnow().replace(tzinfo=timezone.utc)
datetime.py 来源表明这是故意的。
@classmethod
def utcnow(cls):
"Construct a UTC datetime from time.time()."
t = _time.time()
return cls.utcfromtimestamp(t)
@classmethod
def utcfromtimestamp(cls, t):
"""Construct a naive UTC datetime from a POSIX timestamp."""
return cls._fromtimestamp(t, True, None)
试图了解其背后的思想。谢谢。
编辑:来自linked question here(谢谢),这似乎是 Python 3.2+ 中的首选方法:
from datetime import datetime, timezone
datetime.datetime.now(datetime.timezone.utc)
【问题讨论】:
-
我的猜测是 UTC 是源自伦敦的通用时间格式,这也是它的默认值。每个人都从“0”开始计数,因此默认为它是有意义的。我明白了这个问题,但如果没有人真正知道它在偏移方面的默认值,它可能会产生更多问题,特别是如果你在不同的平台上运行它。
-
可能是因为
pytz是第三方。 IMO utc 日期时间对象是唯一可以接受的天真对象,所以更好的问题是为什么datetime.now()没有附加本地 tz 信息。 -
感谢第三方说明 - 没有意识到
timezone.utc可用。
标签: python