获取两个日期之间工作日天数,去除节假日和双休

  1. /**   
  2.  * <p>Title: main </P>  
  3.  * <p>Description: TODO </P>  
  4.  * @param args  
  5.  * return void    返回类型   
  6.  * throws   
  7.  * date 2014-11-24 上午09:11:47  
  8.  */  
  9. public static void main(String[] args) {  
  10.     try {  
  11.           
  12.         DateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
  13.         Calendar ca = Calendar.getInstance();  
  14.         Date d = df.parse("2014-11-04");  
  15.         ca.setTime(d);//设置当前时间  
  16.           
  17.         CalendarTest ct = new CalendarTest();  
  18.         ct.initHolidayList("2014-11-06");//初始节假日  
  19.         ct.initHolidayList("2014-11-07");//初始节假日  
  20.         ct.initHolidayList("2014-11-03");//初始节假日  
  21.           
  22.         Calendar c = ct.addDateByWorkDay(ca,5);  
  23.         System.out.println(df.format(c.getTime()));  
  24.           
  25.     } catch ( Exception e) {  
  26.         // TODO: handle exception  
  27.         System.out.println(e.getClass());  
  28.         e.printStackTrace();  
  29.     }  
  30.       
  31. }  
  32.   
  33.  private static List<Calendar> holidayList = new ArrayList<Calendar>();  //节假日列表  
  34.    
  35.  /**  
  36.   *   
  37.   * <p>Title: addDateByWorkDay </P>  
  38.   * <p>Description: TODO  计算相加day天,并且排除节假日和周末后的日期</P>  
  39.   * @param calendar  当前的日期  
  40.   * @param day  相加天数  
  41.   * @return     
  42.   * return Calendar    返回类型   返回相加day天,并且排除节假日和周末后的日期  
  43.   * throws   
  44.   * date 2014-11-24 上午10:32:55  
  45.   */  
  46.  public Calendar addDateByWorkDay(Calendar calendar,int day){  
  47.        
  48.      try {  
  49.         for (int i = 0; i < day; i++) {  
  50.               
  51.              calendar.add(Calendar.DAY_OF_MONTH, 1);  
  52.                
  53.              if(checkHoliday(calendar)){  
  54.                  i--;  
  55.              }  
  56.         }  
  57.         return calendar;  
  58.           
  59.        
  60.     } catch (Exception e) {  
  61.         e.printStackTrace();  
  62.     }  
  63.     return calendar;  
  64.  }  
  65.    
  66.  /**  
  67.   *   
  68.   * <p>Title: checkHoliday </P>  
  69.   * <p>Description: TODO 验证日期是否是节假日</P>  
  70.   * @param calendar  传入需要验证的日期  
  71.   * @return   
  72.   * return boolean    返回类型  返回true是节假日,返回false不是节假日  
  73.   * throws   
  74.   * date 2014-11-24 上午10:13:07  
  75.   */  
  76.  public boolean checkHoliday(Calendar calendar) throws Exception{  
  77.        
  78.      //判断日期是否是周六周日  
  79.      if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ||   
  80.              calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){  
  81.          return true;  
  82.      }  
  83.      //判断日期是否是节假日  
  84.      for (Calendar ca : holidayList) {  
  85.         if(ca.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) &&  
  86.                 ca.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)&&  
  87.                 ca.get(Calendar.YEAR) == calendar.get(Calendar.YEAR)){  
  88.             return true;  
  89.         }  
  90.     }  
  91.         
  92.      return false;  
  93.  }  
  94.    
  95.  /**  
  96.   *   
  97.   * <p>Title: initHolidayList </P>  
  98.   * <p>Description: TODO  把所有节假日放入list</P>  
  99.   * @param date  从数据库查 查出来的格式2014-05-09  
  100.   * return void    返回类型   
  101.   * throws   
  102.   * date 2014-11-24 上午10:11:35  
  103.   */  
  104. public void initHolidayList( String date){  
  105.       
  106.         String [] da = date.split("-");  
  107.           
  108.         Calendar calendar = Calendar.getInstance();  
  109.         calendar.set(Calendar.YEAR, Integer.valueOf(da[0]));  
  110.         calendar.set(Calendar.MONTH, Integer.valueOf(da[1])-1);//月份比正常小1,0代表一月  
  111.         calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(da[2]));  
  112.         holidayList.add(calendar);  
  113. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值