Расшифровка метки времени в шестнадцатеричном коде со сканера отпечатков пальцев (zkemkeeper / ZEM560) - PullRequest
0 голосов
/ 10 июля 2020

Я работал с некоторыми необработанными данными, полученными с машины для снятия отпечатков пальцев (zkemkeeper / ZEM560). Я обнаружил, что есть наборы данных, записанные в шестнадцатеричном формате, и я считаю, что это 4 байта, порядковый номер секунд с определенной даты. Вот несколько примеров необработанных данных, фактического результата и ожидаемой даты (получено из GUI). Моя цель - получить ожидаемую дату из необработанных данных.

То, что я пробовал, было:

import datetime

sample_expected_date = datetime.datetime(2019, 11, 29, 20, 45, 22).timestamp()
sample_raw_data = int(''.join('E2 E8 24 26'.split(' ')[::-1]), 16)
offset = sample_expected_date - sample_raw_data

raw_data = ['E2 E8 24 26', 'C9 1A 26 26', '44 A7 28 26',
            '3A 16 2A 26', 'BD 5D 4C 26', '9F 0E 4F 26',
            '25 60 50 26', '12 03 53 26', '24 ED 77 26',
            'C2 3E 79 26', '21 82 7A 26', '46 D7 9C 26',
            'DE 28 9E 26', 'A1 C0 A4 26', '32 12 A6 26']

date = {}
for raw in raw_data:
    date[raw] = datetime.datetime.fromtimestamp(int(''.join(raw.split(' ')[::-1]), 16) + offset)

for i in date.items():
    print(i)

Я использую то же смещение, чтобы получить ожидаемую дату для всех остальных записей. Я заметил, что есть некоторые расхождения между полученным результатом и ожидаемой датой.

 Raw Data             Result            Expected Date
E2 E8 24 26    2019-11-29 20:45:22    2019-11-29 20:45:22
C9 1A 26 26    2019-11-30 18:30:33    2019-11-30 18:30:33
44 A7 28 26    2019-12-02 16:54:28    2019-12-01 16:54:28
3A 16 2A 26    2019-12-03 19:00:10    2019-12-02 19:00:10

BD 5D 4C 26    2019-12-29 19:02:21    2019-12-28 19:02:21
9F 0E 4F 26    2019-12-31 20:01:35    2019-12-30 20:01:35
25 60 50 26    2020-01-01 20:01:41    2020-12-31 20:01:41
12 03 53 26    2020-01-03 20:01:22    2020-01-02 20:01:22

24 ED 77 26    2020-01-31 20:01:40    2020-01-30 20:01:40
C2 3E 79 26    2020-02-01 20:02:10    2020-01-31 20:02:10
21 82 7A 26    2020-02-02 19:01:53    2020-02-01 19:01:53

46 D7 9C 26    2020-02-28 20:02:14    2020-02-27 20:02:14
DE 28 9E 26    2020-02-29 20:02:38    2020-02-28 20:02:38
A1 C0 A4 26    2020-03-05 20:03:45    2020-03-02 20:03:45
32 12 A6 26    2020-03-06 20:04:02    2020-03-03 20:04:02

Проблема начинается в: -

  • Декабрь с 1 днем ​​больше
  • Январь с более чем на 1 день
  • Февраль с более чем на 1 день
  • Ма c с 3 днями более

Я думаю, что сырые данные всегда учитывают каждый месяц составляет 31 день.

Есть ли у меня какие-нибудь идеи / предложения / объяснения / рекомендации, чтобы найти правильную дату?

...