我在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;
}
答案 0 :(得分:2)
Joda将需要几天考虑yearsBetween
。试试这个:
public static int getDiffYear() {
LocalDate firstDate = new LocalDate(1, 10, 2);
LocalDate today = new LocalDate();
int yearsBetween = Years.yearsBetween(firstDate, today).getYears();
return yearsBetween;
}
截至今日(2014/10/01)将于2012年返回。这表明从java.util.Date
转换中发生了一些事情。
编辑:这是由于Marko Topolnik mentioned。当您执行new DateTime(first)
时,您的DateTime
为0001-09-30。
答案 1 :(得分:1)
Years
实用程序类将仅检查多年的差异。如果您需要考虑这些日期,则应使用Days
类并将结果重新计算为年。