package com.jc.servlet; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; public class Test { //计算工作日实际日期 @org.junit.Test public void test() { try { DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar ca = Calendar.getInstance(); Date d = df.parse("2016-12-8"); ca.setTime(d);//设置当前时间 initHolidayList("2014-11-06");//初始节假日 initHolidayList("2014-11-07");//初始节假日 initHolidayList("2014-11-03");//初始节假日 Calendar c = addDateByWorkDay(ca,3); System.out.println(df.format(c.getTime())); } catch ( Exception e) { // TODO: handle exception System.out.println(e.getClass()); e.printStackTrace(); } } @org.junit.Test public void test2 () throws Exception{ String sdate = "2016-12-08"; String edate = "2016-12-13"; long day = getDaySub(sdate,edate); System.out.println(day); DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar ca = Calendar.getInstance(); Date d = df.parse(sdate); ca.setTime(d);//设置当前时间 long gzr = endDay_startDay(ca,day); System.out.println(gzr); } /** * 两个日期相减 * @param beginDateStr * @param endDateStr * @return */ public static long getDaySub(String beginDateStr,String endDateStr){ long day=0; SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd"); Date beginDate; Date endDate; try{ beginDate = format.parse(beginDateStr); endDate= format.parse(endDateStr); day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000); //System.out.println("相隔的天数="+day); } catch (ParseException e){ // TODO 自动生成 catch 块 e.printStackTrace(); } return day+1; } /** * 自定义节假日 */ private static List<Calendar> holidayList = new ArrayList<Calendar>(); //节假日列表 /** * 计算一个日期后的多少天有几个休息日,并用使用天数减去工作日获得实际工作日。 * @param calendar * @param day * @return * @throws Exception */ public static long endDay_startDay(Calendar calendar,long day) throws Exception{ long result = 0; for (int i=0; i<day; i++){ calendar.add(Calendar.DAY_OF_MONTH, 1); if(checkHoliday(calendar)){ result++; } } return day-result-1; } /** * * <p>Title: addDateByWorkDay </P> * <p>Description: TODO 计算相加day天,并且排除节假日和周末后的日期</P> * @param calendar 当前的日期 * @param day 相加天数 * @return * return Calendar 返回类型 返回相加day天,并且排除节假日和周末后的日期 * throws * date 2014-11-24 上午10:32:55 */ public static Calendar addDateByWorkDay(Calendar calendar,int day){ try { for (int i = 0; i < day; i++) { calendar.add(Calendar.DAY_OF_MONTH, 1); if(checkHoliday(calendar)){ i--; } } return calendar; } catch (Exception e) { e.printStackTrace(); } return calendar; } /** * * @param calendar * @param day * @return */ public Calendar addDateDay(Calendar calendar,int day){ try { for (int i = 0; i < day; i++) { calendar.add(Calendar.DAY_OF_MONTH, 1); if(checkHoliday(calendar)){ i++; } } return calendar; } catch (Exception e) { e.printStackTrace(); } return calendar; } /** * * <p>Title: checkHoliday </P> * <p>Description: TODO 验证日期是否是节假日</P> * @param calendar 传入需要验证的日期 * @return * return boolean 返回类型 返回true是节假日,返回false不是节假日 * throws * date 2014-11-24 上午10:13:07 */ public static boolean checkHoliday(Calendar calendar) throws Exception{ //判断日期是否是周六周日 if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){ return true; } //判断日期是否是节假日 for (Calendar ca : holidayList) { if(ca.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) && ca.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)&& ca.get(Calendar.YEAR) == calendar.get(Calendar.YEAR)){ return true; } } return false; } /** * * <p>Title: initHolidayList </P> * <p>Description: TODO 把所有节假日放入list</P> * @param date 从数据库查 查出来的格式2014-05-09 * return void 返回类型 * throws * date 2014-11-24 上午10:11:35 */ public static void initHolidayList( String date){ String [] da = date.split("-"); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, Integer.valueOf(da[0])); calendar.set(Calendar.MONTH, Integer.valueOf(da[1])-1);//月份比正常小1,0代表一月 calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(da[2])); holidayList.add(calendar); } /** * 判断星期六与星期日 * @param bDate * @param aDate * @return * @throws ParseException */ public boolean isSunAndSatur(String bDate) throws ParseException{ DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); //String bDate = "2016-12-19"; //String aDate = "2016-12-30"; Date bdate = format1.parse(bDate); Calendar cal = Calendar.getInstance(); cal.setTime(bdate); if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){ System.out.print("ok"); return true; }else { System.out.print("no"); return false; } } }
Java 政府 工作日计算
猜你喜欢
转载自aa80303857.iteye.com/blog/2346209
今日推荐
周排行