Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime到filetime(Python)_Python_Datetime_Filetime - Fatal编程技术网

Datetime到filetime(Python)

Datetime到filetime(Python),python,datetime,filetime,Python,Datetime,Filetime,有没有使用python将datetime转换为filetime的链接 示例:2011年4月13日07:21:01.0874(UTC)文件时间=[57D8C920:01CBF9AB] 从电子邮件标题中获取上述内容。我在重复问题中的答案已被删除,因此我将在此处发布: 在四处冲浪时,我发现了以下链接: 之后,一切变得简单: >>> ft = "57D8C920:01CBF9AB" ... # switch parts ... h2, h1 = [int(h, base=16) for

有没有使用python将datetime转换为filetime的链接

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


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

我在重复问题中的答案已被删除,因此我将在此处发布:
在四处冲浪时,我发现了以下链接:

之后,一切变得简单:

>>> 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

您可以调整它。

好了,这是我最后的解决方案

    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” ^-请注意,时间不同

我改变了两件事:

  • fromtimestamp()比*UTC*fromtimestamp()更适合,因为我在这里处理文件时间
  • FAT时间分辨率为2秒,所以我不关心可能崩溃的100纳秒的剩余时间。 (事实上,由于分辨率通常为2秒,所以在除以数百毫微秒时没有休息)
  • 。。。除了参数传递的顺序之外,请注意(“>LL”表示无符号的32位整数

    如果您已签名int,只需将其更改为struct.pack(“>ll”,用于signed32位int


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

    @Tshepang:请不要从正确使用它的问题中删除它。@BenVoigt我认为它不是很重要,因为它使用率低而且没有订户。请原谅。什么是
    filetime\u to\u dt