输入“33/12/2011”,用SimpleDateFormat parse()方法,转化为Date(2012,01,02).这样处理相当“33/12/2011”是正常输入,如果需要"33/12/2011”报错,即把"33/12/2011"当作错误格式,刚开始自己写了段逻辑判断:

把转成的日期再反转回来,再比较是否一致,即使用format方法再转换成字符串,和传入的那个串作比较,如果不相等,则证明传入的那个日期格式是错误的

  1. private String getDestDateStrFromSrcDateStr(String dateStr,
  2. String srcDateFormat, String descDateFormat)
  3. {
  4. try
  5. {
  6. final SimpleDateFormat src_sdf = new SimpleDateFormat(srcDateFormat);
  7. final Date date = src_sdf.parse(dateStr);
  8. //把转成的日期再反转回来,再比较是否一致
  9. if (srcDateFormat.length() != dateStr.length()
  10. || !dateStr.equals(src_sdf.format(date)))
  11. {
  12. LOGGER.error("the src date format is {} , but input the date string value is {}, input illegal",
  13. srcDateFormat,
  14. dateStr);
  15. throw new ParseMessageException(
  16. ErrorKeys.PAYMENT_AG_CONFIG_SERVICE_PARAM_VALIDATE_FAILED);
  17. }
  18. //把转成的date类型转换为目标格式日期字符串(yyyyMMdd)
  19. final SimpleDateFormat dest_sdf = new SimpleDateFormat(
  20. descDateFormat);
  21. LOGGER.info("the converted dest date str:{}"
  22. + dest_sdf.format(date));
  23. return dest_sdf.format(date);
  24. }
  25. catch (java.text.ParseException e)
  26. {
  27. LOGGER.error("the src date format is {} , but input the date string value is {}, input illegal",
  28. srcDateFormat,
  29. dateStr);
  30. throw new ParseMessageException(
  31. ErrorKeys.PAYMENT_AG_CONFIG_SERVICE_PARAM_VALIDATE_FAILED);
  32. }
  33. }

总觉得这种方法显得很笨拙,后来找找API,发现有一个方法:setLenient(false)可以直接使用。哎~何必费这么大劲呢

测试方法:

  1. import java.text.DateFormat;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. public class DateTest {
  6. public static void main(String[] args) throws ParseException {
  7. DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
  8. format.setLenient(false);
  9. Date date = format.parse("33/12/2011");
  10. System.out.println(date);
  11. }
  12. }

该方法的作用:

setLenient用于设置Calendar是否宽松解析字符串,如果为false,则严格解析;默认为true,宽松解析

日期字符串解析--SimpleDateFormat严格限制日期转换setLenient(false)的更多相关文章

  1. 表单中的日期 字符串和Javabean中的日期类型的属性自动转换

    搞了一上午的bug最终还是因为自己springMVC的注解不熟悉的原因,特记录. 在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支 ...

  2. 关于yyyy-MM-dd格式日期字符串,解析成LocalDateTime遇到的问题

    yyyy-MM-dd -> LocalDateTime 直接把yyyy-MM-dd格式的日期字符串解析成LocalDateTime会抛出异常 try { LocalDateTime localD ...

  3. 根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

    根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期 >>>>>>>>>>>>>>>>&g ...

  4. js 日期比较大小,js判断日期是否在区间内,js判断时间段是否在另外一个时间段内

    /** * 日期解析,字符串转日期 * @param dateString 可以为2017-02-16,2017/02/16,2017.02.16 * @returns {Date} 返回对应的日期对 ...

  5. SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换

    SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换 场景一:表单中的日期字符串和JavaBean的Date类型的转换 在使用SpringMVC的时候,经常会遇到表单中的 ...

  6. js字符串转日期,js字符串解析成日期,js日期解析, Date.parse小时是8点,Date.parse时间多了8小时

    js字符串转日期,js字符串解析成日期,js日期解析, Date.parse小时是8点,Date.parse时间多了8小时 >>>>>>>>>&g ...

  7. Java8获取当前时间、新的时间日期类如Java8的LocalDate与Date相互转换、ZonedDateTime等常用操作包含多个使用示例、Java8时区ZoneId的使用方法、Java8时间字符串解析成类

     下面将依次介绍 Date转Java8时间类操作 ,Java8时间类LocalDate常用操作(如获得当前日期,两个日期相差多少天,下个星期的日期,下个月第一天等) 解析不同时间字符串成对应的Java ...

  8. 3.javascript转换日期字符串为Date对象

    js中文网 阮一峰 1.求format“xxxx年xx月xx日 xx:xx”类型的两个日期天数差 var start = "2017年09月17日 13:51"; var end ...

  9. libs/tools.js stringToDate dateToString 日期字符串转换函数

    libs/tools.js stringToDate dateToString 日期字符串转换函数 import { stringToDate } from '@/libs/tools.js'   e ...

随机推荐

  1. 小菜庄园 Spring------图片的上传和下载

    1.图片的上传前台三个条件 文件上传页面的3个要求:            < 1.表单提交为post.mothod="post"            < 2.表单的 ...

  2. PAT 1029. Median

    尼玛,数组偶数个数的时候取中位数是取中间两者中的前者,还tmd一直再算平均,卧槽 #include <iostream> #include <cstdio> #include ...

  3. 循环遍历正则验证input框内容合法性

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. BZOJ3600:没有人的算术

    传送门 如果能给每个 \(pair\) 按照权值编号就好了 假设之前已经有了所有的权值的编号,现在考虑编号新的 \(pair\) 如果看过了陈立杰的论文的话,不难得到一个重量平衡树的做法 给树上每个子 ...

  5. 理解webpack4.splitChunks之chunks

    上回说到按照默认的splitChunks配置,入口里面的第三方依赖没有打包出来,这个是因为chunks属性的原因,下面我们就介绍chunks属性的意义和用法. chunks的含义是拆分模块的范围,它有 ...

  6. Mac Iterm 或者自带终端 bogon:~ username$

    mac 在用Iterm2 遇到命令行前缀自带 bogon:~ username$ 太长问题.有代码洁癖的我,终于找到了解决办法. 具体问题见下图: 而我想要的结果是: 解决办法:是安装 Oh My Z ...

  7. react与vue

    vue的选择居于react与angular之间,框架自身的语法比react多一点,但是又比angular少一点. 也正是由于选择的不同,所呈现出来的写法与思考方式就一定会有所差异,不论优劣,但肯定会导 ...

  8. git基础命令。

    创建一个新的本地仓库    git init 克隆远程服务器    git clone URL 打开一个文件夹   cd 添加文件   git add . 本地提交更改   git commit -m ...

  9. [转]Linux芯片级移植与底层驱动(基于3.7.4内核)

      1.   SoC Linux底层驱动的组成和现状 为了让Linux在一个全新的ARM SoC上运行,需要提供大量的底层支撑,如定时器节拍.中断控制器.SMP启动.CPU hotplug以及底层的G ...

  10. 实用爬虫-01-检测爬虫的 IP

    实用爬虫-01-检测爬虫的 IP 本篇介绍一个识别爬虫 ip 的小实例(教你一招识破无效的 ip 代理) [注意事项]: 1.url 可能会失效(个人感觉,因为它带了一个2018,下面附上链接获取方法 ...