Преобразование двоичных значений в дата-время - PullRequest
0 голосов
/ 20 мая 2019

У меня есть двоичный файл, и он содержит следующие значения "805783a164fad401", которые мне нужно преобразовать в datetime

description

Я пытался использовать функцию unpack struct для получения двойных значений и преобразования числа с плавающей точкой в ​​datetime, но безуспешно

def decode(content):
    test_file_path = content[16:24]
    date_float = unpack('<d', test_file_path)[0]
    print date_float
    seconds = (date_float - 25569) * 86400.0
    print datetime.datetime.utcfromtimestamp(seconds)

Я ожидаю увидеть результат Ср, 24 апреля 2019 г. 06:12:01 UTC. Этот результат получен из приложения Dcode, которое конвертирует шестнадцатеричное в datetime enter image description here

1 Ответ

0 голосов
/ 20 мая 2019

Это не представление с плавающей точкой, а 64-битное целое число. И затем, после декодирования, это не временная метка Excel (дни с 1900 года), которую, по-видимому, предполагает ваша формула, включающая 25569 и 86400, а скорее FILETIME (порции по 100 наносекунд с 1601 года):

raw =   '\x80\x57\x83\xa1\x64\xfa\xd4\x01'   # Python 2
#raw = b'\x80\x57\x83\xa1\x64\xfa\xd4\x01'   # Python 3

import struct
unpacked, = struct.unpack('<Q', raw)

import datetime
datetime.datetime(1601,1,1) + datetime.timedelta(microseconds=unpacked/10.)
# Outputs:
# datetime.datetime(2019, 4, 24, 6, 12, 1, 400000)
...