java SimpleDateFormat行为

Jef*_*rey 5 java simpledateformat

我有一个带模式的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));
Run Code Online (Sandbox Code Playgroud)

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

我的目标是仅以2004-02-03的格式捕捉日期并忽略02-03-04.我认为模式中的yyyy需要4位数年份,但显然事实并非如此.任何人都可以解释为什么这不会抛出一个解析异常?我想要......

Jon*_*eet 8

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

对于解析,如果模式字母的数量大于2,则无论数字位数如何,都按字面解释年份.所以使用"MM/dd/yyyy"模式,"01/11/12"解析到公元12年1月11日

这有可能是约达时间会更严格-这是一般更好的API,IMO ...

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

  • SimpleDateFormat的这种行为是荒谬的!如果解析器不遵循模式,那么具有模式又有什么意义呢? (2认同)