java計算兩個日期之前的天數(工作日),排除節假日和週末
阿新 • • 發佈:2019-01-28
如題所說,計算兩個日期之前的天數,排除節假日和週末。這裡天數的型別為double,因為該功能實現的是請假天數的計算,有請一上午假的為0.5天。
不夠很坑的是每個日期都要查詢資料庫,感覺很浪費時間。
原則:
1.節假日存放在資料庫中
實現步驟:
1.迴圈每個日期
2.判斷每個日期是否為節假日或者為週末
3.若不是節假日和週末,天數+1
程式碼:
public double calLeaveDays(Date startTime,Date endTime){ double leaveDays = 0; //從startTime開始迴圈,若該日期不是節假日或者不是週六日則請假天數+1 Date flag = startTime;//設定迴圈開始日期 Calendar cal = Calendar.getInstance(); //迴圈遍歷每個日期 while(flag.compareTo(endTime)!=1){ cal.setTime(flag); //判斷是否為週六日 int week = cal.get(Calendar.DAY_OF_WEEK) - 1; if(week == 0 || week == 6){//0為週日,6為週六 //跳出迴圈進入下一個日期 cal.add(Calendar.DAY_OF_MONTH, +1); flag = cal.getTime(); continue; } //判斷是否為節假日 try{ //從資料庫查詢該日期是否在節假日中 /*這裡為資料庫操作*/ /*傳入該日期flag,使用sql語句判斷flag是否between節假日開始日期and節假日結束日期*/ /*count為從資料庫查出的行數*/ if (count > 0){ //跳出迴圈進入下一個日期 cal.add(Calendar.DAY_OF_MONTH, +1); flag = cal.getTime(); continue; } }catch (Exception e){ e.printStackTrace(); } //不是節假日或者週末,天數+1 leaveDays = leaveDays + 1; //日期往後加一天 cal.add(Calendar.DAY_OF_MONTH, +1); flag = cal.getTime(); } return leaveDays; }