我从VB应用程序中获取一个二进制文件,该文件包含大约1400条日期格式的时间戳记录,后跟19条长值。
我可以使用此功能读取VBA中的数据:
Dim myDate As Date
Dim myLong As Long
iFileNum = FreeFile
Open "C:\test.bin" For Binary Access Read As #iFileNum
Do While Not EOF(iFileNum)
Get iFileNum, , myDate
MsgBox(myDate)
For i = 1 To 19
Get iFileNum, , myLong
Next i
Loop
现在我想从java中读取文件中的日期时间戳(我已经能够读取Long值),但是我找不到有关如何解释Date类型的8个字节的任何信息。 / p>
例如,二进制形式的第一个时间戳是c5 b3 a2 11 80 7b e4 40
。
VB输出为2014-11-05 0:03:06 AM。
为了澄清,我不是在寻找一个java实现,而是关于数据类型的二进制表示的信息'日期'来自VB。 (对此我没有能够找到比http://msdn.microsoft.com/en-us/library/3eaydw6e.aspx更多的信息,这对我们来说没什么帮助)
答案 0 :(得分:2)
正如@RBarryYoung在对该问题的评论中提到的那样,VBA在内部将日期/时间值存储为浮点Double
值。整数部分是自1899-12-30以来的天数,小数部分是时间(例如,0.25 = 6 AM,0.5 = Noon,0.75 = 6 PM)。
在您给出的示例中,日期/时间(双精度)值以字节存储为c5 b3 a2 11 80 7b e4 40
。 Windows一直是一个小端环境,因此通过反转字节的顺序,我们知道它对应于64位二进制值0x40e47b8011a2b3c5
。
像this one这样的二进制到IEEE_Double转换器告诉我们,十进制Double
值是4.19480021527777789742685854435E4
,如果我们询问VBA我们得到的相应日期/时间值是什么< / p>
?CDate(41948.0021527777789742685854435)
2014-11-05 00:03:06