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

标签 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.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
}

最佳答案

我为@Lachezar Balev 的正确答案添加了补充说明。按模式 yy 打印 0 年(两千多年前)意味着:使用 相当于 proleptic gregorian 0 年即公元前 1 年的两位数形式的时代。因此,您会在格式化输出 010105 中看到第 1 年。

如果您使用了模式 uuMMdd(u=proleptic gregorian year),那么输出确实符合您的预期 000105,但由于输入错误,从根本上来说仍然是错误的。

关于java-8 - DateTimeFormatter 将 LocalDate.of(0,1,5) 解析为 "010105"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41368057/

相关文章:

java - 从整数创建 LocalDate 对象

error-handling - 在java 8流foreach中抛出异常

java - System.currentTimeMillis()/1000 如何在 JAVA 中工作

Java LocalDateTime 解析错误

java - Lambda 表达式示例在 Java 8 中不起作用

java - 在 Java 中存储不同类型对象的有序列表的最佳方法?

kotlin - TzdbZoneRulesProvider 在 java.time 中不工作

java - "MappingException: No property null found on entity class java.time.OffsetDateTime to bind constructor parameter to!"与 Spring MongoDB

java - 为什么 OffsetDateTime 不能在 Java 8 中解析 '2016-08-24T18:38:05.507+0000'

java - Java 8 中 parallelStream 的变异减少