Java 日期比较差一天

标签 java date calendar

我有一个 Java 方法,它比较两个 Date 并返回它们之间的天数,但它差了一天。

即使我将小时、分钟和秒设为 0,计算仍然关闭。

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;
    }

输出

Today = 1453939200030 Expiration = 1454544000000

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

最佳答案

嗯,如您所见,您没有清除毫秒数,1454544000000 - 1453939200030 = 604799970 除以 86400000 得到 6.99999965277777.. .,当截断为 int 时表示 6

现在,如果您也清除毫秒,今天将变为 1453939200000,这将导致您回答 7

注意:这并不意味着您已经完成,因为夏令时。使用 DST,其中一个时间戳可能与另一个时间戳相差 ±1 小时,因此您可能仍然会遇到截断问题。

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

关于Java 日期比较差一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35072111/

相关文章:

java - 通用方法 - "unchecked conversion to conform to T from the type"警告

javascript - 带有时区的 moment.js 特定格式

java - 不兼容的类型 : ArrayList<C<CAP#1>> cannot be converted to ArrayList<C<? >>

java - Hibernate 命名策略更改表名

php - 如何将 2010-03-01 转换为 Unixtime (使用 php)

angularjs - 在 AngularJS 中转换 JSON 日期

Java - c1.add(Calendar.MONTH, 1) 不起作用

java - 是 TimeZone.setTimeZone ("est") 不同于 TimeZone.setTimeZone ("EST")

ios - 如何将阿拉伯文日期转换为英文日期

java - × 274612 使用 Java 应用程序在文本区域上检索和显示 Sql 数据库数据