【发布时间】:2017-10-12 19:26:35
【问题描述】:
我需要一个方法来返回当前日期和其他任何日期之间的天数差异,我有以下内容:
private long getDays(Date dateOp) {
Calendar feCurrent=Calendar.getInstance();
feCurrent.set(Calendar.HOUR_OF_DAY, 0);
feCurrent.set(Calendar.MINUTE, 0);
feCurrent.set(Calendar.SECOND, 0);
Calendar feAna=Calendar.getInstance();
feAna.setTime(dateOp);
feAna.set(Calendar.HOUR_OF_DAY, 0);
feAna.set(Calendar.MINUTE, 0);
feAna.set(Calendar.SECOND, 0);
feAna.getTime());
long timeDiff = Math.abs(feAna.getTime().getTime() - feCurrent.getTime().getTime());
return TimeUnit.MILLISECONDS.toDays(timeDiff);
}
问题是我总是少一天,例如,如果作为参数的日期是 2017 年 10 月 16 日,结果将是 3,但实际上是 4,我调试了这些日期的 timeDiff 是 345599395 ,当转换为天数是 3.999....
有谁知道为什么它不起作用。
顺便说一下,日期作为参数是从数据库加载的,因为如果我尝试使用主要设置两个日期都可以。
【问题讨论】:
-
feAna.set(Calendar.MILLISECOND, 0) -
尝试将两个日历实例的毫秒数设置为
0。cal.set(Calendar.MILLISECOND, 0) -
另外,如果夏令时在两个日期之间开始,这种通用方法将失败,因为会有一天只有 23 小时,这会打乱划分。
-
请注意,
Calendar和Date类是旧日期 API 的一部分,现在已成为旧版。而是使用包java.time中的新 API 的类。 -
谢谢,我设置了毫秒,它起作用了,我不会遇到夏令时问题,因为我的国家不使用它们
标签: java date date-difference