解码日期格式?

问题描述:

给定一些简短的整数和它们代表的日期,是否有任何系统的方法来确定如何以这种格式存储并解码其他日期?存储的数据来自另一个软件。解码日期格式?

我最初认为日期是由其中一个字节表示的,因为5月1日的第一个字节减去2月11日的第一个字节的天数是正确的(2011年为79天)。但它不能那么简单,不仅仅是因为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具有相同的第二个字节为09年5月1日,反之在2010年这两个日期都在第二个字节不同的值。

编辑:由于答案和一些研究,我看到时代是1858年11月17日。这是一个标准格式称为修正的朱利安日。

+0

不是一个真正的编程问题....? – 2011-05-21 02:07:00

+1

我应该改变标签,还是你说它根本不属于这里?在试图想出想法时,我发现了类似的问题,像http://stackoverflow.com/questions/4261684/how-to-decode-some-number-into-timedate – 2011-05-21 02:11:11

+1

你的例子保证是正确的,或者他们是只是猜测? – 2011-05-21 02:12:24

看起来好像是从过去的某个时间点到1858年(我没有计算出所有的闰年魔法),但一年中的每一天只会在您现有的应用程序中显示> 2000年。您标记年份的字节是高位字节,而“日”字节是低位字节。

+0

我没有足够的代表投票了,但谢谢!尽管文件中的其他数据使用相反的顺序,但我不觉得有点愚蠢。 – 2011-05-21 03:27:00

难道它不仅仅是一个16位天的时代价值? 2000年2月10日为51584. 2011年2月18日为55610.在 - (11 * 365)+ 3闰日+月份的8天差异之间有4026天。这个时代的开始似乎大概是1860年。或者,更可能的是,1950年1月1日的高阶1位开启。