gpt4 book ai didi

python - 为什么 datetime.now() 和 datetime.utcnow() 返回不同的时间戳

转载 作者:行者123 更新时间:2023-12-03 19:11:21 25 4
gpt4 key购买 nike

我正在使用 datetime 并发现很难理解 timestamp() 的工作原理,我(在东海岸)想将 datetime 转换为时间戳,但我发现了以下差异。任何人都可以阐明这两个代码是如何工作的,他们是否应该采取不同的行动(大约相差四个小时)?

import datetime
datetime.datetime.utcnow().timestamp()
#1590436949.187297
datetime.datetime.now(tz=datetime.timezone.utc).timestamp()
#1590422553.042119

最佳答案

timestamp() 方法返回一个 POSIX 时间戳/自纪元 (1970-01-01) 以来的秒数,它始终引用 UTC。
问题:如果您调用timestamp()方法,Python 将假定 datetime 对象持有 本地时间 .
虽然 utcnow()datetime.datetime.utcnow()可能会提出其他建议,它为您提供了一个天真的日期时间对象。也就是说,它不“知道”它在 UTC 中。因此,如果您调用 timestamp()方法中,Python 假定传递给函数的 datetime 对象是本地时间,并以此计算时间戳。那么它就不是你从 time.time() 得到的了。 .
另一方面,在 datetime.datetime.now(tz=datetime.timezone.utc).timestamp() ,您将一个时区感知的日期时间对象传递给 timestamp() .这是正确的,因为它给了你time.time() .
插图:

import datetime
import time
import dateutil
localtzname = time.tzname[time.daylight]

# naive:
dt_now = datetime.datetime.now()
# timezone-aware:
dt_now_loc = datetime.datetime.now(dateutil.tz.gettz(localtzname))
dt_now_utc = datetime.datetime.now(tz=datetime.timezone.utc)
# reference:
ts = time.time()

print(dt_now.timestamp())
# 1590424623.226529

print(dt_now_loc.timestamp())
# 1590424623.226529

print(dt_now_utc.timestamp())
# 1590424623.226529

print(ts)
# 1590424623.2265291
如您所见,即使 dt_now很幼稚,Python 返回的时间戳与您从本地化的 dt_now_loc 获得的时间戳相同或来自 time.time() .
综上所述, datetime.datetime.utcnow().timestamp()可能会产生误导,我建议避免使用它。

关于python - 为什么 datetime.now() 和 datetime.utcnow() 返回不同的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62006348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com