これはよく知られている質問で、stackoverflow にすでに登場しています。Web アプリケーションのバグを解決するよう依頼されました。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 です