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 星期五