Дата / время файла (Python) - PullRequest
4 голосов
/ 20 июня 2011

Какие-нибудь ссылки для меня, чтобы преобразовать дату и время в файл, используя python?

Пример: 13 апреля 2011 г. 07: 21: 01.0874 (UTC) FILETIME = [57D8C920: 01CBF9AB]

Получил вышеиз заголовка письма.

Ответы [ 4 ]

2 голосов
/ 20 июня 2011

Я нашел эту ссылку, которая, кажется, описывает то, что вы ищете: http://reliablybroken.com/b/2009/09/working-with-active-directory-filetime-values-in-python/

1 голос
/ 17 февраля 2014

Ну вот решение, которое я в итоге получаю

    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)

основано на Дэвиде Бакстоне 'filetimes.py' ^ -Помните, что есть разница в часах

Ну, я меняю две вещи:

  1. fromtimestamp () подходит как-то лучше, чем * UTC * fromtimestamp (), так как я имею дело со временем файла здесь.
  2. Разрешение времени FAT составляет 2 секунды, поэтому мне все равно, какие 100 нс могут развалиться. (Ну, на самом деле, поскольку разрешение составляет 2 секунды, как правило, при делении HUNDREDS_OF_NANOSECONDS не должно быть покоя)

... и кроме порядка передачи параметров обратите внимание, что struct.pack ('> LL ' для без знака 32-битных Int!

Если вы подписали int, просто измените его на struct.pack ('> ll ' для подписанного 32bit Int!

(или нажмите ссылку struct.pack выше для получения дополнительной информации)

1 голос
/ 01 июля 2011

Мой ответ в дублированном вопросе был удален, поэтому я опубликую здесь:
Занимаясь серфингом, я нашел эту ссылку: 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 голосов
/ 20 июня 2011

Вы должны использовать алгоритм из Как конвертировать UNIX time_t в Win32 FILETIME или SYSTEMTIME .

...