python - 为什么 gmtime 和 utcnow 日期时间之间有 1 小时的差异?

标签 python datetime

如果我这样做:

>>> print datetime.fromtimestamp(time.mktime(time.gmtime())) - datetime.utcnow()

它打印:

0:59:59.618000

为什么 utcnow() 会比我的本地时间偏移 4 小时,而 gmtime() 会偏移 5 小时?

这会打印 -5 和:

print int(-time.timezone/60/60)

这不应该是 UTC 时间吗?

最佳答案

在 Python 中,time.gmtime()datetime.utcnow() 之间没有 1 小时的差异。它们都代表 UTC 时区的相同时间。 time.gmtime() 不代表 Europe/London 时区的时间。 UTC 时区没有 DST 转换。 UTC 时区中的 utc 偏移量始终为零。

您的代码有误。将 time.mktime()time.gmtime() 一起用作输入是不正确的,除非您的本地时区是 UTC。如 time.timezone != 0 所示,您的本地时区不是 utc。

Isn't all this supposed to be UTC time?

  • time.gmtime() 以时间元组形式返回 UTC 时间
  • datetime.utcnow() 将 UTC 时间作为原始 datetime 对象返回
  • time.mktime() 接受本地时间并返回“自纪元以来的秒数”
  • datetime.fromtimestamp() 接受“纪元以来的秒数”并将本地时间作为原始日期时间对象返回

比较 time.gmtime()datetime.utcnow():

#!/usr/bin/env python
import time
from datetime import datetime

print(abs(datetime(*time.gmtime()[:6]) - datetime.utcnow()))
# -> 0:00:00.524724

差异不为零,因为时间元组不存储微秒,否则无论您本地的时区如何,两个函数都会返回相同的时间。

如果您的目的是查找本地时区的 utc 偏移量,请参阅 Getting computer's utc offset in Python .

关于python - 为什么 gmtime 和 utcnow 日期时间之间有 1 小时的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25022745/

相关文章:

javascript - jQuery .data() 和存储日期信息

python - yaxis 上的 HourLocator() 引发运行时错误意外超过 Locator.MAXTICK

r - 是否有 R 函数来解析包含不同格式日期的向量?

python - Django MySQL 无法获取我的数据库的最后状态

python - python中线程数有限制吗

python 3.6 将 dict 字节解码为 json 不工作

python - 在 python 中指定日期时间所在的时区

python - 计算(格式化)相同日期时,Pandas DatetimeIndex 和 to_datetime 存在差异

python - 如何使用task_name检索排队任务

python - Pymongo 使用字符串 ID 而不是 ObjectID 插入文档