2015-04-22 42 views
0

任何人都可以向我解釋什麼是錯在此代碼:SimpleDateFormat的解析時間和日期錯分和秒

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss'Z'").parse("2015-04-22T19:54:11.827Z")); 

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss'Z'").parse("2015-04-22T19:54:11.0Z")); 

輸出的說就是:

Wed Apr 22 20:07:47 GMT+02:00 2015 
Wed Apr 22 19:54:00 GMT+02:00 2015 

的時候有請注意以分鐘爲單位的差異毫秒輸入時間。

回答

6

對於SimpleDateFormat,毫秒格式值包含大寫S個字符,而不是小寫s個字符(秒)。

s秒的分鐘數55

小號毫秒數978

它解釋827爲秒,並增加了那些秒(847秒13分鐘47秒),以你的價值。

以毫秒爲單位使用SSS

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") 

順便說一句,你不需要重新創建不止一次如果是相同的SimpleDateFormat更多。您可以創建一次,將其保存到一個變量中,並多次呼叫parse,每個日期/時間字符串需要解析一次。

+0

重新創建SimpleDateFormat只是爲了展示這個問題,除了你的答案是完美的:) –

1

使用大寫SSS代替sss,因爲s被解釋爲SimpleDateFormat中的秒數。因此,將您的代碼更改爲

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2015-04-22T19:54:11.827Z")); 

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2015-04-22T19:54:11.0Z")); 

這將爲您完成這項工作。並且爲了優化您的代碼使用此

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
System.out.println(sdf.parse("2015-04-22T19:54:11.827Z")); 

System.out.println(sdf.parse("2015-04-22T19:54:11.0Z")); 

無需一次又一次地創建對象。只需創建一次並使用它來解析。