您的位置:首页 > 编程语言 > Java开发

java 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期

2014-02-14 10:33 801 查看
我也参考过其他的方案,

提供一个代码简洁的方案,具体性能没有测试过,

经过测试,跨年也可以正确计算截止日期;

/**
	 * 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期
	 * @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 星期一
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: