This question already has answers here:
Parsing string to local date doesn't use desired century

(1个答案)



How to change the base date for parsing two letter years with Java 8 DateTimeFormatter?

(1个答案)


4年前关闭。




以下测试失败:'86生日格式为2068。如何格式化为1986
    @Test
    public void testBirthday() {
        assertEquals("1986-08-07", java.time.LocalDate.parse("070886",
             java.time.format.DateTimeFormatter.ofPattern("ddMMyy")));
    }

失败:
java.lang.AssertionError: expected:<1986-08-07> but was:<2086-08-07>

这与org.joda.time库有很大不同,后者在此处正确地假定为19'

/ Sidenote:关于“重复”问题中标记的答案,我不认为这是重复的!

最佳答案

可以使用DateTimeFormatterBuilder.appendValueReduced()来控制基准年。

这段代码将以1900年而不是2000年为基准日期进行解析:

DateTimeFormatter f = new DateTimeFormatterBuilder()
  .appendPattern("ddMM")
  .appendValueReduced(ChronoField.YEAR, 2, 2, 1900)
  .toFormatter();
LocalDate date = LocalDate.parse("070886")

10-05 19:38