Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 DateTimeFormatter将LocalDate.of(0,1,5)解析为什么;010105";?_Java 8_Java Time - Fatal编程技术网

Java 8 DateTimeFormatter将LocalDate.of(0,1,5)解析为什么;010105";?

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

当使用格式为“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.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,但由于输入错误,仍然是基本错误的