SimpleDateFormat行为

时间:2015-07-03 13:45:35

标签: java simpledateformat

我有以下几行:

final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date d = simpleDateFormat.parse("2004-52-05");

我预计会在第2行引发异常,因为' 52'不是有效月份,但代码运行且存储在d对象中的日期为

Sat Apr 05 00:00:00 EEST 2008

有人能解释我为什么吗?

1 个答案:

答案 0 :(得分:9)

  

如果您想创建一个严格匹配您的日期对象   pattern,然后将lenient设置为false。

来自Javadoc

  

Calendar有两种解释日历字段的方式,lenient   而且不宽容。当日历处于宽松模式时,它接受a   比它产生的更广泛的日历字段值。当一个日历   重新计算get()返回的日历字段值,全部   日历字段已标准化。例如,宽大   GregorianCalendar将MONTH == JANUARY,DAY_OF_MONTH == 32解释为   2月1日。

有关详细信息lenitent

,请参阅此处

所以加上这个..

simpleDateFormat.setLenient(false);

这将抛出你期待的Exception ..

java.text.ParseException: Unparseable date: "2004-52-05"