конвертировать 64-битное окно даты в Python - PullRequest
2 голосов
/ 02 февраля 2011

Мне нужно преобразовать 64-битную дату в шестнадцатеричном формате (с прямым порядком байтов) в нечто читаемое в python?

пример '01cb17701e9c885a'

преобразовано в "Вт, 29 июня 2010 г. 09:47:42 UTC "

Буду признателен за любую помощь.

Ответы [ 2 ]

11 голосов
/ 02 февраля 2011

Похоже на Win32 FILETIME значение, которое:

Содержит 64-разрядное значение, представляющее число интервалов в 100 наносекунд с 1 января 1601 года (UTC).

Для преобразования:

from datetime import datetime,timedelta
dt = '01cb17701e9c885a'
us = int(dt,16) / 10.
print datetime(1601,1,1) + timedelta(microseconds=us)

Выход

2010-06-29 09:47:42.754212
1 голос
/ 02 февраля 2011

Значение - это «число интервалов в 100 наносекунд, прошедших с полуночи 12:00:00 1 января 1601 года», поэтому вы ищете что-то вроде:

import datetime

def getFiletime(dt):
    microseconds = int(dt, 16) / 10
    seconds, microseconds = divmod(microseconds, 1000000)
    days, seconds = divmod(seconds, 86400)

    return datetime.datetime(1601, 1, 1) + datetime.timedelta(days, seconds, microseconds)

тогда

print format(getFiletime('01cb17701e9c885a'), '%a, %d %B %Y %H:%M:%S %Z')

Результаты в

Tue, 29 June 2010 09:47:42

Похоже, что форматирование даты и времени в Python ограничивается годами до 1900 года; если вы на самом деле не имеете дела с такими датами, с вами все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...