DateTimeFormatter将LocalDate.of(0,1,5)解析为“010105”是什么?

时间:2016-12-28 18:52:52

标签: java-8 java-time

使用格式为DateTimeFormatter的{​​{1}}时,会发生奇怪的事情...... "yyMMdd"格式化为LocaleDate.of(0,1,5),但“000105”已正确解析为"010105" }。为什么???

进行测试:

LocalDate.of(2015, 1, 5)

2 个答案:

答案 0 :(得分:4)

我为@Lachezar Balev的正确答案添加了补充说明。用yy模式打印第0年(超过两千年前)意味着:使用年份的两位数形式,相当于1个BCE 的预感格里高利年0。因此,您会在格式化输出010105中看到第1年。

如果您使用了模式uuMMdd(u = proleptic gregorian year),那么输出确实会与您的期望值000105相符,但由于输入错误仍然存​​在错误。

答案 1 :(得分:3)

你的困惑来自于:

LocalDate.of(0, 1, 5);

你指定了零年,即2000年之前的千年:

LocalDate.of(2000, 1, 5);

最后一个输出000105

更新: @Meno Hochschild添加了进一步的解释,我还会链接this好问题以供参考。