为什么 datetime.utcnow() 返回一个天真的日期时间?

End*_*050 6 python

概念问题。为什么datetime.utcnow()返回一个天真的日期:

from datetime import datetime
datetime.utcnow()
Run Code Online (Sandbox Code Playgroud)

而不是像这样指定的 UTC 时区的时间:

from datetime import datetime, timezone
datetime.utcnow().replace(tzinfo=timezone.utc)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

试图了解其背后的思想。谢谢你。

编辑:从这里链接问题(谢谢)这似乎是 Python 3.2+ 中的首选方法:

from datetime import datetime, timezone
datetime.datetime.now(datetime.timezone.utc)
Run Code Online (Sandbox Code Playgroud)

Sam*_*man 3

据我所知,这样做可能会严重伤害自己,或者至少我发现这个特定的决定给我带来了无尽的痛苦。我认为问题在于 Python 本身只支持 UTC 时区,而不支持本地时区。人们的想法似乎是,很多人都希望对所有事情都使用简单的日期,并跟踪(可能基于它是什么程序)无论是 UTC 还是本地日期。因此,涉及时区是您作为程序员必须做出的明确决定,除非您这样做,否则您将永远不会获得带有时区的 DateTime。

不幸的是,这个决定与将 ( 转换posix 时间时,天真的日期时间被视为本地日期时间的想法相结合,可能会导致很多混乱。我已经 在这里讨论了我遇到的一些问题