简单的日期格式解析 2k11 之类的值,应该抛出异常
Simple date format parses 2k11 like values which should throw an exception
我正在尝试使用简单的数据格式验证日期,它会解析奇怪的日期。
val dateFormat = new SimpleDateFormat("dd MMM, yyyy")
dateFormat.setLenient(false)
dateFormat.parse("01 Jan, 2k11")
1 月 1 日星期日 00:00:00 IST 2
快速时间:-62104253400000
c日期:C.E。 2-01-01T00:00:00.000+0530
我开始挖掘 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
这样做,请阅读源代码。
我正在尝试使用简单的数据格式验证日期,它会解析奇怪的日期。
val dateFormat = new SimpleDateFormat("dd MMM, yyyy")
dateFormat.setLenient(false)
dateFormat.parse("01 Jan, 2k11")
1 月 1 日星期日 00:00:00 IST 2
快速时间:-62104253400000
c日期:C.E。 2-01-01T00:00:00.000+0530
我开始挖掘 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
这样做,请阅读源代码。