2015-04-26 52 views
1

我想解析以下日期格式SimpleDateFormatter與時區

2015年4月26日17:00(CET)

我用下面的模式String

DD.MM.YYYY HH :mm z

我正在使用java.text.SimpleDateFormat。但是,當我嘗試解析給定的字符串時,我收到一個ParseException

我使用下面的代碼

String datestring = "26.04.2015 17:00 CET"; 
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm z"); 
Date dt = format.parse(datestring) 

誰能告訴我在做什麼錯?

+0

請顯示密碼您寫的是 –

+0

我在 –

回答

0

班吉凱斯勒的答案是可以的(我給予好評)。符號z用於解析時區名稱和縮寫,解析偏移的符號Z.

仍然缺少的唯一一點是語言環境。您必須將語言環境設置爲英語,因爲「CET」是「中歐時間」的英文縮寫。在德國,它將是「MEZ」。

所以請儘量表達

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm z", Locale.ENGLISH); 

順便說一句,你的投入似乎是不一致的,因爲你的日期是在四月,但「CET」建議冬天的時候(而歐盟歐盟已經已經切換到夏天時間)。我希望你的格式對象足夠寬大。

+0

我已經用大寫和低z來玩了。我錯過的主要事情是通過Locale.ENGLISH。我試圖通過價值MEZ(我正在運行德國PC),它工作得很好。所以我認爲我永遠不會遇到問題,當我住在英國或美國時:)感謝您的幫助和夏季時間提示(CEST) –

+0

@MichaelMeyer很高興爲您提供幫助。我也住在德國,所以我可能比許多母語爲英語的人更加敏感。 –

1

使用小寫字母z代替大寫字母Z

您將擁有dd.MM.yyyy HH:mm z

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm z"); 
System.out.println(sdf.parse("26.04.2015 17:00 CET", new ParsePosition(0))); 

太陽4月26日12:00:00 EDT 2015年

你可以看到一個演示here

你可以看到SimpleDateFormathere參數的完整描述。

+0

以上加了密碼對不起,但結果保持不變。我仍然收到解析異常 –

+0

它適用於我。 –

0

嘗試SimpleDateFormat("dd.MM.yyyy HH:mm")

+0

以及如何傳遞時區信息? –

+0

正如Meno Hochschild在他的回答中所述。 – harshad