2011-06-20 102 views
4

我使用python将datetime转换为filetime的任何链接?日期时间到文件时间(Python)

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

得到了电子邮件报头中的上方。

+0

@Tshepang:请不要从正确使用它的问题中删除[tag:filetime]。 –

+0

@BenVoigt我认为这不是很重要,因为它的使用率低,没有订户。原谅我。 – Tshepang

回答

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 

调音起来为你准备好了。

0

那么这里就是解决方案,我结束了对大卫巴克斯顿“filetimes.py” ^ - 注意的是那里有在小时

好吧,我改变了两两件事相差

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) 

基地:

  1. fromtimestamp()适合在某种程度上优于* UTC * fromtimestamp(),因为我在这里处理文件的时间。
  2. FAT时间分辨率是2秒,所以我不在乎100ns可能会分崩离析。 (嗯,事实上,因为分辨率为2秒,通常存在分割HUNDREDS_OF_NANOSECONDS的时候没有休息)

...和参数的传递要注意的是struct.pack(“>LL”是无符号的订单旁边32位廉政局的!

如果你已经有符号整数的只是将其更改为struct.pack(“>LL”为签署 32位廉政局的!

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