工作日计算方法 工作日加减

import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.apache.commons.lang.time.DateUtils;

public class App {
	static SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd E");
    /**
     * 工作日计算类(工作日不包括周末和周六)
     * @param startDate:开始日期
     * @param addDay:需要增加的工作日数量
     * @param today:是否包含今天
     * @return java.util.Date
     */
    public static java.util.Date addWorkdays(java.util.Date startDate, int addDay,boolean today) {
    	if(today){
    		addDay--;
    	}
		int currentDayOfWeekInMonth = 1;
		int jumpDay = 0;
		int weekendCount = 0;
		java.util.Calendar c = new java.util.GregorianCalendar();
		c.setTime(startDate);
		if(c.get(java.util.Calendar.DAY_OF_WEEK) == 1) {
			jumpDay+=1;
			currentDayOfWeekInMonth = 1;
		}else if(c.get(java.util.Calendar.DAY_OF_WEEK) == 7) {
			jumpDay += 2;
			currentDayOfWeekInMonth = 1;
		}else {
			currentDayOfWeekInMonth = c.get(java.util.Calendar.DAY_OF_WEEK) - 1;
		}
		if(addDay <= (5 - currentDayOfWeekInMonth)) {
			weekendCount = 0;
		}else {
			weekendCount = (addDay - ((5 - currentDayOfWeekInMonth) + 1))/5 + 1;
		}
		jumpDay += (addDay + weekendCount * 2);
		c.add(java.util.Calendar.DAY_OF_MONTH, jumpDay);
		return c.getTime();
	}
    /**
     * 
     */
	public static void main(String[]a) throws ParseException{
		int w=15;
		 java.util.Date nowDate=new SimpleDateFormat("yyyy-MM-01").parse("2014-02-01");
		for(int i=0;i<29;i++){
			 java.util.Date date=DateUtils.addDays(nowDate, i);
			 java.util.Date _Date=addWorkdays(date,w,true);
			System.out.println(simpleDateFormat.format(date)+"  "+w+" 工作日后是  "+simpleDateFormat.format(_Date));
		}
	}
}
  
运行结果:
2014-02-01 星期六  15 工作日后是  2014-02-21 星期五
2014-02-02 星期日  15 工作日后是  2014-02-21 星期五
2014-02-03 星期一  15 工作日后是  2014-02-21 星期五
2014-02-04 星期二  15 工作日后是  2014-02-24 星期一
2014-02-05 星期三  15 工作日后是  2014-02-25 星期二
2014-02-06 星期四  15 工作日后是  2014-02-26 星期三
2014-02-07 星期五  15 工作日后是  2014-02-27 星期四
2014-02-08 星期六  15 工作日后是  2014-02-28 星期五
2014-02-09 星期日  15 工作日后是  2014-02-28 星期五
2014-02-10 星期一  15 工作日后是  2014-02-28 星期五
2014-02-11 星期二  15 工作日后是  2014-03-03 星期一
2014-02-12 星期三  15 工作日后是  2014-03-04 星期二
2014-02-13 星期四  15 工作日后是  2014-03-05 星期三
2014-02-14 星期五  15 工作日后是  2014-03-06 星期四
2014-02-15 星期六  15 工作日后是  2014-03-07 星期五
2014-02-16 星期日  15 工作日后是  2014-03-07 星期五
2014-02-17 星期一  15 工作日后是  2014-03-07 星期五
2014-02-18 星期二  15 工作日后是  2014-03-10 星期一
2014-02-19 星期三  15 工作日后是  2014-03-11 星期二
2014-02-20 星期四  15 工作日后是  2014-03-12 星期三
2014-02-21 星期五  15 工作日后是  2014-03-13 星期四
2014-02-22 星期六  15 工作日后是  2014-03-14 星期五
2014-02-23 星期日  15 工作日后是  2014-03-14 星期五
2014-02-24 星期一  15 工作日后是  2014-03-14 星期五
2014-02-25 星期二  15 工作日后是  2014-03-17 星期一
2014-02-26 星期三  15 工作日后是  2014-03-18 星期二
2014-02-27 星期四  15 工作日后是  2014-03-19 星期三
2014-02-28 星期五  15 工作日后是  2014-03-20 星期四
2014-03-01 星期六  15 工作日后是  2014-03-21 星期五
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值