datetime.utcnow()
この呼び出しは、UTC/GMTから1時間遅れた誤った日時を返します(チェックイン: http://www.worldtimeserver.com/current_time_in_UTC.asp )。
それはあるべきように機能していますか?
たとえば、今は戻ってきます:
2015-02-17 23:58:44.761000.
現在のUTC時間は23:58ではなく00:58です。
datetime.utcnow()
OSが提供する値を使用します。
datetime.utcnow()
使用 gettimeofday(2)
またはtime.time()
on 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]))
_
以下は、WindowsでGetSystemTimeAsFileTime()
を呼び出す(テストされていない)コードです CPythonソースに基づいて :
_#!/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()))
_
以下は clock_gettime()
on Python 2 を呼び出すコードです。
私は5年遅れていることはわかっていますが、今夜も同じ問題がありました。私の経験では、問題の解決策は、認識されているUTC日時を使用することでした。
utc_dt_aware = datetime.datetime.now(datetime.timezone.utc)
グーグルで「utcnow()が間違っている」なら、これが最初の結果なので、とにかく答えた方がいいと思いました。