当前位置:首页 > 技术分析 > 正文内容

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

ruisui883个月前 (02-10)技术分析15

在进行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()

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1860.html

标签: timestamp转换
分享给朋友:

“完整源代码!Python如何实现FILETIME和DATETIME相互转换?” 的相关文章

快速上手React

web前端三大主流框架1、Angular大家眼里比较牛的框架,甚至有人说三大框架中只有它能称得上一个完整的框架,因为它包含的东西比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能。对于刚开始学习使用框架的小伙伴们,可以推荐这个框架,学会之后简直能颠覆之前你对前端开发的认...

2021最全VUE面试题,奥利给

1. vue-router用过没,哪些常用的钩子函数路由钩子的执行流程,钩子函数种类有:全局守卫、路由守卫、组件守卫。首页可以控制导航跳转, beforeEach , afterEach 等,?般?于页? title 的修改。?些需要登录才能调整??的重定向功能。beforeEach 主要有3个参数...

三维家-系统快捷键使用

快键件使用:通过简单的键盘+鼠标操作,快速完成搭配。1.基础快捷键1) Ctrl+V:复制选中对象第一步:鼠标左击物体,按下Ctrl+V 即可复制选中对象。2) Ctrl+G:组合多选对象第一步:按住Ctrl键多选对象--按住Ctrl+G--确定。3) Ctrl+B:解组选中对象第一步:左击选中对象...

有效地简化导航-Part 1:信息架构

「四步走」——理想的导航系统要做一个可用的导航系统,网页设计师必须按顺序回答以下4个问题:1. 如何组织内容?2. 如何解释导航的选项?3. 哪种导航菜单最适合容纳这些选项?4. 如何设计导航菜单?前两个问题关注构建和便签内容,通常称为信息架构。信息架构师通常用网站地图(site map diagr...

SpringBoot2.X+Vue+UniAPP,全栈开发医疗小程序

//xia仔のke:chaoxingit.com/208/全栈开发医疗小程序:利用Spring Boot 2.X、Vue和UniApp在当今数字化时代,医疗行业也在不断地迈向信息化和智能化的方向。开发一款医疗小程序,能够为用户提供便捷的医疗服务和信息查询,为医疗机构提供高效的管理和服务渠道。本文将介...

thinkphp8+vue3微信小程序商城,发布公众号App+SAAS+多商户

项目介绍三勾小程序商城基于thinkphp8+vue3+element-ui+uniapp打造的面向开发的小程序商城,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。支持主题色+自定义头部导航+自定义...