由于工作需要:加減工作日得到具體的日期和計算兩個日期之間工作日兩種需求(當然參考了其他作者的內容,在這里自己做了重新處理):
首先手動錄入今年或最近幾年的工作日和調休日,先在Excel中錄入,格式如下(寫END為了補齊第三列,后面加載時候要用):節假日 | 法定調休工作日 | END |
---|---|---|
2017/1/28 | END | |
2017/1/29 | 2017/1/14 | END |
2017/1/30 | 2017/1/15 | END |
2. 把除了表頭“節假日”“法定調休工作日”“END”的其他三列拷貝到一個新的sheet中; 3. 點擊excel中的另存為:文本文件(制表符分割)也就是.txt文件; 4. 加載生成的.txt文件; 5. 加載一次后存入static靜態代碼塊中; 6. 構建了getWorkDayNum(String dateStartStr,String dateEndStr)
方法和getWorkDay(String dateStartStr,int n)
方法分別獲取兩個日期之間的工作日和距離dateStartStr有n個工作日的日期,如果n為負數則再加判斷即可,后面也寫了; 7. 具體代碼如下:(當然要在啟動的時候加載讀取txt的方法,在grails中是這樣寫的,如HolidayWorkdayUtil.initialize(grailsapplication.config.workday.holiday.file as String)
)
如果輸入的天數是負數則加判斷:
HolidayWorkdayUtil h=new HolidayWorkdayUtil();if(n<0){ Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.set(Calendar.YEAR, c.get(Calendar.YEAR) - 1);//如果為負數,先把時間調回到一年前開始迭代 def nn=-n; //println nn; for(int i=0;i<=365;i++){ c.add(5, 1); //表示天加一 startDateStr=Util.dateParser1.format(c.getTime()); dayNum = h.getWorkDayNum(startDateStr,todayStr); //println workday if(dayNum==nn){ break; } } workday=startDateStr; }else{ workday = h.getWorkDay(todayStr,n); }新聞熱點
疑難解答