Python的datetime.utcnow()返回了错误的日期时间
Python的datetime.utcnow()返回了错误的日期时间
datetime.utcnow()
这个调用返回的日期时间不正确,比UTC / GMT晚1个小时(请在此处检查:http://www.worldtimeserver.com/current_time_in_UTC.asp)。
它是否正常工作?
例如:它现在返回:
2015-02-17 23:58:44.761000.
当前的UTC时间是:00:58,而不是23:58
admin 更改状态以发布 2023年5月24日
datetime.utcnow()
使用系统提供的值。
datetime.utcnow()
在Python 2上使用gettimeofday(2)
或time.time()
(并使用gmtime(3)
来将结果转换为分解时间)。
time.time()
使用gettimeofday(2)
、ftime(3)
、time(2)
。较新版本的CPython可能会使用clock_gettime(2)
、GetSystemTimeAsFileTime()
。
您可以按以下方式检查自我一致性:
#!/usr/bin/env python import time from datetime import datetime, timedelta print(datetime.utcnow()) print(datetime(1970, 1, 1) + timedelta(seconds=time.time())) print(datetime(*time.gmtime()[:6]))
以下是在基于CPython源代码的Windows上调用GetSystemTimeAsFileTime()
的(未测试的)代码:
#!/usr/bin/env python import ctypes.wintypes from datetime import datetime, timedelta def utcnow_microseconds(): system_time = ctypes.wintypes.FILETIME() ctypes.windll.kernel32.GetSystemTimeAsFileTime(ctypes.byref(system_time)) large = (system_time.dwHighDateTime << 32) + system_time.dwLowDateTime return large // 10 - 11644473600000000 print(datetime(1970, 1, 1) + timedelta(microseconds=utcnow_microseconds()))
以下是在Python 2上调用clock_gettime()
的代码。