【问题标题】:Datetime to filetime (Python)日期时间到文件时间(Python)
【发布时间】:2011-09-18 11:33:21
【问题描述】:

任何链接让我使用 python 将日期时间转换为文件时间?

示例:2011 年 4 月 13 日 07:21:01.0874 (UTC) FILETIME=[57D8C920:01CBF9AB]

从电子邮件标题中获取上述内容。

【问题讨论】:

  • @Tshepang:请不要从正确使用filetime的问题中删除它。
  • @BenVoigt 我认为它不是很重要,因为它的使用率低且没有订阅者。原谅我。

标签: python datetime filetime


【解决方案1】:

我在重复问题中的答案已被删除,所以我将在这里发布:
在网上冲浪我发现了这个链接:http://cboard.cprogramming.com/windows-programming/85330-hex-time-filetime.html

之后,一切都变得简单了:

>>> ft = "57D8C920:01CBF9AB"
... # switch parts
... h2, h1 = [int(h, base=16) for h in ft.split(':')]
... # rebuild
... ft_dec = struct.unpack('>Q', struct.pack('>LL', h1, h2))[0]
... ft_dec
... 129471528618740000L
... # use function from iceaway's comment
... print filetime_to_dt(ft_dec)
2011-04-13 07:21:01

调整它由你来决定。

【讨论】:

  • 什么是filetime_to_dt
【解决方案2】:

这就是我最终得到的解决方案

    parm3=0x57D8C920; parm3=0x01CBF9AB

    #Int32x32To64
    ft_dec = struct.unpack('>Q', struct.pack('>LL', parm4, parm3))[0]

    from datetime import datetime
    EPOCH_AS_FILETIME = 116444736000000000;  HUNDREDS_OF_NANOSECONDS = 10000000
    dt = datetime.fromtimestamp((ft_dec - EPOCH_AS_FILETIME) / HUNDREDS_OF_NANOSECONDS)

    print dt

Output will be:
 2011-04-13 09:21:01          (GMT +1)
13 Apr 2011 07:21:01.0874 (UTC)

基于 David Buxton 'filetimes.py' ^-注意时间有差异

我改变了两件事:

  1. fromtimestamp() 比 *UTC*fromtimestamp() 更适合,因为我在这里处理文件时间。
  2. FAT 时间分辨率为 2 秒,所以我不关心可能会崩溃的 100ns 休息时间。 (实际上,由于分辨率通常为 2 秒,除 HUNDREDS_OF_NANOSECONDS 时没有休息)

...除了参数传递的顺序,请注意struct.pack('>LL' 是用于unsigned 32bit Int's!

如果您已签署 int,只需将其更改为 struct.pack('>ll' for signed 32bit Int's!

(或单击上面的 struct.pack 链接了解更多信息)

【讨论】:

    猜你喜欢
    • 2019-03-04
    • 2011-11-06
    • 2017-05-31
    • 2015-04-25
    • 2012-02-04
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多