简单的日期格式会解析2k11之类的值,应该抛出异常

时间:2019-07-12 10:30:38

标签: java validation simpledateformat

我正在尝试使用简单的数据格式来验证日期,并且它会解析奇怪的日期。

 val dateFormat = new SimpleDateFormat("dd MMM, yyyy")
      dateFormat.setLenient(false)
      dateFormat.parse("01 Jan, 2k11")

Sun Jan 01 00:00:00 IST 2

快速时间:-62104253400000

cDate:例如2-01-01T00:00:00.000 + 0530

1 个答案:

答案 0 :(得分:1)

我开始深入研究SimpleDateFormat的源代码,并阅读足够的内容来了解​​此处似乎正在发生的事情。发生的情况是,您的年份成分2k11被解释为两位数字的年份(实际上是一位数字,2),其后的所有内容均被视为日期格式的一部分而被忽略。考虑下面的代码会产生相同的结果:

  DateFormat dateFormat = new SimpleDateFormat("dd MMM, yyyy");
  dateFormat.setLenient(false);
  Date blah = dateFormat.parse("01 Jan, 2 Jon Skeet");
  System.out.println(blah);

此打印:

Sun Jan 01 00:00:00 CET 2

如您所见,解释的年份为2,Jon Skeet冒号被忽略。要确切地了解为什么 SimpleDateFormat这样做,请阅读源代码。