我在Java 7上看到了很多关于如何计算两个日期之间的天数的例子,但我发现它们没有正确包含闰年。Java 7获得两个日期之间的天数,闰年正确计算
我已经看到了这个例子,但显然闰年不包括:
Calculating days between two dates with in java
所以我想看看正确的Java代码是如何获得的天数,而无需使用约达时间和Java 8?
我在Java 7上看到了很多关于如何计算两个日期之间的天数的例子,但我发现它们没有正确包含闰年。Java 7获得两个日期之间的天数,闰年正确计算
我已经看到了这个例子,但显然闰年不包括:
Calculating days between two dates with in java
所以我想看看正确的Java代码是如何获得的天数,而无需使用约达时间和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黑客更好,因为它处理夏令太:(d2.getTime() - d1.getTime() + 1000 * 60 * 60 * 12)/(1000 * 60 * 60 * 24)
但在穿越夏令时时不起作用。 “2016-03-13”和“2016-03-14”(America/New_York)之间有0天。 – Andreas
由于输入是纯日期,并且DST永远不会超过12小时,所以可以通过进行舍入舍入来修复,即添加半天:'(d2.getTime() - d1.getTime()+ 1000 * 60 * 60 * 12)/(1000 * 60 * 60 * 24)' – Andreas
这给我的机器上的'1'(CET/CEST)。无论如何,我们需要完整的规范来说明我们认为“一天差异”。例如。 '2016-03-13 23:12:05'和'2016-03-14 00:17:44'之间应该有什么区别? –
最简单的方法是将您的阳历日期转换为儒略日数。这在维基百科上有描述(https://en.wikipedia.org/wiki/Julian_day#Converting_Julian_or_Gregorian_calendar_date_to_Julian_day_number)。一旦你有两个日期的朱利安天数,减去它们。 –
不,对不起,最简单的方法是使用Jodatime或Java 8 :) –
我提到我对Java 7感兴趣。出于具体原因,我正在使用Java 7进行工作。 – DarioBB