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

时间:2016-07-13 14:13:22

标签: java java-time

以下测试失败:'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'

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:-1)

Java 8&#39; LocalDate类默认使用2000+。为了解析1900及以上的yy格式,您需要自己减少时间。

当然,即使您检查当前年份的日期,如果在今天之后减去100年,这个修复程序也不会适用于100岁以上的人。

您还可以使用yyyy格式。或者只是使用Date对象,如果愿意,可以将其转换为LocalDate