java 排除法定节假日以及正常周六日,计算两个Date相差的小时数

项目组有一个需求,计算两个Date类型参数,相差的小时数。业务上有一些特殊的用途,可能用于绩效考核的目的吧…

如果不排除节假日周六日的话,处理起来非常easy,是个程序员都能写出来,但是…如果要排除法定节假日,排除正常周六日,同时特殊支持法定的工作日(有一些周六日,国家强制正常上班),那么处理起来就非常麻烦,我耗时大概1天半的时间,用基础的Date和Calendar实现,下面是具体的实现代码,要是有更好的实现,欢迎大家留言。

注意:项目组要求如果开始或者截止时间属于休息日,对应当天处理小时数为0。例如:2018-2-14 8:00:00 到2018-2-15 10:00:00,2-15是国家规定放假时间,不算时间,只算2-14号的16个小时。可以根据你们自己项目组的需求,灵活的修改哦

/**
	 * 判断输入的年月日日期是否属于休息日
	 * @param date  需要判断的日期(年月日)
	 * @param lawHolidayList  国家规定放假的时间
	 * @param lawWorkList  国家规定的工作日期
	 * @return
	 */
	public static boolean isDayOff(Date date,List<Date> lawHolidayList,List<Date> lawWorkList){

		for(Date date1 :lawHolidayList){
			int c = date.compareTo(date1);
			if(c==0){
				//休息日
				return true;
			}
		}

		for(Date date1 :lawWorkList){
			int c = date.compareTo(date1);
			if(c==0){
				//工作日
				return false;
			}
		}

		return isZhouLiuZhouRiDate(date);
    }


	/**
	 * 判断时间是否属于正常周六日
	 * @param date
	 * @return
	 */
	public static boolean isZhouLiuZhouRiDate(Date date){

		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		int week = cal.get(Calendar.DAY_OF_WEEK) - 1;
		//是否属于周六日
		boolean flag = (week == 0 || week == 6);
		return flag;

	}

	/**
	 * 排除国家法定的休息日、正常周六日,计算两个时间相差多少小时数(休息日当天时间为零处理)
	 * @param startTimeYYYYMMDDHHMMSS  年月日时分秒
	 * @param endTimeYYYYMMDDHHMMSS  年月日时分秒
	 * @param lawHolid
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值