我有一个 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/