【问题标题】:Does org.joda.time.Period respect leap years?org.joda.time.Period 是否尊重闰年?
【发布时间】:2016-01-13 23:32:40
【问题描述】:

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

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

我希望这些值至少有所不同。

有什么想法吗?

【问题讨论】:

  • 糟糕。那是示例中的错字,我现在已经修复了。

标签: java date jodatime


【解决方案1】:

fieldDifference 的文档说

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

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

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

org.joda.time.Days.daysBetween(startDate, endDate).getDays()

如果超过 2 月底,2015 年返回的数字确实与 2016 年不同。

【讨论】:

  • 我理解为(某个月减去 24 天)。但是闰年不应该有所不同吗? org.joda.time.Period.fieldDifference(startDate, endDate).getMonths();在这两种情况下都是 1。 getDays() 在这两种情况下都是 -24。
  • 另外,这不是我想要的,我被“Period.fieldDifference”困住了。我只想知道为什么它在闰年和非闰年返回相同的天数。
  • fieldDifference 只是告诉你两个字段之间的区别。 251 之间的区别是 -24。这就是它要告诉你的。如果您想要其他东西,请使用其他方法。
  • 好的,我现在明白了,谢谢。您的最后一条评论是我正在寻找的答案。我并不真正理解文档“一次一个字段,而不是包装到其他字段”,现在,通过您的 (1-25) 插图,一切都对齐了。
猜你喜欢
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2022-11-14
  • 2022-10-02
相关资源
最近更新 更多