MS タイムスタンプを解析するために使用できる Python の組み込み関数はありますか? たとえば、この「\x3a\xcf\x84\x72\x66\x42\xcd\x01」は、この日付と時刻に対応します: 06/04/2012, 15:26:43.901625
1 に答える
0
タイムスタンプ(@mandelが言及したように)は次のようにFILETIME
なります-1601年1月1日(UTC)からの100ナノ秒間隔の数を表す64ビット値:
import struct
from datetime import datetime, timedelta
def FILETIME_bytes_to_datetime(timestamp_bytes):
quadword, = struct.unpack('<Q', timestamp_bytes)
us = quadword // 10 - 11644473600000000
return datetime(1970, 1, 1) + timedelta(microseconds=us)
例:
>>> FILETIME_bytes_to_datetime(b"\x3a\xcf\x84\x72\x66\x42\xcd\x01")
datetime.datetime(2012, 6, 4, 15, 26, 43, 901625)
'<Q'
(リトル エンディアンの符号なし 64 ビット整数) は、すべてのプラットフォームで機能しない可能性があります (FILETIME 構造体フィールドのアライメント、エンディアンのため)。
ctypes.wintypes.FILETIME
Windows で値を解析するには、構造体を使用できます。
import ctypes
import os
from datetime import datetime, timedelta
if os.name == 'nt':
import ctypes.wintypes
FILETIME = ctypes.wintypes.FILETIME
else: # fallback
DWORD = ctypes.c_uint32
class FILETIME(ctypes.Structure):
_fields_ = [('dwLowDateTime', DWORD),
('dwHighDateTime', DWORD)]
def FILETIME_bytes_to_datetime(timestamp_bytes):
t = FILETIME.from_buffer_copy(timestamp_bytes)
quadword = (t.dwHighDateTime << 32) + t.dwLowDateTime
us = quadword // 10 - 11644473600000000
return datetime(1970, 1, 1) + timedelta(microseconds=us)
ネイティブのバイト順、アラインメントを使用します (必要に応じてオーバーライドできます)。
于 2015-11-04T05:33:46.063 に答える