我需要将一个Windows十六进制64位(大端)的日期时间转换成Python中可读的格式?
例如 '01cb17701e9c885a' 转换为 "Tue, 29 June 2010 09:47:42 UTC"。
非常感谢任何帮助。
例如 '01cb17701e9c885a' 转换为 "Tue, 29 June 2010 09:47:42 UTC"。
非常感谢任何帮助。
看起来是一个Win32 FILETIME 值,它:
包含一个表示自1601年1月1日(UTC)以来的100纳秒间隔数的64位值。
要转换:
from datetime import datetime,timedelta
dt = '01cb17701e9c885a'
us = int(dt,16) / 10
print(datetime(1601,1,1) + timedelta(microseconds=us))
输出:
2010-06-29 09:47:42.754210
该值是“自1601年1月1日午夜12:00:00以来已经过去的100纳秒间隔数”,因此您需要寻找类似以下内容的东西:
import datetime
def getFiletime(dt):
microseconds = int(dt, 16) / 10
seconds, microseconds = divmod(microseconds, 1000000)
days, seconds = divmod(seconds, 86400)
return datetime.datetime(1601, 1, 1) + datetime.timedelta(days, seconds, microseconds)
那么
print format(getFiletime('01cb17701e9c885a'), '%a, %d %B %Y %H:%M:%S %Z')
结果是
Tue, 29 June 2010 09:47:42
看起来 Python 的日期时间格式化在 1900 年之前的年份上会出现问题;如果你没有处理这样的日期,那么应该不会有问题。
datetime(1601,1,1,tzinfo=timezone.utc)
作为纪元,你将得到的是UTC时间而不是本地时间。 - FObersteiner