2017-02-15 116 views
0

我試圖解析Java類型「​​Mar 28,2017 13:00」類型的字符串。DateFormat沒有正確解析日期

我寫下面的代碼

 DateFormat df = new SimpleDateFormat("MMM dd,YYYY HH:mm"); 
     System.out.println(df.parse(dateTime)); 

此代碼似乎正確解析小時,分鐘,但日期始終是1月1日,2017年如對於上面給出的字符串,輸出是「Sun Jan 01 13:00:00 IST 2017」

有關可能出錯的任何想法嗎?

+0

那麼你想分析什麼'dateTime'? – nbokmans

+1

dateTime是類型爲「Mar 28,2017 13:00」的字符串。輸入保證採用這種格式。 – D159

+0

你想要的輸出格式是什麼? – user3040153

回答

0
DateFormat df = new SimpleDateFormat("MMM dd,yyyy HH:mm", Locale.ENGLISH); 
    System.out.println(df.parse("Mar 28,2017 13:00")); 
+0

錯誤,請參閱我的答案。 –

1

的解決方案是校正模式:

DateFormat df = new SimpleDateFormat("MMM dd,yyyy HH:mm", Locale.ENGLISH); 
System.out.println(df.parse("Mar 28,2017 12:00")); 
// Tue Mar 28 12:00:00 CEST 2017 

說明:使用符號 「Y」 表示一年的-weekdate(或稱爲基於週年)。這不是日曆年,只能以明智的方式與週年和週日相結合。但是您的模式只包含月份和日期,所以SimpleDateFormat僅使用默認值爲每週(= 1)和星期幾(=星期日),並隱含美國標準爲星期定義(週週日開始)。這導致2017年以周爲基礎的第一個日曆周,因此觀察日期爲2017-01-01。

改爲使用符號「y」代表年份(此處爲正常日曆年)。

注意:與@Shamil Sungatov的接受的答案相比,我所選擇的圖案的字母「HH」爲小時部分,而不是「HH」(12小時的時鐘)。如果要解析的時鐘小時的值爲12(這將以不同的方式解釋,即在「hh」情況下爲午夜),這是相關的。