2012-11-26 163 views
3

我試圖解析出現在"01-26-2012 03:07 AM"格式的日期。SimpleDateFormat的不明原因ParseException

我創造了這個SimpleDateFormat

private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm a"); 

然而,每一個我分析下列時間:

String date = "01-26-2012 03:07 AM"; 
Date myDate = DATE_FORMAT.parse(date.trim()); 

我得到了ParseException

java.text.ParseException:無法解析日期:「01-26-2012 03:07 AM」 at java.text.DateFormat.parse(DateFormat.java :337)

是我SimpleDateFormat字符串是否正確?還有什麼可能會阻止它解析?

回答

3

這很可能是一個語言環境問題。如果你有英語語言環境,例如嘗試,它應該工作:

DateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm a", Locale.ENGLISH); 

既然你不指定區域,爲您的系統默認的使用,而「AM」可能無法正確解析。

下面的代碼輸出

數值指明MyDate =星期四年01月26 3點07分00秒GMT 2012

public static void main(String[] args) throws Exception { 
    String date = "01-26-2012 03:07 AM"; 
    DateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm a", Locale.ENGLISH); 
    Date myDate = DATE_FORMAT.parse(date.trim()); 
    System.out.println("myDate = " + myDate); 
} 

作爲附帶說明,如果更改代碼以Locale.CHINESE例如你會得到一個解析異常。

+0

謝謝,我剛剛嘗試使用Locale.english,Locale.US和其他幾個語言環境。仍然有同樣的問題,雖然:( – user1854772

+0

它適用於我 - 我發佈了一個完整的工作示例供參考 - 也許你可以嘗試它來確認它不起作用。你使用什麼版本的Java? – assylias

+0

我使用Java 1.6.0_33。我在你的評論中複製了這個例子,它仍然不起作用 – user1854772

0

SimpleDateFormat用作靜態對象是不正確的,因爲它不是thread safe。我不能說這是這裏的問題,但可能是一個指針。