我正在进行一些单元测试,并且发生过这种情况:
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
我希望这些价值至少不同。
有什么想法吗?
答案 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年返回不同的数字。