获得两个日期之间的差异 - 没有几个月 - 没有几天

时间:2014-10-01 12:44:56

标签: java jodatime

我在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;
    }

2 个答案:

答案 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类并将结果重新计算为年。