根据开始时间和工作日天数算结束日期(排除节假日)

xingxing414 2021-03-05 02:51:46
参数:字符串类型的开始时间(如2020-03-05)和int类型的工作日天数
返回值:结束日期
数据库中存储了节假日信息
CREATE TABLE `tpm_holiday` (
`id` varchar(36) NOT NULL COMMENT '主键',
`time` datetime DEFAULT NULL COMMENT '日期',
`type` varchar(1) DEFAULT NULL COMMENT '类型'
PRIMARY KEY (`id`)
)
类型分为两种(1代表是节假日/调休;2代表是工作日)
周六周日默认为休息日,
当周一到周五有节假日或调休的情况就将日期存进数据库;当周六或周日调整为工作日的情况就将日期存进数据库
如有哪位大佬能够解决的话,java或js都可,非常感谢!
...全文
885 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2021-03-12
  • 打赏
  • 举报
回复
楼主的程序没问题啊!
rumlee 2021-03-05
  • 打赏
  • 举报
回复


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class TestGzr {
	static DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

	public static String jsrq(String startDate, int days, Map<String, Integer> map) {
		Date date = null;
		try {
			date = df.parse(startDate);
		} catch (ParseException e) {
		}

		int i = 0;
		while (i < days) {
			// 获取日期是工作日还是假日
			int type = getDayType(date, map);

			if (type == 2) {
				// 如果是工作日
				i++;
			}
			if (i == days) {
				break;
			}
			// 将日期往后延1天
			Calendar c = Calendar.getInstance();
			c.setTime(date);
			c.add(Calendar.DATE, 1);
			date = c.getTime();

		}

		return df.format(date);
	}

	/**
	 * 判断某个日期是工作日还是假日
	 * 
	 * @param date
	 * @param map
	 * @return 假日返回1,工作日返回2
	 */
	public static int getDayType(Date date, Map<String, Integer> map) {
		// 如果存在map中,则直接返回map中的数字
		if (map.containsKey(df.format(date))) {
			return map.get(df.format(date));
		}
		// 判断是周几
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int day = c.get(Calendar.DAY_OF_WEEK);
		if (day == 1 || day == 7) {
			return 1;
		} else {
			return 2;
		}
	}

	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		// 将数据库中的数据取出放入map中,key为日期,int为type
		// 如果数据库中数据量非常多,可以根据开始日期和后延工作日按照规则取部分数据
		map.put("2021-02-07", 2);
		map.put("2021-02-11", 1);
		map.put("2021-02-12", 1);
		map.put("2021-02-15", 1);
		map.put("2021-02-16", 1);
		map.put("2021-02-17", 1);
		map.put("2021-02-20", 2);
		
		System.out.println(jsrq("2021-02-01", 3, map));
		System.out.println(jsrq("2021-02-01", 6, map));
		System.out.println(jsrq("2021-02-01", 7, map));
		System.out.println(jsrq("2021-02-01", 10, map));
		System.out.println(jsrq("2021-02-01", 15, map));
	}
}

结果: 2021-02-03 2021-02-07 2021-02-08 2021-02-18 2021-02-24

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧