2

如果你打电话datetime.datetime.now(datetime.timezone.utc),你会得到类似datetime.datetime(2021, 9, 8, 1, 33, 19, 684253, tzinfo=datetime.timezone.utc).

如果你打电话datetime.datetime.utcnow(),你会得到类似的东西datetime.datetime(2021, 9, 8, 1, 33, 20, 283212)

结果似乎相同,但事实并非如此,因为时间戳会有所不同。例如。调用datetime.datetime.now(datetime.timezone.utc).timestamp() - datetime.datetime.utcnow().timestamp()返回(对我来说)-18000.000012159348:。

这是为什么?

import datetime

print()
print(datetime.datetime.now(datetime.timezone.utc))
print(datetime.datetime.utcnow())

print()
print(datetime.datetime.now(datetime.timezone.utc).timestamp())
print(datetime.datetime.utcnow().timestamp())
print(datetime.datetime.now(datetime.timezone.utc).timestamp() - datetime.datetime.utcnow().timestamp())
4

2 回答 2

3

此行为已记录在案。发生这种情况是因为utcnow()返回一个天真的日期时间。

datetime.utcnow()

返回当前的 UTC 日期和时间,使用tzinfo None.

这类似于now(),但返回当前的 UTC 日期和时间,作为一个简单的 datetime 对象。可以通过调用来获取当前的 UTC 日期时间datetime.now(timezone.utc)

这就是为什么文档还说datetime.now()

此函数优于today()utcnow()

于 2021-09-08T01:53:54.323 回答
1

utcnow创建一个幼稚的datetime实例,因为在 Python 中引入它时没有 UTC 时区对象。从文档中timestamp()

假定原始日期时间实例表示本地时间,并且此方法依赖于平台 C 的 mktime() 函数来执行转换。

于 2021-09-08T01:53:24.380 回答