概念问题。为什么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)
答案 0 :(得分:1)
据我所知,这样你可以伤害自己很多,或者至少我发现这个特定的决定让我无法忍受痛苦。 我认为问题在于发布的Python实际上只支持UTC时区而不支持本地时区。 这种想法似乎是很多人都希望对所有事情使用天真的日期并跟踪(可能基于它是什么程序)无论是UTC还是本地。 所以,涉及时区根本就是你作为程序员必须采取的明确决定,除非你这样做,否则你永远不会得到带有时区的DateTime。
不幸的是,这个决定结合了以下想法:当转换(到 posix时间时,天真的日期时间被视为本地时间会导致很多混乱。 我已经讨论了一些问题here