2015-06-26 241 views
-2

我有四个日期,我想计算日期之间的日差。我的程序如下。计算差异时的输出错误

Date d1 = new Date("11/28/14 23:59:58"); 
    Date d2 = new Date("11/29/14 00:00:02"); 
    Date d3 = new Date("11/29/14 23:59:58"); 
    Date d4 = new Date("11/30/14 00:00:02"); 

    final long DAY_IN_MILLIS = 1000 * 60 * 60 * 24; 

    int diff1 = (int) ((d2.getTime()- d1.getTime())/DAY_IN_MILLIS); 
    int diff2 = (int) ((d3.getTime()- d1.getTime())/DAY_IN_MILLIS); 
    int diff3 = (int) ((d4.getTime()- d1.getTime())/DAY_IN_MILLIS); 



    System.out.println(diff1); 
    System.out.println(diff2); 
    System.out.println(diff3); 

欲DIFF1 = 1,DIFF2 = 1 &的diff3 = 2。我的输出为diff1 = 0,diff2 = 1,diff2 = 1

+2

'日期(字符串)'已过时,只是顺便说一句。 – ceekay

+0

比较这样的日期也是一个非常糟糕的主意。 – Kayaman

+0

可能重复的[Java,计算两个日期之间的天数](http://stackoverflow.com/questions/7103064/java-calculate-the-number-of-days-between-two-dates) –

回答

1

d2和d1之间有4秒不同,因此0天对于diff1有意义。

在d3和d1之间恰好有1天,这就是你在diff2中得到的结果。

在d4和d1之间有一天多一点(1天和4秒),所以在使用int除法时,在diff3中有意义。

为了更清楚,使用浮点除法时这里的结果:

4.6296296296296294E-5 
1.0 
1.0000462962962964 
+0

谢谢伊兰....但根据我的要求是,只要有日期变化,它应该即使差异是1秒,也会给我差异。 所以请指导我如何做到这一点。 – ChandraBhan

+0

@ChandraBhan如果两个日期都是同一天(例如d3和d2),该怎么办?你期望得到0还是1? – Eran

+0

如果两个日期相同,那么我会预计为0. – ChandraBhan

1

它只有4 D2和D1之间秒性差异。因此,它们之间的完整天数是0,而不是1,因为您认为差异被视为2个时间戳之间的差异。 我强烈建议您使用Joda Time,这是比日期更简单的API。然后,您可以使用:

int days = Days.daysBetween(d2, d1).getDays(); 
+0

谢谢!但根据我的要求,即使两个日期之间存在1秒的差异,也应该返回1. 它就像d1是星期一,而d2是星期二......所以差异应该返回1. – ChandraBhan

+0

然后使用时间戳: )祝你好运 – aviad

2

为此,可以使用现代的Java 8时API解决:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yy HH:mm:ss"); 
LocalDate d1 = LocalDate.parse("11/28/14 23:59:58", formatter); 
LocalDate d2 = LocalDate.parse("11/29/14 00:00:02", formatter); 
LocalDate d3 = LocalDate.parse("11/29/14 23:59:58", formatter); 
LocalDate d4 = LocalDate.parse("11/30/14 00:00:02", formatter); 
int diff1 = d1.until(d2).getDays(); 
int diff2 = d1.until(d3).getDays(); 
int diff3 = d1.until(d4).getDays(); 
System.out.println(diff1); 
System.out.println(diff2); 
System.out.println(diff3); 
+0

如果我正在安装Java 7。那么在那种情况下,它会起作用吗? – ChandraBhan

+1

没有。如果您不能使用Java 8,请考虑使用Joda Time API,如@aviad所示。 –