在Java中沒有任何方式可以在未明確定義時猜測日期格式?解析Java中的不明確日期
例如,用戶鍵入11Mar09或11-09-2009或11/09/2009或11-09什麼是解析這個到Date對象的最佳方式,而沒有一堆try catch或引發錯誤?
在Java中沒有任何方式可以在未明確定義時猜測日期格式?解析Java中的不明確日期
例如,用戶鍵入11Mar09或11-09-2009或11/09/2009或11-09什麼是解析這個到Date對象的最佳方式,而沒有一堆try catch或引發錯誤?
我的推薦是不要。使用日期選擇器或明確指出的格式。猜測會導致各種各樣的問題,如果日期很關鍵,就很容易包括訴訟。
如果您的有猜測,請提供某種形式的非模糊反饋,如確認頁面上寫着「您的航班將於2009年11月9日預訂。這是否正確?」。
你可能有一堆正則表達式,並循環直到找到匹配。我想你也可以有一堆DateFormats並循環遍歷它們,在發生故障的地方捕獲異常。
第一種避免在非例外情況下使用異常,第二種從設計的角度來看可能更好,因爲您使用日期解析框架來設計它。但總的來說,我認爲任何一種方法本身都不一定是「最好」或「最差」 - 更多的是個人喜好/信念。
由於可能的日期字符串的域是無限的,我不知道如何才能識別它們。但是,您可以選擇一個子集進行模式匹配。
你沒有提供關於你的用戶界面的線索,但這裏最好的方法是幫助用戶輸入日期。例如使用彈出式日曆或僅強制使用預定義的格式。
我不認爲你要做到這一點,特別是基於你的例子,但如果你一定要,我覺得你最好的選擇將是使用類似Apache的DateUtils
公地郎鹹平:
String[] datePatterns = new String[] {
"ddMMMyy", // ex. 11Mar09
"dd-MM-yyyy", // ex. 11-09-2009
"dd/MM/yyyy", // ex. 11/09/2009
"dd-MM" // ex. 11-09
}
Date date = DateUtils.parseDate(stringDate, datePatterns);
像上面第四個不幸的日期會有問題 - 是「11/09」9月11日,11月9日,2011年9月,2009年11月,還是別的?
更重要的是,您將如何知道2009年9月11日或2009年11月9日? – 2009-10-12 04:11:21
謝謝大家的意見,我會強制日期採用特定格式。 – 2009-10-12 06:19:11