Java 7 正确计算闰年得到 2 个日期之间的天数

Java 7 get number of days between 2 dates with correct calculation for leap years

我在 Java7 上看过很多关于如何计算两个日期之间的天数的示例,但我发现它们没有正确包含闰年。

我看过这个例子,但显然不包括闰年:

Calculating days between two dates with in java

所以我想看看正确的 Java 代码如何在不使用 Joda Time 和 Java 8 的情况下获取天数?

这个算法怎么样?

package com.example;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DayDifference {

    public static void main(String[] args) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d1 = sdf.parse("2016-02-28");
        Date d2 = sdf.parse("2016-03-01");

        long diff = (d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24);

        System.out.println("diff: " + diff);
    }
}

这会输出 2,因此适用于闰年。

更新:根据Andreas的评论,你最好使用 +12h hack,因为它也处理夏令时:(d2.getTime() - d1.getTime() + 1000 * 60 * 60 * 12) / (1000 * 60 * 60 * 24)