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)
我在 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)