Ну вот решение, которое я в итоге получаю
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'
^ -Помните, что есть разница в часах
Ну, я меняю две вещи:
- fromtimestamp () подходит как-то лучше, чем * UTC * fromtimestamp (), так как я имею дело со временем файла здесь.
- Разрешение времени FAT составляет 2 секунды, поэтому мне все равно, какие 100 нс могут развалиться.
(Ну, на самом деле, поскольку разрешение составляет 2 секунды, как правило, при делении HUNDREDS_OF_NANOSECONDS не должно быть покоя)
... и кроме порядка передачи параметров обратите внимание, что struct.pack ('> LL ' для без знака 32-битных Int!
Если вы подписали int, просто измените его на struct.pack ('> ll ' для подписанного 32bit Int!
(или нажмите ссылку struct.pack выше для получения дополнительной информации)