2013-07-14 75 views
2

我目前工作的一些簡單的項目在Java,我有以下字符串日期:無法解析的日期例外

String dateString = "Sun 7/14 03:44 AM 2013"; 

,並希望這個字符串轉換爲Date對象。我使用下面的代碼行來做到這一點。我搜索網站,發現解決方案如何與DateFormatter做到這一點:

DateFormat format = new SimpleDateFormat("EEE M/dd hh:mm a yyyy"); 
Date d = format.parse(dateString); 

但我可能做錯事,因爲我總是得到異常:

Unparseable date: "Sun 7/14 03:44 AM 2013" 

這似乎是模式問題,我正在使用,但嘗試了不同的模式,沒有任何工作。

+1

[documentation](http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html)很清楚你可以使用的格式:) – christopher

+1

我知道但我不知道爲什麼它不工作...:/ – Majky

回答

6

某些字段(例如星期幾字段和/或AM/PM標記)可能與您的默認Locale的字段不匹配。 ParseException具有方法getErrorOffset以準確確定模式不匹配的位置。

嘗試

DateFormat format = 
       new SimpleDateFormat("EEE M/dd hh:mm a yyyy", Locale.ENGLISH); 
+0

該死的我很愚蠢。現在感謝它的工作:) – Majky

+0

您可能想要在十月之前將字符串更改爲「EEE MM/dd hh:mm a yyyy」。 –

+1

@GilbertLeBlanc將仍然工作然後 - [演示](http://ideone.com/vdLC2Z):) – Reimeus

1

添加Locale爲你解析星期名語言日是非常重要的。

String dateString = "Sun 7/14 03:44 AM 2013"; 
DateFormat format = new SimpleDateFormat("EEE M/dd hh:mm a yyyy", Locale.US); 
Date d = format.parse(dateString); 
0

我嘗試了這一點,下面的工作,

 String stringDate = "Sun 7/14 03:44 AM 2013"; 
     DateFormat format = new SimpleDateFormat("EEE MM/dd hh:mm a yyyy"); 

     System.out.println("Parsed Date = "+format.parse(stringDate)); 

輸出結果如下

Parsed Date = Sun Jul 14 03:44:00 BST 2013 
+1

它只適用於英文區域設置,它不適用於Majky,因爲它具有不同的區域設置。 –

0
SimpleDateFormat formatter = new SimpleDateFormat("/* type your own format*/"); 



    String formattedDate = formatter.format(todaysDate); 

    System.out.println("Formatted date is ==>"+formattedDate); 

試試這個代碼

0

的現代答案完整性的緣故。而其他的答案是很好的答案在2013年,DateDateFormatSimpleDateFormat現在早已過時了,我建議你與他們的現代版本,替換它們:

DateTimeFormatter parser 
      = DateTimeFormatter.ofPattern("EEE M/dd hh:mm a yyyy", Locale.ENGLISH); 
    LocalDateTime ldt = LocalDateTime.parse(dateString, parser); 

結果是2013-07-14T03:44一個LocalDateTime預期。

格式模式字符串仍然相同,並且對英語語言環境的需求相同。