2014-01-30 111 views
2

我在JBoss服務器中的jar文件中有一個java類,它通過bash文件調用,如下所示。在SimpleDateFormat中解析日期的問題

java -cp /com/site/domain/TimeFormatter.jar packOne.subPack.Test 

但是,在解析下面的日期時出現錯誤。

java.text.ParseException: Unparseable date: "Wed, 29 Jan 2014 21:00:00 GMT" 
    at java.text.DateFormat.parse(DateFormat.java:335) 

Java代碼:

Date date = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss z").parse("Sun, 26 Jan 2014 21:00:00 GMT"); 
System.out.println("main().date : " + date); 

缺少什麼我在這裏?我讀了很多關於SimpleDateFormat行爲不當的文章。但這是我在這些帖子中找不到的東西。

注:我認爲這是因爲Java版本的變化或某些事情。但是,我在我的機器上執行了不同版本的相同程序。它工作完美。 服務器的Java版本「1.5.0_22」

現場細節:

LANG=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 

回答

3

正常工作對我來說,我認爲這不是一個Java版本 - 相關問題......但更多的是Locale問題:)

指定Locale.ENGLISH爲您的SimpleDateFormat應明確地使其工作。例如,你可以這樣做:

final Date date = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss z", Locale.ENGLISH).parse("Sun, 26 Jan 2014 21:00:00 GMT"); 

正如javadoc entry for SimpleDateFormat指定的日期解析爲語言環境敏感。我必須承認,我並不完全知道您的字符串與您的字符串Locale,不匹配,但我們可以進一步調查是否...我們知道您的默認Locale實際上是:)

+0

你能解釋爲什麼它錯誤而沒有指定Locale嗎? – Keerthivasan

+0

假設默認區域設置不是Locale.ENGLISH,SimpleDateFormat需要其他語言中的日期和月份名稱(將英文字符視爲錯誤)。 –

+0

嗯......我沒有試過那個東西。讓我試試並更新一段時間 – namalfernandolk

1

現代Java日期和時間類別當這個問題首次被提出並回答時,這個問題並沒有完全顯現我想提供我現在推薦使用的現代解決方案。

ZonedDateTime dateTime = ZonedDateTime.parse("Wed, 29 Jan 2014 21:00:00 GMT", 
      DateTimeFormatter.RFC_1123_DATE_TIME); 

我正要寫需要一個語言環境中的其他答案是相同的,但後來我看到了光:你的時間串符合RFC 1123的格式。這是內置於Java-8及更高版本,因此也與ThreeTen Backport,現代類的回遷到Java 6和7. DateTimeFormatter.RFC_1123_DATE_TIME始終工作,獨立於語言環境。所以上述就是你所需要的。在具有丹麥語默認語言環境的計算機上進行測試。