工作日计算方法 工作日加减
程序员文章站
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 星期五
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 星期五