2014-07-07 68 views
5

我試圖將UTC格式的字符串轉換爲日期對象,導致轉換關閉幾分鐘。在SimpleDateFormat中不正確的日期字符串解析

SimpleDateFormat fullDateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS", Locale.US); 
fullDateFormater.setTimeZone(TimeZone.getTimeZone("UTC")); 

之前解析日期字符串是 - 2014-07-07T18:24:23.788810

解析後的日期是Tue Jul 08 00:07:31 GMT+05:30 2014

正確的日期轉換爲Tue Jul 07 23:54:23 GMT+05:30 2014

有大約12-13分鐘的差異轉換。我觀察到轉換中10分鐘範圍內的差異。

任何想法是什麼問題?

+0

什麼是你的輸入字符串日期 –

回答

12

SSSSSS正在解析許多毫秒 - 而不是幾微秒,正如您所期待的那樣。

788810毫秒是13分鐘,8秒和810毫秒。所以你的結果實際上是2014-07-07T18:27:31.810。

是的,這是一個非常愚蠢的API設計。它將使更有意義S...S的意思,而不是「毫秒」,「幾分之一秒內」 - 但它從大約預Java的8日期/時間API :(

我不最糟糕的事情是遠't 認爲有一種方法可以用SimpleDateFormat解析微秒 - 無論如何,Java-8之前的Java時間API精度毫秒級 - 因此我認爲您只需要用substring刪除最後三位數字並使用解析SSS

如果您使用的是Java 8,我強烈建議您使用java.time,我確信它可以處理這種情況。 (我沒有看過它的解析API,但我相信它會沒事的。)

+0

謝謝!我幾乎記得以前我遇到過這個問題。我剛剛減少了毫秒部分。尚未使用Java 8。感謝'java.time'。 –

+0

事實上'java.time'解析API是正確的,並且正確地處理了「秒的分數」(0到9位)而不是「毫秒」。我熱烈地推薦它。看看'DateTimeFormatter'類。 –

相關問題