2016-05-13 146 views
0

我在Java 7上看到了很多关于如何计算两个日期之间的天数的例子,但我发现它们没有正确包含闰年。Java 7获得两个日期之间的天数,闰年正确计算

我已经看到了这个例子,但显然闰年不包括:

Calculating days between two dates with in java

所以我想看看正确的Java代码是如何获得的天数,而无需使用约达时间和Java 8?

+0

最简单的方法是将您的阳历日期转换为儒略日数。这在维基百科上有描述(https://en.wikipedia.org/wiki/Julian_day#Converting_Julian_or_Gregorian_calendar_date_to_Julian_day_number)。一旦你有两个日期的朱利安天数,减去它们。 –

+1

不,对不起,最简单的方法是使用Jodatime或Java 8 :) –

+0

我提到我对Java 7感兴趣。出于具体原因,我正在使用Java 7进行工作。 – DarioBB

回答

0

这算什么?

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)

+2

但在穿越夏令时时不起作用。 “2016-03-13”和“2016-03-14”(America/New_York)之间有0天。 – Andreas

+1

由于输入是纯日期,并且DST永远不会超过12小时,所以可以通过进行舍入舍入来修复,即添加半天:'(d2.getTime() - d1.getTime()+ 1000 * 60 * 60 * 12)/(1000 * 60 * 60 * 24)' – Andreas

+0

这给我的机器上的'1'(CET/CEST)。无论如何,我们需要完整的规范来说明我们认为“一天差异”。例如。 '2016-03-13 23:12:05'和'2016-03-14 00:17:44'之间应该有什么区别? –