Java 政府 工作日计算

来源:互联网 发布:电脑软件开发培训中心 编辑:程序博客网 时间:2024/06/05 08:13
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.Testpublic 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.Testpublic 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;}}}

 

0 0
原创粉丝点击