为什么gmtime和utcnow的时间差为1小时?
如果我这样做:
>>> 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时间吗?
3 个回答
0
来自这个来源:
UTC是一种不受夏令时影响的时间标准,而且在过去也没有进行过配置更改。
测量和存储时间时,始终使用UTC。
如果你需要记录时间是在哪个地方测量的,应该单独存储这个信息。不要把当地时间和时区信息一起存储!
而GMtime则会考虑夏令时的调整。
4
在Python中,time.gmtime()
和datetime.utcnow()
之间没有1小时的差别。它们都表示的是同一个时间,都是在UTC时区下的时间。time.gmtime()
并不是表示Europe/London
时区的时间。UTC时区没有夏令时的变化,UTC时区的时差始终是零。
你的代码是错的。除非你的本地时区是UTC,否则用time.mktime()
配合time.gmtime()
作为输入是错误的。你的本地时区不是UTC,这可以通过time.timezone != 0
来证明。
难道这一切不应该都是UTC时间吗?
time.gmtime()
返回的是UTC时间,格式是时间元组datetime.utcnow()
返回的是UTC时间,格式是一个简单的datetime
对象time.mktime()
接受的是本地时间,并返回“自纪元以来的秒数”datetime.fromtimestamp()
接受“自纪元以来的秒数”,并返回本地时间,格式是一个简单的datetime对象
要比较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时差,可以查看如何在Python中获取计算机的UTC时差。
3
格林威治标准时间(GMT)在一年中的某些时候会有夏令时的调整,而协调世界时(UTC)则没有这个调整。