我也参考过其他的方案,
提供一个代码简洁的方案,具体性能没有测试过,
经过测试,跨年也可以正确计算截止日期;
/**
* 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期
* @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 星期一