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

liftword4个月前 (03-09)技术文章21

在进行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 趣味编程:我的压岁钱

题目压岁钱又名压祟钱。是除夕吃完年夜饭,由长辈将事前准备好的钱分给晚辈,是过年习俗之一。今年除夕页面,小明收到了妈妈的 600 元,爸爸的 800 元,奶奶的 800 元,爷爷的 1000 元,姥姥的...

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

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

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

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

Python 数字和转换

在本节中,我们来学习 Python 中的数字数据类型以及你可以对这些数字执行的数学运算。此外,我们还会学习如何从一种数据类型转换为另一种数据类型。Python 数字数据类型Python 中的数字数据类...

Python基础 - 字符串格式化方式

字符串格式化是指将变量等信息按照指定的格式嵌入到字符串中,使其符合特定的显示要求。Python中字符串格式化方式一般有以下几种:字符串拼接使用 % 操作符使用 str.format()使用 f-str...