python中是否有一个内置函数可以用来解析MS时间戳?例如,这个“\x3a\xcf\x84\x72\x66\x42\xcd\x01”对应于这个日期和时间:06/04/2012, 15:26:43.901625
问问题
995 次
1 回答
0
时间戳(正如@mandel 提到的)看起来像FILETIME
- 一个 64 位值,表示自 1601 年 1 月 1 日(UTC)以来 100 纳秒间隔的数量:
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 结构字段的对齐,字节序)。
要在 Windows 上解析值,您可以使用ctypes.wintypes.FILETIME
结构:
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 回答