2011-12-09 252 views
4

我有一個愚蠢的問題java.util.DateJava日期解析

我有這行代碼,但我不明白爲什麼這個日期是用這種格式無法解析的。

public class TestTime { 
    public static void main(String[] args) { 
     final String DATE_FORMAT = "EEE MMM dd HH:mm:ss zzz yyyy"; 

     String date = "Sat Dec 31 10:00:00 CET 2011"; 
     SimpleDateFormat dFormat = new SimpleDateFormat(DATE_FORMAT); 

     Date lDate = null; 
     try { 
      lDate = dFormat.parse(date); 
     } catch (ParseException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
    } 
} 
+3

檢查您的默認語言環境,是否en_US等等或某些'隱晦'? – home

+0

顯示異常跟蹤 – korifey

+1

請小心使用'SimpleDateFormat'。它不是線程安全的。 http://www.codefutures.com/weblog/andygrove/2007/10/simpledateformat-and-thread-safety.html – Gray

回答

10

如果您的系統使用的區域設置不是英語,你需要使用此構造:

SimpleDateFormat(DATE_FORMAT,Locale.ENGLISH); 

如果這不是問題,你應該格式化使用相同格式化程序的日期並將輸出與輸入字符串進行比較。

5

我看不出有什麼問題。它執行對我來說沒有錯誤,並返回:

Sat Dec 31 09:00:00 GMT 2011 
+0

不是一個真正的答案是不是? – soulcheck

+2

沒有堆棧跟蹤,這是一個有效的努力 - 至少,它表明沒有什麼東西與代碼「完全不正確」,並且必須是特定於環境的東西。對於語言環境建議+1。 – ziesemer

+0

非常感謝!這是一個語言環境問題! – migueloop

1

似乎是一個語言環境相關的問題。

如果我設置法語語言環境,則該模式不起作用。如果我在SimpleDateFormat構造函數中將Locale設置爲US,它確實可行。

SimpleDateFormat dFormat = new SimpleDateFormat(DATE_FORMAT,Locale.US);

+0

謝謝Olivier,它終於是一個Locale問題。 – migueloop