org.joda.time.Period是否尊重闰年?

时间:2016-01-13 14:57:50

标签: java date jodatime

我正在进行一些单元测试,并且发生过这种情况:

2015(非闰年)

LocalDate endDate = LocalDate.parse("01/03/2015", new DateTimeFormatterFactory("dd/MM/yyyy").createDateTimeFormatter());
LocalDate startDate = LocalDate.parse("25/02/2015", new DateTimeFormatterFactory("dd/MM/yyyy").createDateTimeFormatter());

org.joda.time.Period.fieldDifference(startDate, endDate).getDays(); // is -24

2016(闰年)

LocalDate endDate = LocalDate.parse("01/03/2016", new DateTimeFormatterFactory("dd/MM/yyyy").createDateTimeFormatter());
LocalDate startDate = LocalDate.parse("25/02/2016", new DateTimeFormatterFactory("dd/MM/yyyy").createDateTimeFormatter());

org.joda.time.Period.fieldDifference(startDate, endDate).getDays(); // is ALSO -24

我希望这些价值至少不同。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

fieldDifference的文档说

  

通过提取差异来计算场差   一次一个字段而不包装到其他字段中。   因此2005-06-09 / 2007-04-12将产生P1Y-2M3D。

“01/03/2016”和“2016/02/02”之间 day字段的差异为1 - 25 = -24。这并不是说这是两个日期之间的天数。 -24作为任何一年中这两个日期之间的天数是没有意义的。

要查找两个日期之间的天数,可以使用

org.joda.time.Days.daysBetween(startDate, endDate).getDays()
如果它超过2月底,那么2015年的确将从2016年返回不同的数字。