Я работал с некоторыми необработанными данными, полученными с машины для снятия отпечатков пальцев (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 день.
Есть ли у меня какие-нибудь идеи / предложения / объяснения / рекомендации, чтобы найти правильную дату?