Преобразование шестнадцатеричных значений в дату в C # - PullRequest
0 голосов
/ 16 декабря 2010

d У меня есть программа, в которой даты хранятся в двоичном формате и отображаются в программе в формате YY / MM / DD.Я использую XVI32 (http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm) для просмотра двоичного файла в шестнадцатеричном формате и получаю следующие результаты

Например,

Шестнадцатеричное значение: 31 07 01 00Значение даты: 85/06/18 (в формате ГГ / ММ / ДД)

Другой пример,

Шестнадцатеричное значение: EF 1B 01 00Значение даты: 00/01/01 (в формате ГГ / ММ / ДД)

Последний пример,

Шестнадцатеричное значение: 32 07 01 00Значение даты: 85/06/19 (в формате ГГ / ММ / ДД)

Мне не нужен программный код, но я должен понимать преобразование шестнадцатеричного значения в фактический читаемый формат даты.Спасибо.

1 Ответ

0 голосов
/ 16 декабря 2010

Число - это порядковое представление числа дней с определенной эпохи.Похоже, что программа не рассчитывает что-то совершенно правильное, потому что дата всего лишь несколько дней до 1801-01-01.

+------------+------------+----------------+-------------+
|    Date    | Hex value  | Decimal (days) | Date - days |
+------------+------------+----------------+-------------+
| 1985-06-18 | 0x00010731 | 67377          | 1800-12-28  |
| 1985-06-19 | 0x00010732 | 67378          | 1800-12-28  |
| 2000-01-01 | 0x00011bef | 72687          | 1800-12-28  |
+------------+------------+----------------+-------------+

Может быть интересно посмотреть, что она конвертирует 1801-01-01 в.Если в качестве эпохи используется 1800-12-28, его следует преобразовать в 4 или 04 00 00 00 при сохранении в файл.Если он преобразуется в 00 00 00 00, тогда математика даты, используемая программным обеспечением, пропускает где-то несколько дат.

Итак, в итоге: шестнадцатеричное значение представляет количество дней с возможной эпохи 1800-12-28.Чтобы получить дату, к этой дате добавляется количество дней, в результате чего дата отображается в программе.

...