在C#中将十六进制值转换为日期

时间:2010-12-16 19:13:52

标签: binary hex

dI有一个程序,其日期以二进制形式存储,并在程序中显示为YY / MM / DD格式。我使用XVI32(http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm)查看十六进制中的二进制文件并得到以下结果

例如,

十六进制值:31 07 01 00
日期值:85/06/18(YY / MM / DD格式)

另一个例子,

十六进制值:EF 1B 01 00
日期值:00/01/01(YY / MM / DD格式)

最后的例子,

十六进制值:32 07 01 00
日期值:85/06/19(YY / MM / DD格式)

我不需要编程代码,但需要了解从十六进制值到实际可读日期格式的转换。感谢。

1 个答案:

答案 0 :(得分:0)

该数字是自某个时代以来天数的小端表示。看起来这个软件并没有计算出正确的东西,因为日期只是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纪元以来的天数。要获取日期,会将天数添加到此日期,这会导致程序中显示的日期。