环境
jdk : 1.7
因为java8
中官网已经有封装好的方法,所以我这个方法适用于java8
之前的版本.
比如:java7
需求
计算相隔天数的情况有两种:
①不考虑时分秒.
②考虑时分秒的.
举例:
date1="2017-06-18 21:28:28", date2="2017-06-19 01:28:28".
对于第一种情况,不考虑时分秒的话,上面date1和date2相差的天数为1.
对于第二种情况,考虑时分秒的话,上面date1和date2相差的天数为0.
好了直接上代码:
/**
* 获取两个日期之间的天数
* @param date1
* @param date2
* @param isExactMillisecond 是否精确到毫秒 比如2017年6月1号 21:21:28,2017年6月2号 20:21:28,true:相差天数为0,false相差天数为1
* @author yutao
* @return date2大于date1的话,返回正数,否则返回负数.
* @date 2017年6月19日下午6:00:21
*/
public static int getDaysDifference(Date date1, Date date2, boolean isExactMillisecond){
/*Date temp;//如果不区分date2和date1谁大谁小,可以解开注释
if(date1.getTime() > date2.getTime()){
temp = date2;
date2=date1;
date1=temp;
}*/
int days = 1;
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int year1 = cal.get(Calendar.YEAR);
int dayOfYear1 = cal.get(Calendar.DAY_OF_YEAR);
cal.clear();
cal.setTime(date2);
int year2 = cal.get(Calendar.YEAR);
int dayOfYear2 = cal.get(Calendar.DAY_OF_YEAR);
long diffTime = date2.getTime() - date1.getTime();
if(isExactMillisecond){//精准考虑
return (int) (diffTime / (1000*3600*24));
}
//不考虑时间,只考虑日期
if(year1==year2 && dayOfYear1 == dayOfYear2){//同一天
days = 0;
}else{
days = (int) (diffTime / (1000*3600*24));
if(diffTime >= (1000*3600*24)){//不同天,且大于一天
if(diffTime % (1000*3600*24) > 0){
//假设为1.5天,就算2天
days++;
}
}
}
return days;
}
如有错误,欢迎指出.
java8
LocalDateTime now = LocalDateTime.now();
LocalDateTime now1 = LocalDateTime.now();
long until = now.until(now1, ChronoUnit.DAYS);
System.out.println(until);
仅做参考;