这是一个众所周知的问题,已经出现在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
答案 0 :(得分:1)
您可以使用格式模式,如:
DateFormat dateFormat = new SimpleDateFormat( "dd/MM/yy", aLocale );
因此它会将“01/11/12”转换为2012年1月11日,将“01/11/86”转换为1986年1月11日
如果年份采用“yyyy”格式,则无论数字位数如何,都会按字面解释年份。
欲了解更多详情,请阅读: http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#year
或者您可以使用jd / Java代码处理“dd / mm / yyyy”格式的用户输入。禁止用户仅以“dd / mm / yyyy”格式输入日期。
答案 1 :(得分:0)
问题是01/10/12
确实满足dd/MM/yyyy
。只是它(正如你所发现的)指的是公元12年。
您的选择是:
我的投票将是1和3.1的组合,用于启用JavaScript的情况,3用于处理JS验证失败的罕见情况。