【发布时间】:2014-10-02 11:27:18
【问题描述】:
我在Joda-Time 中使用以下函数来获取两个日期之间的差异:
public static int getDiffYear(Date first) {
int yearsBetween = Years.yearsBetween(new DateTime(first), new DateTime()).getYears();
return yearsBetween;
}
提供给函数的日期是:0001-10-02 (YYYY-MM_DD)
我得到了与今天对比的 2013 年的差异,但是我发现正确的结果应该是 2012 年。因为这一天仍然是 01。
我在纯 Java 中有一个单独的函数,得到了想要的结果:
public static int getDiffYear(Date first) {
Calendar a = Calendar.getInstance();
a.setTime(first);
Calendar b = Calendar.getInstance();
int diff = b.get(Calendar.YEAR) - a.get(Calendar.YEAR);
if (a.get(Calendar.MONTH) > b.get(Calendar.MONTH) ||
(a.get(Calendar.MONTH) == b.get(Calendar.MONTH) && a.get(Calendar.DATE) > b.get(Calendar.DATE))) {
diff--;
}
return diff;
}
【问题讨论】:
-
请解释为什么 2014 - 1 应该是 2012。Sans 表示没有。
-
您还应该确保充分了解 Proleptic 公历的后果。 en.wikipedia.org/wiki/…
-
好吧,我很困惑,我正在重现上面的纯Java函数。我想要 Joda 的等价物。不是在做功课方面,但除了年我什么都不占。
-
我很抱歉命名约定被搞砸了。
-
顺便说一句,Joda-Time 也是“纯 Java”。