我也参考过其他的方案,
提供一个代码简洁的方案,具体性能没有测试过,
经过测试,跨年也可以正确计算截止日期;
/** * 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期 * @param startDate 开始日期 * @param workDay 工作日天数(周一到周五) * @return Date类型 * @createTime 2014-2-14 * @author Sunqinbo */ public static Date getWorkDay(Date startDate, int workDay, int hour, int second, int minute) { Calendar c1 = Calendar.getInstance(); c1.setTime(startDate); for (int i = 0; i < workDay; i++) { // 判断当天是否为周末,如果是周末加1 if (Calendar.SATURDAY == c1.get(Calendar.SATURDAY) || Calendar.SUNDAY == c1.get(Calendar.SUNDAY)) { workDay = workDay + 1; c1.set(Calendar.DATE, c1.get(Calendar.DATE) + 1); continue; } c1.set(Calendar.DATE, c1.get(Calendar.DATE) + 1); // 当天数加1 判断是否为周末 如果是周末加1 if (Calendar.SATURDAY == c1.get(Calendar.SATURDAY) || Calendar.SUNDAY == c1.get(Calendar.SUNDAY)) { workDay = workDay + 1; c1.set(Calendar.DATE, c1.get(Calendar.DATE) + 1); continue; } } // c1.set(Calendar.HOUR_OF_DAY, hour); // c1.set(Calendar.SECOND, second); // c1.set(Calendar.MINUTE, minute); // SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // System.out.println(df.format(c1.getTime()) + " " + getWeekOfDate(c1.getTime())); return c1.getTime(); } /** * 根据日期,获取星期几 * @param dt * @return String类型 * @createTime 2014-2-14 * @author Sunqinbo */ public static String getWeekOfDate(Date dt) { String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; Calendar cal = Calendar.getInstance(); cal.setTime(dt); int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) w = 0; return weekDays[w]; }
测试 夸年日期
public static void main(String[] args) throws ParseException { String source = "2014-12-30 10:45:06";// 开始时间 int workDay = 10;// 工作日 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); df.parse(source); for (int i = 0; i < workDay; i++) { System.out.print("工作日:" + i + "天, "); getWorkDay(df.parse(source), i); } }
工作日:0天, 2014-12-30 10:45:06 星期二 工作日:1天, 2014-12-31 10:45:06 星期三 工作日:2天, 2015-01-01 10:45:06 星期四 工作日:3天, 2015-01-02 10:45:06 星期五 工作日:4天, 2015-01-05 10:45:06 星期一 工作日:5天, 2015-01-06 10:45:06 星期二 工作日:6天, 2015-01-07 10:45:06 星期三 工作日:7天, 2015-01-08 10:45:06 星期四 工作日:8天, 2015-01-09 10:45:06 星期五 工作日:9天, 2015-01-12 10:45:06 星期一