由于工作需要:加減工作日得到具體的日期和計(jì)算兩個(gè)日期之間工作日兩種需求(當(dāng)然參考了其他作者的內(nèi)容,在這里自己做了重新處理):
首先手動(dòng)錄入今年或最近幾年的工作日和調(diào)休日,先在Excel中錄入,格式如下(寫END為了補(bǔ)齊第三列,后面加載時(shí)候要用):| 節(jié)假日 | 法定調(diào)休工作日 | END |
|---|---|---|
| 2017/1/28 | END | |
| 2017/1/29 | 2017/1/14 | END |
| 2017/1/30 | 2017/1/15 | END |
2. 把除了表頭“節(jié)假日”“法定調(diào)休工作日”“END”的其他三列拷貝到一個(gè)新的sheet中; 3. 點(diǎn)擊excel中的另存為:文本文件(制表符分割)也就是.txt文件; 4. 加載生成的.txt文件; 5. 加載一次后存入static靜態(tài)代碼塊中; 6. 構(gòu)建了getWorkDayNum(String dateStartStr,String dateEndStr)方法和getWorkDay(String dateStartStr,int n) 方法分別獲取兩個(gè)日期之間的工作日和距離dateStartStr有n個(gè)工作日的日期,如果n為負(fù)數(shù)則再加判斷即可,后面也寫了; 7. 具體代碼如下:(當(dāng)然要在啟動(dòng)的時(shí)候加載讀取txt的方法,在grails中是這樣寫的,如HolidayWorkdayUtil.initialize(grailsapplication.config.workday.holiday.file as String))
如果輸入的天數(shù)是負(fù)數(shù)則加判斷:
HolidayWorkdayUtil h=new HolidayWorkdayUtil();if(n<0){ Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.set(Calendar.YEAR, c.get(Calendar.YEAR) - 1);//如果為負(fù)數(shù),先把時(shí)間調(diào)回到一年前開始迭代 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); }新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注