日期时间到文件时间(Python)

时间:2011-06-20 07:32:13

标签: python datetime filetime

使用python将datetime转换为filetime的任何链接?

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

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

4 个答案:

答案 0 :(得分:2)

我找到了这个链接,它似乎描述了您要找的内容:http://reliablybroken.com/b/2009/09/working-with-active-directory-filetime-values-in-python/

答案 1 :(得分: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

调整它取决于你。

答案 2 :(得分:1)

这是我最终的解决方案

    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秒,所以我不关心可能崩溃的100秒休息。 (实际上,因为分辨率是2秒,通常在分割HUNDREDS_OF_NANOSECONDS时没有休息)
  3. ...除参数传递顺序外,请注意struct.pack('> LL '适用于无符号 32位Int!

    如果您已签名int,只需将其更改为struct.pack('strong> ll '即已签名 32位Int!

    (或点击上面的 struct.pack 链接获取更多信息)

答案 3 :(得分:0)