本人根据开发经验,目前总结了3种方法:
第一种:
根据两个日期间毫秒数计算,同理任何日期类型都可以转换为对应的毫秒数
public static int daysBetween(long time1, long time2) {
long between_days = (time2 - time1) / (1000 * 3600 * 24);
return Integer.parseInt(String.valueOf(between_days));
}
第二种:
jdk8 LocalDate提供了toEpochDay()方法
1、将日期Date转换为LocalDate:
public static LocalDate toLocalDate(Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
// atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。
return instant.atZone(zoneId).toLocalDate();
}
2、LocalDate提供了toEpochDay()方法:
public static int differentDays(Date date1, Date date2) {
if (date1 != null && date2 != null) {
return new Long(toLocalDate(date2).toEpochDay() - toLocalDate(date1).toEpochDay()).intValue();
}
throw new IllegalArgumentException("日期不能为空");
}
其中参数date1,date2要格式一致,比如yyyy-MM-dd;
第三种:
LocalDate提供了另外一个方法:until(Temporal endExclusive, TemporalUnit unit),其中参数unit为ChronoUnit.DAYS,
示例如下:
LocalDate start = LocalDate.parse("2018-08-28");
LocalDate end = LocalDate.parse("2018-09-30");
long days = start.until(end, ChronoUnit.DAYS);
System.out.println("间隔:" + days + "天");