2013-07-12 103 views
1

我有雙格式數字作爲字符串上傳的文件,其中每個人都等於具體時間如下:(實際上,我必須將左側轉換到右側)字符串數字日期和時間格式

40981.0500559 = 13.03.2012 01:12:04.000 

40981.0500676 = 13.03.2012 01:12:05.000 

40981.0500792 = 13.03.2012 01:12:06.000 

40981.0500910 = 13.03.2012 01:12:07.000 

40981.0501025 = 13.03.2012 01:12:08.000 

我嘗試使用excel,並找出前五位數字顯示日期和從1900年的計數,這意味着00000,並且每天都會變成+1。其餘7位數字。它顯示的時間是從00:00:00到00000000之間的時間,並且每個0.0000116在時間的秒數上增加,直到達到0.9999999再次等於00:00:00。但我真的很困惑java的轉換出路。我試過這個:

//Time[j] = 40981.0500559 as string format** 

double T = Double.parseDouble(Time[j])*100000000- 2766489481590L; 
DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss.FFF"); 
System.out.println(formatter.format(T)); 

但是當我改變輸入值的時候會得到錯誤的日期。例如40993.2891410應該變成25/03/2012 06:56:21.782,但我知道上述命令沒有針對所有號碼進行校準。

+0

這是Java的嗎?請標記爲這樣。 – imulsion

+0

[OLEDate java實現]的可能的重複(http://stackoverflow.com/questions/2599102/oledate-java-implementation) –

+1

你有一個「OLE自動化日期」,又名「OLEDate」或「OADate」。您可以在[此MSDN文章](http://msdn.microsoft.com/en-us/library/system.datetime.tooadate.aspx)的「備註」一節中閱讀它們。請參閱[此問題](http://stackoverflow.com/q/2599102/634824)或[此問題](http://stackoverflow.com/q/9733254/634824)在Java中使用它們。 –

回答

0

試試這個

long T = (long)(Double.parseDouble("40981.0500559")*100000000- 2766489481590L);   
Date date=new Date(T);                  
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss.F");     
System.out.println(formatter.format(date));            
+0

仍然存在一些問題,我會查找它們 –

+0

爲什麼使用'FFF'的格式字符串? 'F'被記錄爲「本月的星期幾」...... –

+0

嗨例如「40981.0500559」它應該是13.03.12 01:12:04.830但是我和你的格式日期是正確的bu時間成爲08 :42:04.002我嘗試了另一個輸入數據,並且持續時間很長,甚至日期會變成錯誤的。我認爲減去那個將它帶入java標準毫秒時間的數字會導致錯誤地找到正確的日期和時間。 – Morteza