Декодировать формат даты? - PullRequest
2 голосов
/ 21 мая 2011

Учитывая некоторые короткие целые числа и даты, которые они представляют, существует ли какой-либо систематический метод определения того, как они хранятся в этом формате, и декодирования других дат? Данные хранятся в другом программном обеспечении.

Сначала я думал, что дни представлены одним из байтов, поскольку первый байт за 1 мая минус первый байт за 11 февраля действительно соответствовал правильному количеству дней (79 за 2011 год). Но это не может быть так просто не только потому, что 8 бит могут хранить только 256 дней, но и потому, что даты до 2000 года хранят только год с обоими байтами.

Вот то, с чем я работаю, но возьмите заголовки столбцов с зерном соли.

DDDDDDDD YYYYYYYY DD-MM-YY
01011010 10001010 1955
10110010 10010001 1960
11000000 10010001 1961
11100011 11000011 1996
01010001 11000110 1997
00001101 11001000 1999
10000000 11001001 10-02-00
11010101 11001010 16-01-01
10101010 11001101 11-01-03
00000101 11010000 05-09-04
10011101 11010101 07-08-08
11010000 11010101 27-09-08
00010000 11010110 30-11-08
00110100 11010110 05-01-09
11111110 11010110 26-07-09
10011101 11010111 01-01-10
10110111 11011000 10-10-10
00110011 11011001 11-02-11
00111010 11011001 18-02-11
10000010 11011001 01-05-11
10000101 11011001 04-05-11
01101100 11100110 19-05-20

Я также вижу, что 30-11-08 имеет тот же второй байт, что и 05-01-09, и наоборот, две даты в 2010 году имеют разные значения во втором байте.

РЕДАКТИРОВАТЬ: Благодаря ответам и некоторым исследованиям, я вижу, что эпоха 17 ноября 1858 года. Это стандартный формат, который называется Модифицированный юлианский день.

Ответы [ 2 ]

3 голосов
/ 21 мая 2011

Похоже, что это были дни с некоторой точки в прошлом ~ 1858 (я не разработал всю магию високосного года), но день года отображается только в вашем существующем приложении в течение лет> = 2000. Байтотмеченный вами год является старшим байтом, а дневной - младшим.

2 голосов
/ 21 мая 2011

Разве это не просто значение 16-битных дней с начала эпохи?10 февраля 2000 года - 51584. 18 февраля 2011 года - 55610. Между - (11 * 365) + 3 високосными днями + разница в 8 дней в дне месяца составляет 4026 дней.Начало эпохи будет примерно в 1860 году. Или, более вероятно, 1-й бит старшего разряда включается 1 января 1950 года.

...