以下测试失败:'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'
。
/旁注:关于“重复”问题中的标记答案,我不认为这是重复的!
答案 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
。