由于工作需要:加减工作日得到具体的日期和计算两个日期之间工作日两种需求(当然参考了其他作者的内容,在这里自己做了重新处理):
首先手动录入今年或最近几年的工作日和调休日,先在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); }新闻热点
疑难解答