我需要一种方法来返回当天和其他任何日期之间的天数差异,我有以下内容:
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 ....
有谁知道它为什么不起作用。
顺便说一下,参数的日期是从数据库加载的,因为如果我尝试使用主设置两个日期就可以了。
答案 0 :(得分:4)
如果使用Java 8
,则可以使用java.time
组件
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
final class PeriodTest {
public static void main(String[] args) {
LocalDate now = LocalDate.of(2017, 4, 4); // 2017-04-04
LocalDate otherDate = LocalDate.of(2015, 10, 23); // 23-10-2015
long days = Math.abs(ChronoUnit.DAYS.between(otherDate, now));
System.out.println("Days = " + days);
}
}
Days = 529
优点:
Calendar
对象java.util.Date
方法将java.time.Instant
转换为Date.toInstant()
,以使其与当前示例一起使用对于Java 6,您可以使用{8}作为Java 8 Time API的前身。
import org.joda.time.Days;
import org.joda.time.LocalDate;
final class PeriodTest {
public static void main(String[] args) {
LocalDate now = LocalDate.parse("2017-04-04");
LocalDate otherDate = LocalDate.parse("2015-10-23");
int days = Math.abs(Days.daysBetween(now, otherDate).getDays());
System.out.println("Days = " + days);
}
}