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.
好吧,正如你所看到的,你没有清除毫秒,1454544000000 - 1453939200030 = 604799970并且除以86400000得到你6.99999965277777...,这意味着6截断到int.
现在,如果你也清除毫秒,今天就会变成1453939200000,这将导致你回答7.
注意:由于夏令时,这并不意味着您已完成.使用DST时,其中一个时间戳可能距离另一个时间为±1小时,因此您仍可能遇到截断问题.
这是您特定问题的答案.尝试搜索如何在Java中正确查找日期之间的天数.