如果我这样做:
>>> print datetime.fromtimestamp(time.mktime(time.gmtime())) - datetime.utcnow()
打印:
0:59:59.618000
为什么utcnow()会在当地时间和gmtime()5小时内产生4小时的偏差?
这会打印-5
和:
print int(-time.timezone/60/60)
这不是所有这些都应该是UTC时间吗?
答案 0 :(得分:3)
GMtime有一个夏令时调整部分UTC没有。
答案 1 :(得分:2)
Python中time.gmtime()
和datetime.utcnow()
之间没有1小时的差异。它们都代表 UTC 时区中的相同时间。 time.gmtime()
并不代表Europe/London
时区的时间。 UTC时区中没有DST转换。 UTC时区的utc偏移量始终为零。
你的代码错了。除非您的本地时区是UTC,否则使用time.mktime()
和time.gmtime()
作为输入是不正确的。 time.timezone != 0
见证了您当地的时区。
所有这些都不应该是UTC时间吗?
time.gmtime()
将UTC时间作为时间元组返回datetime.utcnow()
将UTC时间作为天真的datetime
对象time.mktime()
接受本地时间并返回自纪元以来的#34;秒#34; 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。
答案 2 :(得分:0)
来自source:
UTC是一个没有夏令时但仍然是时区的时区 过去没有配置更改。
始终以UTC格式测量和存储时间。
如果您需要记录拍摄时间,请单独存储。 不要存储当地时间+时区信息!
而GMtime有夏令时调整