【发布时间】:2016-01-01 20:55:10
【问题描述】:
在计算两个日期之间的年份时,第二个日期是从第一个日期计算出来的(这是我正在处理的一个简化示例),LocalDate 和 Period 似乎计算年份略有不同。
例如,
LocalDate date = LocalDate.of(1996, 2, 29);
LocalDate plusYear = date.plusYears(1);
System.out.println(Period.between(date, plusYear).getYears());
同时
LocalDate date = LocalDate.of(1996, 3, 29);
LocalDate plusYear = date.plusYears(1);
System.out.println(Period.between(date, plusYear).getYears());
尽管明确添加了年份,但首先Period 将年份返回为0,而第二种情况返回1。
有没有巧妙的方法解决这个问题?
【问题讨论】:
-
@dotvav:给出的例子对我来说似乎很清楚......我看不出有什么问题。
-
这并不是他们计算一年的方式不同 - 这只是日历算术的一个怪癖。正如你所说,这种行为是合理的。你能准确地描述你想要的行为吗?
-
(虽然说是合理的,但野田时间在这种情况下实际上确实给出了1年的期限:)
-
@MenoHochschild:我强烈怀疑算术的这两种“模式”在某些情况下都是有用的,而在其他情况下则不太有用。我认为在 Noda Time 的操作完全按照文档记录的情况下故意声称存在 错误 是不合理的。 (请注意,这也是 OP 所希望的行为,这表明我认为它在某些情况下很有用是正确的......)
-
在 1997 年 1 月 1 日午夜和 1998 年 1 月 1 日午夜之间,地球并没有绕太阳公转一周,因为一个太阳年超过 365 天......在这里将天文学视为真理的最终来源。正如 Misha 所说 - 无论哪种方式都是合理的 IMO,只要它有记录即可。
标签: java java-8 java-time leap-year