请假功能中计算有效工作日
来源:互联网 发布:网络技术部工作流程 编辑:程序博客网 时间:2024/05/21 08:59
判断请假日期中有效工作日:排除周末及法定节日
1) 引用方法
String timeDates[] = request.getParameter("timeDate").split(","); String timeDate=timeDates[0]+"-"+timeDates[1]+"-"+timeDates[2]; String timeDate2=timeDates[3]+"-"+timeDates[4]+"-"+timeDates[5]; int times= dayutils.weekDayCount(timeDate, timeDate2);//weekDayCoun方法支持date类型和String类型的日期传入
2)weekDayCount方法实现
首先通过配置文件配置2017年周末情况
附:weekDayConfig.xml
<?xml version="1.0" encoding="utf-8"?><root> <validation> <list> <!-- 非补报报文的交易时间必须在5个工作日内 --> <key>EXCH_DATE_CHECK</key> <value>5</value> </list> <list> <!-- 回执处理必须在5个工作日内 --> <key>REC_DATE_CHECK</key> <value>5</value> </list> </validation> <!-- 工作日是假期的情况 --> <weekday> <holiday_list> <date>2017-01-02</date> <date>2017-01-27</date> <date>2017-01-30</date> <date>2017-01-31</date> <date>2017-02-01</date> <date>2017-02-02</date> <date>2017-04-03</date> <date>2017-04-04</date> <date>2017-05-01</date> <date>2017-05-29</date> <date>2017-05-30</date> <date>2017-10-02</date> <date>2017-10-03</date> <date>2017-10-04</date> <date>2017-10-05</date> <date>2017-10-06</date> </holiday_list> </weekday> <!-- 周末是工作日的情况 --> <weekend> <weekday_list> <date>2017-01-22</date> <date>2017-02-04</date> <date>2017-04-01</date> <date>2017-05-27</date> <date>2017-09-30</date> </weekday_list> </weekend></root>
附:WeekdayVO.java
package com.buss.common;import java.util.List;import java.util.Map;public class WeekdayVO { private Map validateMap;//工作日校验 private List weekendIsWeekdayList;//周末是工作日的列表 private List weekdayIsHolidayList;//工作日是假期的列表 public Map getValidateMap() { return validateMap; } public void setValidateMap(Map validateMap) { this.validateMap = validateMap; } public List getWeekendIsWeekdayList() { return weekendIsWeekdayList; } public void setWeekendIsWeekdayList(List weekendIsWeekdayList) { this.weekendIsWeekdayList = weekendIsWeekdayList; } public List getWeekdayIsHolidayList() { return weekdayIsHolidayList; } public void setWeekdayIsHolidayList(List weekdayIsHolidayList) { this.weekdayIsHolidayList = weekdayIsHolidayList; }}
附:WeekDayUtil.java
package com.buss.common;import java.io.File;import java.net.URL;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class WeekDayUtil { private final static String BASE_PATH = "/classes/resources/"; /** * @title 获取工作日相关配置 * @author chanson * @return */ public WeekdayVO getWeekdayConfig(){ Map validateMap = new HashMap(); List weekendIsWeekdayList = new ArrayList(); List weekdayIsHolidayList = new ArrayList(); //web相对路径+xml文件路径 //1、放到web工程 File f = new File("WEB-INF/classes/weekDayConfig.xml"); //File f = new File("D:/apache-tomcat-7.0.33/apache-tomcat-7.0.33/webapps/lzhrms/WEB-INF/classes/weekDayConfig.xml"); String path=f.getAbsolutePath().toString(); String path1[]=path.split("bin"); path1[0]=path1[0].replaceAll("\\\\","/"); String p=path1[0]+"webapps/lzhrms/WEB-INF/classes/weekDayConfig.xml"; f = new File(p); //2、application测试 //String file = "D:/workspace/test/src/config/weekday.xml"; //File f = new File(file); SAXReader reader = new SAXReader(); try{ Document doc = reader.read(f); Element root = doc.getRootElement(); //=================================== //工作日校验相关属性 //=================================== Element validationElement = root.element("validation"); Element listElement; for(Iterator i = validationElement.elementIterator("list");i.hasNext();){ listElement = (Element)i.next(); validateMap.put((String) listElement.elementText("key"), (String)listElement.elementText("value")); } //=================================== //工作日是假期的列表 //=================================== Element weekdayElement = root.element("weekday"); Element holidayListElement = weekdayElement.element("holiday_list"); Element holidayValueElement = null; for(Iterator i = holidayListElement.elementIterator("date");i.hasNext();){ holidayValueElement = (Element)i.next(); weekdayIsHolidayList.add((String)holidayValueElement.getText()); } //=================================== //周末是工作日的列表 //=================================== Element weekendElement = root.element("weekend"); Element weekdayListElement = weekendElement.element("weekday_list"); Element weekdayValueElement = null; for(Iterator i = weekdayListElement.elementIterator("date");i.hasNext();){ weekdayValueElement = (Element)i.next(); weekendIsWeekdayList.add((String)weekdayValueElement.getText()); } WeekdayVO vo = new WeekdayVO(); vo.setValidateMap(validateMap); vo.setWeekdayIsHolidayList(weekdayIsHolidayList); vo.setWeekendIsWeekdayList(weekendIsWeekdayList); return vo; }catch(Exception e){ e.printStackTrace(); return null; } } /** * @title 判断是否为工作日 * @detail 工作日计算: * 1、正常工作日,并且为非假期 * 2、周末被调整成工作日 * @author yy * @param date 日期 * @return 是工作日返回true,非工作日返回false */ public static boolean isWeekday(Date time){ WeekDayUtil util = new WeekDayUtil(); WeekdayVO vo = util.getWeekdayConfig(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); c.setTime(time); if (c.get(GregorianCalendar.DAY_OF_WEEK) != GregorianCalendar.SATURDAY && c.get(GregorianCalendar.DAY_OF_WEEK) != GregorianCalendar.SUNDAY){ //平时 return !vo.getWeekdayIsHolidayList().contains(sdf.format(time)); }else{ //周末 return vo.getWeekendIsWeekdayList().contains(sdf.format(time)); } } /** * @title 判断是否为工作日 * @detail 工作日计算: * 1、正常工作日,并且为非假期 * 2、周末被调整成工作日 * @author yy * @param String 日期 * @return 是工作日返回true,非工作日返回false */ public static boolean isWeekday(String timeStr){ WeekDayUtil util = new WeekDayUtil(); WeekdayVO vo = util.getWeekdayConfig(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); boolean weekday=false; try { c.setTime(sdf.parse(timeStr)); if (c.get(GregorianCalendar.DAY_OF_WEEK) != GregorianCalendar.SATURDAY && c.get(GregorianCalendar.DAY_OF_WEEK) != GregorianCalendar.SUNDAY){ //平时 weekday= !vo.getWeekdayIsHolidayList().contains(timeStr); }else{ //周末 weekday= vo.getWeekendIsWeekdayList().contains(timeStr); } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return weekday; } /** * @title 获取当前月工作日天数 * @detail 工作日计算: * 1、获取月份总天数 * 2、循环每天,判断是否为工作日 * @author yy * @param String 日期月份(2017-01) * @return int 天数 */ public static int monthWeekDaySum(String timeStr){ int count = 0; int month = Integer.parseInt(timeStr.substring(5, 7)); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, Integer.parseInt(timeStr.substring(0, 4))); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DATE, 1); while(c.get(Calendar.MONTH) < month){ if(isWeekday(c.getTime())){ count++; } c.add(Calendar.DATE, 1); } return count; } /** * @title 获取当前月工作日天数 * @detail 工作日计算: * 1、获取月份总天数 * 2、循环每天,判断是否为工作日 * 3、判断时使用工作日和XML两种方式结合 * @author yy * @param Date 日期月份 * @return int 天数 */ public static int monthWeekDaySum(Date time){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); return monthWeekDaySum(sdf.format(time)); } /** * @title 计算两个时间内工作日天数 * @detail 工作日计算 (包含开始时间以及结束时间) * @author yy * @param Date 开始时间 Date 结束时间 * @return int 天数 */ public static int weekDayCount(Date startTime,Date endTime){ Calendar sc = Calendar.getInstance(); sc.setTime(startTime); Calendar ec = Calendar.getInstance(); ec.setTime(endTime); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); int count=0; while(sc.getTime().before(ec.getTime())){ if(isWeekday(sc.getTime())){ count++; } sc.add(Calendar.DATE, 1); } if(isWeekday(sc.getTime())){ count++; } return count; } /** * @title 计算两个时间内工作日天数 * @detail 工作日计算 (包含开始时间以及结束时间) * @author yy * @param String 开始时间 String 结束时间 格式:yyyy-MM-dd * @return int 天数 */ public static int weekDayCount(String startTime,String endTime){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date start; Date end; int count=0; try { start=sdf.parse(startTime); end = sdf.parse(endTime); count=weekDayCount(start,end); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return count; } /** * 判断当前日期是星期几 * * @param pTime 修要判断的时间 * @return dayForWeek 判断结果 * @Exception 发生异常 */ public static int dayForWeek(String pTime) throws Exception { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); c.setTime(format.parse(pTime)); int dayForWeek = 0; if(c.get(Calendar.DAY_OF_WEEK) == 1){ dayForWeek = 7; }else{ dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1; } return dayForWeek; } public static void main(String[] args) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(weekDayCount(sdf.parse("2017-10-01"),sdf.parse("2017-10-10")));// System.out.println(weekDayCount("2017-10-01","2017-10-10"));// System.out.println(dayForWeek("2017-06-03"));// System.out.println(isWeekday("2017-10-04"));// System.out.println(monthWeekDaySum(new Date())); }}
阅读全文
0 0
- 请假功能中计算有效工作日
- 计算有效工作日(跳过节假日)
- 计算有效工作日(跳过节假日)
- 工作日计算
- 工作日计算
- 计算工作日
- SQL数据库中工作日如何计算(转)
- 计算工作中请假时间,不计算周六周日
- 在Access中计算两个日期之间的工作日天数
- js中 计算两个日期间的工作日
- 转贴:工作日的计算
- execl 计算工作日
- 计算工作日函数
- SQL计算工作日
- 只计算工作日 java
- 只计算工作日2
- Execl计算工作日
- Java 政府 工作日计算
- HIbernate和Mybatis的区别和优劣势
- Angular核心服务$http
- Pixhawk之姿态解算篇(5)_ECF/EKF/GD介绍
- Shell学习笔记---循环
- struts2拦截器添加及xss攻击的处理
- 请假功能中计算有效工作日
- Android 基本动画详解
- File 重命名和删除功能
- 文章标题
- [附中OJ 1772] 0/1背包问题之2
- iOS之拷贝
- JFrame在桌面居中显示
- 搭建 maven 分布式开发项目的步骤
- PE结构->【资源表】Resources Table