日期格式转换在Java中未按预期工作
这是stackoverflow上已经出现的一个众所周知的问题。 我被要求解决web应用程序中的一个bug。 我有一个来自web表单的日期,用户应该以给定格式输入一个有效日期日期格式转换在Java中未按预期工作,java,validation,simpledateformat,Java,Validation,Simpledateformat,这是stackoverflow上已经出现的一个众所周知的问题。 我被要求解决web应用程序中的一个bug。 我有一个来自web表单的日期,用户应该以给定格式输入一个有效日期dd/MM/yyyy 应用程序使用Struts 1.3作为框架,这是我在相应FormBean的validate方法中发现的 DateFormat dateFormat = new SimpleDateFormat( "dd/MM/yyyy", aLocale ); try{ mydate = dateFormat.
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
,它被转换为日期,并在我找到的数据库中查找时,不会引发错误
作为一个快速修复方法,我尝试使用setLenient(false)
,但仍然没有引发异常,mydate仍然会导致有效但错误的日期
在处理正则表达式和字符串预解析之前,我想知道我是否遗漏了什么。尤其是在日期格式实例化中使用区域设置时
项目中当前使用的Jdk是1.5问题是
01/10/12
确实满足dd/MM/yyyy
。只是它(正如你所发现的)指的是公元12年
你的选择是:
我投票赞成1和3的组合。1用于启用JavaScript的情况,3用于处理JS验证失败的罕见实例。您可以使用如下格式模式:
DateFormat dateFormat = new SimpleDateFormat( "dd/MM/yy", aLocale );
因此,它将“2012年11月1日”转换为2012年1月11日,“1986年11月1日”转换为1986年1月11日
如果年份为“yyyy”格式,则不管位数多少,年份都会按字面解释
欲了解更多详情,请阅读:
或者,您可以处理“dd/mm/yyyy”格式的javascript/Java代码中的用户输入。Restrict用户只能以“dd/mm/yyyy”格式输入日期。您可以查看,它有许多想法可能会有所帮助。我希望setLenient也能检查输入格式,而不是添加两个零。我不能改变前端架构,所以我想我必须使用regex预解析。