为什么这段代码不会引发'ParseException'?
DateFormat formatter = new SimpleDateFormat("dd/mm/yyyy");
try {
String date = "01/01/200'";
formatter.parse(date);
} catch (ParseException ex) {
throw new ParseException("Formato de fecha inválido",0);
}
请向我解释一下,我迷失了。请注意简单引用'
答案 0 :(得分:4)
因为这是应该做的。 如果您检查docs on DateFormat它所说的参数。
source - A String whose beginning should be parsed.
如果要限制格式,则必须使用正则表达式。
另请查看SimpleDateformat关于年份的规则:
For parsing, if the number of pattern letters is more than 2, the year is interpreted literally, regardless of the number of digits. So using the pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.
答案 1 :(得分:3)
根据Javadocs SimpleDateFormat
对于解析,如果模式字母的数量大于2,则无论数字位数如何,都按字面解释年份。所以使用模式“MM / dd / yyyy”,“01/11/12”解析到12月1日,12 A.D。
所以我怀疑这一年解析为200 A.D。
我刚刚运行了你的程序,这就是正在发生的事情。转换后的Date
是:
Date = Tue Jan 01 00:01:00 EST 200
答案 2 :(得分:0)
parse
方法将忽略解析日期末的任何非数字字符。
例如,如果解析"01/01/01asdsdf0'"
,它将只关注"01/01/01"
并忽略文本......所以年份将为01。
但是如果您尝试解析"01/01/asdsdf0'"
将引发异常,因为没有数字年份。