输入“33/12/2011”,用SimpleDateFormat parse()方法,转化为Date(2012,01,02).这样处理相当“33/12/2011”是正常输入,如果需要"33/12/2011”报错,即把"33/12/2011"当作错误格式,刚开始自己写了段逻辑判断:
把转成的日期再反转回来,再比较是否一致,即使用format方法再转换成字符串,和传入的那个串作比较,如果不相等,则证明传入的那个日期格式是错误的
private String getDestDateStrFromSrcDateStr(String dateStr, String srcDateFormat, String descDateFormat) { try { final SimpleDateFormat src_sdf = new SimpleDateFormat(srcDateFormat); final Date date = src_sdf.parse(dateStr); //把转成的日期再反转回来,再比较是否一致 if (srcDateFormat.length() != dateStr.length() || !dateStr.equals(src_sdf.format(date))) { LOGGER.error("the src date format is {} , but input the date string value is {}, input illegal", srcDateFormat, dateStr); throw new ParseMessageException( ErrorKeys.PAYMENT_AG_CONFIG_SERVICE_PARAM_VALIDATE_FAILED); } //把转成的date类型转换为目标格式日期字符串(yyyyMMdd) final SimpleDateFormat dest_sdf = new SimpleDateFormat( descDateFormat); LOGGER.info("the converted dest date str:{}" + dest_sdf.format(date)); return dest_sdf.format(date); } catch (java.text.ParseException e) { LOGGER.error("the src date format is {} , but input the date string value is {}, input illegal", srcDateFormat, dateStr); throw new ParseMessageException( ErrorKeys.PAYMENT_AG_CONFIG_SERVICE_PARAM_VALIDATE_FAILED); } }
总觉得这种方法显得很笨拙,后来找找API,发现有一个方法:setLenient(false)可以直接使用。哎~何必费这么大劲呢
测试方法:
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateTest { public static void main(String[] args) throws ParseException { DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); format.setLenient(false); Date date = format.parse("33/12/2011"); System.out.println(date); } }
该方法的作用:
setLenient用于设置Calendar是否宽松解析字符串,如果为false,则严格解析;默认为true,宽松解析
相关推荐
我们使用`SimpleDateFormat`类来解析日期字符串。`setLenient(false)`方法将解析器设置为非宽容模式,这意味着它会严格检查日期的合法性,例如2月不能有30天或31天(除非是闰年的2月29日)。 `parse`方法尝试将日期...
在Java中,`SimpleDateFormat`是一个用于格式化和解析日期的具体类,可以将日期转换成便于阅读的形式,也可以将字符串解析成日期。它属于`java.text`包。 示例代码: ```java DateFormat format1 = new ...
需要注意的是,`SimpleDateFormat`的`setLenient(false)`方法用于确保日期时间格式的严格匹配,避免因不规范的输入导致意外的结果。 在实际应用中,可能需要根据不同的日期格式进行转换。例如,日期格式可能是"2002...
在提供的代码示例中,`SimpleDateFormat`被用来根据给定的日期格式(如"yyyy-MM-dd kk:mm:ss"或"yyyy-MM-dd")解析字符串,并创建相应的`java.util.Date`对象。然后,通过调用`getTime()`方法,我们可以获取以毫秒为...
在使用 SpringMVC 框架时,经常会遇到表单中的日期字符串和 JavaBean 的 Date 类型的转换问题。 SpringMVC 默认不支持这个格式的转换,因此需要手动配置,自定义数据的绑定才能解决这个问题。在需要日期转换的 ...
这段代码注册了一个自定义的日期编辑器,用于将请求中的字符串格式转换为 `Date` 对象,并且可以设置日期格式不宽松。 #### 数据模型控制 在 Spring MVC 中,可以通过 `Model` 或 `ModelMap` 对象向视图传递数据。...