完整源代码!Python如何实现FILETIME和DATETIME相互转换?

liftword2个月前 (03-09)技术文章9

在进行C++开发过程中,因为之前输出的socket包的结果是二进制的,同时时间戳使用的是FILETIME,输出的文件是十六进制的文件,非常不便于查看和定位问题。

那么如果才能快速的将FILETIME格式的时间戳转换为可读的DATETIME呢?下面直接上代码,不说废话,希望对你的工作有帮助。

from datetime import datetime, timedelta, tzinfo
from calendar import timegm

# 文件时间的起始值
EPOCH_AS_FILETIME = 116444736000000000  # January 1, 1970  file time起始时间
# 纳秒乘以100
HUNDREDS_OF_NANOSECONDS = 10000000
ZERO = timedelta(0)
HOUR = timedelta(hours=1)

class UTC(tzinfo):
    """UTC"""
    def utcoffset(self, dt):
        return ZERO

    def tzname(self, dt):
        return "UTC"

    def dst(self, dt):
        return ZERO

utc = UTC()

def datetime_to_filetime(dt):
    """将datetime 转换为windows的filetime格式
    if (dt.tzinfo is None) or (dt.tzinfo.utcoffset(dt) is None):
        dt = dt.replace(tzinfo=utc)
    ft = EPOCH_AS_FILETIME + (timegm(dt.timetuple()) * HUNDREDS_OF_NANOSECONDS)
    return ft + (dt.microsecond * 10)
 
def filetime_to_datetime(ft):
    """将Windows的filetime转换为datetime. 
    # 按照Unix时间获取秒数和余数
    (s, ns100) = divmod(ft - EPOCH_AS_FILETIME, HUNDREDS_OF_NANOSECONDS)
    # 转换为datetime格式
    dt = datetime.utcfromtimestamp(s)
    # 以微秒为单位添加余数,其中Python 3.2需要整数
    dt = dt.replace(microsecond=(ns100 // 10))
    return dt

# 测试函数
def test():
    ft = datetime_to_filetime(datetime(2022, 11, 22, 18, 0, 0, 100))
    dt = filetime_to_datetime(ft)
    print("ft=" + str(ft))
    print("dt=" + str(dt))

# 主函数
if __name__ == '__main__':
    test()

相关文章

Python实现整数的进制转换

任务要求将十进制整数分别转换为二进制、八进制和十六进制,并将结果在控制台打印输出。任务分析Python提供了bin()、oct()、hex()等内置函数直接完成进制转换,但输出结果包含前缀(如0b)。...

Python中的十六进制与十进制的相互转换

十进制主要运用于日常生活当中,而八进制主要运用于电子技术行业,是为了配合二进制而使用的,二进制是机器能够识别的最直接语言,但是二进制位数太多,不方便记录,所以一般把二进制转化为八进制或十六进制。在这篇...

python散装笔记——149: 从Python 2迁移到Python 3的不兼容性(六)

26: 编码/解码为十六进制不再可用Python 2.x Version ≤ 2.7"1deadbeef3".decode('hex') # Out: '\x1d\xea\xdb\xee\xf3' '...

逐浪字体大师的UNI转码之Excel将十六进制转换成十进制的方法

最近在做字体大师,一款可以快速通过网页进行字体设计,从而生成字体的开放工具,部署于v.ziti163.com,效果如下:在这里插入图片描述因为其中C#需要调用字符码,其读取的是10进制,而字体的uni...

Python二进制、八进制、十进制、十六进制互转

Python二进制、八进制、十进制、十六进制互转在Python中各种进制的转换还是比较方便的,都有内置的方法二进制 bin()八进制 oct()十六进制 hex()十进制 int()通过以上4个方法就...

20.8k Star本科生为你开发的十六进制编辑器

ImHex 是一个十六进制编辑器,用于逆向工程师解码、显示和分析二进制数据格式、提取信息或写入字节补丁的工具。ImHex 的开发者是 WerWolv,他是一名来自瑞士的 23 岁嵌入式系统电子工程师。...