我从VB应用程序中获取了一个二进制文件,该文件由大约1400条日期格式的时间戳记及其后的19个Long值组成。
我可以使用以下功能在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中的文件中读取Date-timestamps(我已经能够读取Long-values),但是我找不到任何有关如何解释Date-type的8个字节的信息。
例如,二进制形式的第一个时间戳是c5 b3 a2 11 80 7b e4 40
。VB的输出是2014-11-05 0:03:06 AM。
为了澄清,我不是在寻找Java实现,而是从VB寻找数据类型“ Date”的二进制表示形式的信息。(为此,除此http://msdn.microsoft.com/en-us/library/3eaydw6e.aspx之外,我无法找到其他更多信息,这没有太大帮助)
正如@RBarryYoung在对问题的评论中提到的那样,VBA在内部将日期/时间值存储为浮点Double
值。整数部分是自1899-12-30以来的天数,小数部分是时间(例如0.25 = 6 AM,0.5 =正午,0.75 = 6 PM)。
在您给出的示例中,日期/时间(双精度)值以字节形式存储为c5 b3 a2 11 80 7b e4 40
。Windows一直是小端环境,因此通过反转字节顺序,我们知道它对应于64位二进制值0x40e47b8011a2b3c5
。
像这样的Binary-to-IEEE_Double转换器告诉我们十进制Double
值为4.19480021527777789742685854435E4
,如果我们问VBA对应的日期/时间值是多少,我们会得到
?CDate(41948.0021527777789742685854435)
2014-11-05 00:03:06
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句