[英]Date format conversion not working as expected in Java
這是已經在stackoverflow上出現的一個眾所周知的問題。 我被要求解決Web應用程序中的錯誤。 我有一個來自網絡表單的日期,用戶應該以給定格式dd/MM/yyyy
輸入有效日期。
該應用程序使用Struts 1.3作為框架,這是我在相應FormBean的validate方法中發現的。
DateFormat dateFormat = new SimpleDateFormat( "dd/MM/yyyy", aLocale );
try{
mydate = dateFormat.parse( formDate );
}
catch( ParseException pe ){
errors.add( "error", new ActionError( "error.date.invalid" ) );
}
但是它的發生的錯誤不會引發例如,當用戶在短格式輸入,即每年01/10/12
,將其轉化為一個日期,尋找數據庫中,我發現01/10/0012
。
作為快速解決方案,我嘗試使用setLenient(false)
,但是仍然不會引發異常,並且mydate仍然會導致有效但錯誤的日期。
在搞砸正則表達式和字符串預解析之前,我想知道是否丟失了一些東西。 特別是在日期格式實例化中使用語言環境時。
當前在項目中使用的Jdk為1.5
您可以使用如下格式格式:
DateFormat dateFormat = new SimpleDateFormat( "dd/MM/yy", aLocale );
因此它將“ 01/11/12”轉換為2012年1月11日,並將“ 01/11/86”轉換為1986年1月11日
如果Year為“ yyyy”格式,則無論數字位數如何,年份都將按字面意義進行解釋。
有關更多詳細信息,請閱讀: http : //docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#year
或者,您也可以使用javascript / Java代碼以“ dd / mm / yyyy”格式處理用戶輸入。 限制用戶僅以“ dd / mm / yyyy”格式輸入日期。
問題在於, 01/10/12
dd/MM/yyyy
01/10/12
確實滿足dd/MM/yyyy
。 只是(您已經發現)它指的是12 AD。
您的選擇是:
我的投票將是1和3的組合。1表示啟用JavaScript的情況,3表示處理JS驗證失敗的罕見情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.