Java日期比较关闭一天

PT_*_*T_C 1 java calendar date

我有一个Java方法比较两个Dates并返回它们之间的天数,但是它已经过了一天.

即使在小时,分钟和秒之后,计算仍然关闭.

public long compareDates(Date exp, Date today){
        TimeZone tzone = TimeZone.getTimeZone("America/New_York");
        Calendar expDate = Calendar.getInstance();
        Calendar todayDate = Calendar.getInstance();

        expDate.setTime(exp);
        todayDate.setTime(today);

        expDate.set(Calendar.HOUR_OF_DAY, 0);
        expDate.set(Calendar.MINUTE, 0);
        expDate.set(Calendar.SECOND, 0);

        todayDate.set(Calendar.HOUR_OF_DAY, 0);
        todayDate.set(Calendar.MINUTE, 0);
        todayDate.set(Calendar.SECOND, 0);

        logger.info("Today = " + Long.toString(todayDate.getTimeInMillis()) + " Expiration = " + Long.toString(expDate.getTimeInMillis()));

        expDate.setTimeZone(tzone);
        todayDate.setTimeZone(tzone);

        return (expDate.getTimeInMillis()-todayDate.getTimeInMillis())/86400000;
    }
Run Code Online (Sandbox Code Playgroud)

产量

Today = 1453939200030 Expiration = 1454544000000
Run Code Online (Sandbox Code Playgroud)

在1/28和2/4之间有7天,但这会返回6.

And*_*eas 5

好吧,正如你所看到的,你没有清除毫秒,1454544000000 - 1453939200030 = 604799970并且除以86400000得到你6.99999965277777...,这意味着6截断到int.

现在,如果你也清除毫秒,今天就会变成1453939200000,这将导致你回答7.

注意:由于夏令时,这并不意味着您已完成.使用DST时,其中一个时间戳可能距离另一个时间为±1小时,因此您仍可能遇到截断问题.

这是您特定问题的答案.尝试搜索如何在Java中正确查找日期之间的天数.