2015-01-14 26 views
1

我從一個VB應用程序中獲得一個二進制文件,它由大約1400條日期格式的Timestamp記錄和19個Long值組成。如何從另一種語言的VB二進制文件中讀取日期?

我能有這個功能來讀取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內,但我找不到有關如何解釋日期類型的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,這並沒有多大幫助)

+0

這個問題看似已關閉 - 因爲SO不是代碼翻譯服務 –

+0

我不喜歡代碼翻譯。但對於有關日期數據類型的確切信息的來源。 – Andi

+0

您可能需要添加一個'Java'標籤來獲得關於Java的幫助。在此期間,看看[這個問題](http://stackoverflow.com/questions/11555262/how-to-read-integers-and-date-in-binary-file)。這個問題涉及二進制到多個數據類型的轉換。 – GVashist

回答

2

由於@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

二進制到IEEE_Double轉換器一樣this one告訴我們,小數Double4.19480021527777789742685854435E4,如果我們問VBA對應的日期/時間值是什麼,我們得到

?CDate(41948.0021527777789742685854435) 
2014-11-05 00:03:06