1. 程式人生 > >java計算兩個日期之前的天數(工作日),排除節假日和週末

java計算兩個日期之前的天數(工作日),排除節假日和週末

如題所說,計算兩個日期之前的天數,排除節假日和週末。這裡天數的型別為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;
}