2010-12-23 30 views
5

我希望構建一個可選的時間參數的日期格式。如何使用可選的時間參數創建DateFormat?

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd [hh:mm]"); 

是否也可以構造一個能夠解析不同格式的日期格式對象?比如嘗試當前的語言環境,但後來又回到ISO-8601,或者我應該只在寫一個失敗的日期時寫多個日期格式?

UPDATE:回過頭來看這個問題,我可以看到我並沒有具體規定,多種日期格式的原因是對於解析字符串,而不是格式化的日期,從而歧義用於格式化日期對象不是一個問題爲了我。如果考慮到這一點,時間部分是否包含在解析字符串中。

+1

我不知道是否有一個規範的答案,但你總是可以使用多個DateFormat對象,甚至可能是它們的列表,並使用一個不會拋出ParseException的對象。 – 2010-12-23 01:02:49

+1

謝謝,我已經開始使用4種不同的格式,其中兩種用於默認實例,帶/不帶時間,另外兩種來自ISO格式帶/不帶時間。我在考慮是否應該測試字符串的長度以優先考慮日期+時間格式。 – 2010-12-23 01:10:03

回答

4

SimpleDateFormat不會讓你這樣做。它不支持(單一)格式的替代方案。

即使這樣做,也會出現問題。考慮使用這種

new SimpleDateFormat("yyyy-MM-dd [hh:mm]"); 

與使用

new SimpleDateFormat("yyyy-MM-dd hh:mm"); 
new SimpleDateFormat("yyyy-MM-dd "); 

在第一種情況下,當我分析對格式的日期,我不知道「2010-01-01」之間的差異,「 2010-01-01 00:00「通過查看發送給我的Date。在第二種情況下,我可以。

在第一種情況下,當我在分鐘和秒字段中格式爲零的日期時,不清楚結果是否應以「00:00」結尾。在第二種情況下,這完全掌握在應用程序手中。

我想我真的在這裏提出的問題是不同的人和不同的情況下不同的事情日期和日期/時間意味着不同的事情。有時它們表示瞬間,有時是間隔。有時缺乏表達的精確度意味着不精確,有時精確度是隱含的。

作爲開發人員,我們必須在非常挑剔的編寫軟件和根據日期/時間值對用戶實際含義進行錯誤假設的軟件之間運行界限。爲用戶做好準備的第一步是瞭解問題的複雜性。將變體重載到單個格式字符串中(將會)在地毯下掃描問題。

相關問題