如果我这样做:
>>> 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/