我正在尝试使用简单的数据格式来验证日期,并且它会解析奇怪的日期。
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
答案 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
这样做,请阅读源代码。