5

我有一个带有模式的 SimpleDateFormat yyyy-M-d",以及以下场景:

String str = "02-03-04";        
SimpleDateFormat f = new SimpleDateFormat("yyyy-M-d");
f.setLenient(false);
System.out.println(f.parse(str));

输出是Sat Mar 04 00:00:00 EST 2

我的目标是只捕获格式为 2004-02-03 的日期并忽略 02-03-04。我认为模式中的 yyyy 需要 4 位数的年份,但显然情况并非如此。谁能解释为什么这不会引发解析异常?我希望它...

4

2 回答 2

8

好吧,我可以从文档中解释它:

对于解析,如果模式字母的数量超过 2 个,则按字面解释年份,而不考虑位数。所以使用模式 "MM/dd/yyyy", "01/11/12" 解析到公元 12 年 1 月 11 日

Joda Time可能会更严格——总的来说,它是一个更好的 API,IMO ......

如果解析后年份小于 1000,您总是可以抛出异常......

于 2010-12-10T15:48:19.030 回答
1
于 2019-09-21T03:07:56.947 回答