输入“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. 【SSH网上商城项目实战20】在线支付平台的介绍

    转自:https://blog.csdn.net/eson_15/article/details/51441431 之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了. ...

  2. hdu 3999 二叉查找树

    The order of a Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  3. sprintf和sscanf

    sprintf 一个可以将输入打印到字符串的函数,用法与printf差不多 可以参考这篇文章: http://blog.csdn.net/masibuaa/article/details/563488 ...

  4. 关于容器、虚拟机以及 Docker 的一个入门教程

    Yves yao · 2017-09-05翻译 · 1315阅读 原文链接 huangxiaolu审校   源地址:http://zcfy.cc/article/a-beginner-friendly ...

  5. bat批处理中如何获取前一天日期

    网上找了好久在批处理中生成前一日期的代码段 但网上找到的代码对 每个月的1号和每年的1号计算前一日期时,总会报错,然后要加很多的逻辑判断 想了想,可以用.net写个EXE程序,用.net实现获取前一日 ...

  6. ADO.NET对象模型之间的关系

    ADO.Net支持两种访问数据的模型:无连接模式和连接模式 无连接模式将数据下载到客户机器上,并在客户机上将数据封装到内存中, 可以向访问本地关系数据库一样访问内存中的数据(例如DataSet), 连 ...

  7. Ubuntu16.04 安装maven

    maven是个项目管理工具,在编程领域应用广泛.本文主要讲述如何在ubuntu16.04系统下安装maven. 第一步,去官网下载maven. 第二步,解压到/opt/maven目录. 创建manve ...

  8. JDBC基本操作示例

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  9. drupal的权限设置

    通过hook_menu()设置url的权限,有两种方式: 方式一:定义函数,通过 access callback 'access callback' => 'fun()', function f ...

  10. 推荐js库: underscore

    Underscore封装了常用的JavaScript对象操作方法,用于提高开发效率. 之间没用他之前,自己写,那是相当的酸爽. 如循环处理: for(var i=0;i<data.length; ...