欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-17 21:24:42
...
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 星期五