java7 計算日期相隔天數的最優方法
阿新 • • 發佈:2019-01-10
環境
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;
}
如有錯誤,歡迎指出.