计算差异时输出错误

时间:2015-06-26 08:44:26

标签: java date time

我有四个日期,我想计算日期之间的天数差异。我的计划如下。

    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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

d2和d1之间有4秒不同,所以0天对diff1有意义。

在d3和d1之间完全有1天,这就是你在diff2中得到的。

在d4和d1之间有一天超过1天(1天4秒),所以当使用int division时,diff3中的1是有意义的。

为了更清楚,以下是使用浮点除法时的结果:

4.6296296296296294E-5
1.0
1.0000462962962964

答案 2 :(得分:1)

d2和d1之间只有4秒的差异。因此,它们之间的完整天数为0而不是1,正如您所期望的那样,因为差异被视为2个时间戳之间的差异。 我强烈建议您使用Joda Time,这是一个比Date更简单的API。然后您可以使用:

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