[英]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.