Java 8 DateTimeFormatter将LocalDate.of(0,1,5)解析为什么;010105";?
当使用格式为“yyMMdd”的Java 8 DateTimeFormatter将LocalDate.of(0,1,5)解析为什么;010105";?,java-8,java-time,Java 8,Java Time,当使用格式为“yyMMdd”的DateTimeFormatter时,会发生奇怪的事情LocaleDate.of(0,1,5)被格式化为“010105”,但“000105”被正确解析为LocalDate.of(2015,1,5)。这是为什么 对于测试: @Test public void testYear2000() { LocalDate localDate = LocalDate.of(0, 1, 5); String format = DateTimeFormatter.of
DateTimeFormatter
时,会发生奇怪的事情LocaleDate.of(0,1,5)
被格式化为“010105”
,但“000105”被正确解析为LocalDate.of(2015,1,5)
。这是为什么
对于测试:
@Test
public void testYear2000() {
LocalDate localDate = LocalDate.of(0, 1, 5);
String format = DateTimeFormatter.ofPattern("yyMMdd").format(localDate);
assertThat(format, is("000105")); // fail! it is "010105"
LocalDate parse = LocalDate.parse("000105", DateTimeFormatter.ofPattern("yyMMdd"));
assertThat(parse, is(LocalDate.of(2000, 1, 5))); //pass
}
您的困惑来自以下事实:
LocalDate.of(0, 1, 5);
您指定了零年,即2000年之前的千年:
LocalDate.of(2000, 1, 5);
最后一个将输出000105
更新:@Meno Hochschild添加了进一步的解释,我还将链接好的问题以供参考。我添加了对@Lachezar Balev正确答案的补充解释。以yy模式打印0年(两千多年前)意味着:使用公元前1年的两位数纪年形式,相当于公历0年。因此,您可以在格式化输出010105中看到第1年 如果您使用了uuMMdd模式(u=预测公历年),那么输出将确实符合您的预期000105,但由于输入错误,仍然是基本错误的