Joh*_*mes 10 python datetime utc python-2.7
datetime.utcnow()
Run Code Online (Sandbox Code Playgroud)
此调用返回的日期时间不正确,从UTC/GMT延迟1小时(请登录:http://www.worldtimeserver.com/current_time_in_UTC.asp).
它应该像它应该的那样工作吗?
例如,它现在正在返回:
2015-02-17 23:58:44.761000.
Run Code Online (Sandbox Code Playgroud)
当前UTC时间是:00:58,而不是23:58
小智 31
我知道我迟到了五年,但今晚我遇到了同样的问题。根据我的经验,问题的解决方案是使用感知 UTC 日期时间:
utc_dt_aware = datetime.datetime.now(datetime.timezone.utc)
Run Code Online (Sandbox Code Playgroud)
如果你用谷歌搜索“utcnow() 错误”,这是你得到的第一个结果,所以我认为无论如何回答都会很好。
jfs*_*jfs 10
datetime.utcnow()
使用OS提供的值.
datetime.utcnow()
使用gettimeofday(2)
或time.time()
在Python 2上(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]))
Run Code Online (Sandbox Code Playgroud)
这是基于CPython源GetSystemTimeAsFileTime()
在Windows 上调用的(未经测试的)代码:
#!/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()))
Run Code Online (Sandbox Code Playgroud)
这是调用clock_gettime()
Python 2的代码.
归档时间: |
|
查看次数: |
26926 次 |
最近记录: |