本文共 689 字,大约阅读时间需要 2 分钟。
在将字符串转为java.util.Date
对象的时候,为了方便(主要是懒得做日期字符串的正则匹配)就干脆使用了java.text.SimpleDateFormat
的parse()
方法。但是我发现parse()
在解析日期字符串的时候本身存在一些问题。
以下是出现问题的代码
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");try { Date date=df.parse("2016--1-01"); System.out.println(date);} catch (ParseException e) { e.printStackTrace();}
这段代码我想很多人认为应该是抛出异常吧,但是实际上这段代码的运行结果是
Sun Nov 01 00:00:00 CST 2015经过源码的调试后才知道2016--1-01
中,月份是可以作为负数识别的,既这个字符串被识别为2016
的1
月之前的2
个月的第一天。(2
个月是因为月份是从0
开始计算的)
解决方案如下:
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");try { Date date=df.parse("2016--1-01"); //指定日期/时间解析是否不严格,默认是不严格(true) df.setLenient(false); System.out.println(date);} catch (ParseException e) { e.printStackTrace();}
转载地址:http://uhoub.baihongyu.com/