网上有很多版本的此类计算,但都不是很满意。
入参2019-01-01 23:59:59和2019-01-02 00:00:00百分之八十的算法会输出0。
于是自己写了一个符合常识的工具类。
/**
* 判断两个日期横跨天数(不含当天)
* E.g., 2019-09-19 12:00:00 2019-09-20 06:00:00 return 1
* E.g., 2019-09-19 12:00:00 2019-09-20 15:00:00 return 1
* E.g., 2019-09-19 12:00:00 2019-09-21 06:00:00 return 2
* E.g., 2019-09-19 12:00:00 2019-09-18 06:00:00 return -1
*/
public static long durDays(Date day1, Date day2) {
if (day2.before(day1)) {
return durDays(day2, day1) * -1;
}
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(day1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(day2);
long durDays = compareDatesByDay(day2, day1);
if (calendar2.get(Calendar.HOUR_OF_DAY) < calendar1.get(Calendar.HOUR_OF_DAY)
|| (calendar2.get(Calendar.HOUR_OF_DAY) == calendar1.get(Calendar.HOUR_OF_DAY)
&& calendar2.get(Calendar.MINUTE) < calendar1.get(Calendar.MINUTE))
|| (calendar2.get(Calendar.HOUR_OF_DAY) == calendar1.get(Calendar.HOUR_OF_DAY)
&& calendar2.get(Calendar.MINUTE) == calendar1.get(Calendar.MINUTE)
&& calendar2.get(Calendar.SECOND) < calendar1.get(Calendar.SECOND))) {
durDays += 1;
}
return durDays;
}
/**
* 返回两日期的天数差
* data1 - date2
*/
public static long compareDatesByDay(Date date1, Date date2){
return (date1.getTime()-date2.getTime())/(1000*3600*24);
}