用python转换64位windows日期时间

2024-04-26 13:39:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将windows十六进制64位(big endian)日期时间转换成python中可读的内容?

示例“01cb17701e9c885a”

转换为“2010年6月29日星期二09:47:42 UTC”

任何帮助都将不胜感激。


Tags: 示例内容windows时间utcbigendian
2条回答

看起来像一个Win32FILETIME值,它:

Contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC).

要转换:

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.754212

该值是“自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的datetime格式似乎与1900年之前的年份有些冲突;如果您实际上没有处理这些日期,那么应该没问题。

相关问题 更多 >