如何强制java.time.LocalDate假定19世纪为YY年模式?

参见英文答案 >
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个

以下测试失败:’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′.

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

最佳答案 基准年可以使用
DateTimeFormatterBuilder.appendValueReduced()控制.

此代码将解析基准日期为1900而不是2000:

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