计算有效时长的截止工作时间
最近做项目有个需求,计算有效时长的结束时间,这个结束时间点必须落在工作时间段之内
废话不多说,上代码:
这里解释一下:getduration是主方法:传递四个参数,第一个当前时间,第二个有效时长,第三个第四个是上下班时间。
三四两个参数不传默认是从0:00~24:00.本程序调用了全国节假日的接口。实现思路大体如下,构建一个年月日日期字符串,这个字符串是查询全国节假日接口的入参,firstTimeDay 上班时间,lastTimeDay下班时间,当为节假日的时候,当前时间变为次日的上班时间,递归调用getduration方法,当为上班日的时候,当前时间+有效时长 大于 下班时间的情况,当前时间变为次日的上班时间,有效时长=有效时长+下班时间-当前时间,再次递归调用;当前时间+有效时长小于下班时间。返回结果,结果为当前时间+有效时长,程序至此结束。这里还有一点没有实现,就是中午的休息时间没有剔除,留给聪明的你去改进完善吧。
package cn.vpclub.mcs.tyanhelp.admin.util; import cn.vpclub.moses.utils.common.DateUtil; import cn.vpclub.moses.utils.common.JsonUtil; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * Created by dell on 2018/6/23. */ public class HolidayUtil {/** * 获取节假日信息 * * @param params length = 2 参数依次为,当前时间,时长,后面两个字段不传默认是从0:00~24:00;length == 4,当前开始时间,时长,工作日上班时间,工作日下班时间 * @return */ private static Long getduaration(Long... params) {if (null != params) {Date date = new Date(params[0]); String dateStr = DateUtil.formatDate(date, DateUtil.YEARMONTHDAY); Date firstTimeOfDay = DateUtil.getFirstTimeOfDay(date); Date lastTimeOfDay = DateUtil.getLastTimeOfDay(date); if (params.length == 2) { //开始时间,时长 } else if (params.length == 4) {//开始时间,时长,有效工作时间段 firstTimeOfDay = new Date(firstTimeOfDay.getTime() + params[2]); lastTimeOfDay = new Date(firstTimeOfDay.getTime() + params[3]-params[2]); }//前提必须是当前天是工作日 if (getHoliDay(dateStr)) {if (params[0] + params[1] <= lastTimeOfDay.getTime()) {return params[0] + params[1]; } else {params[1] = params[1] - lastTimeOfDay.getTime() + params[0]; params[0] = DateUtil.addDay(firstTimeOfDay,1).getTime(); return getduaration(params); }}else {params[0] = DateUtil.addDay(firstTimeOfDay,1).getTime(); return getduaration(params); }} else {return 0L; }}private static Boolean getHoliDay(String dateStr) {Boolean isResult = false; Map<String, String> map = new HashMap<>(); map.put("date", dateStr); try {Map holidayMap = JsonUtil.jsonToMap(HttpClientUtil.doGet("http://api.goseek.cn/Tools/holiday", map)); if (null != holidayMap && holidayMap.get("data").equals(0)) {isResult = true; }} catch (Exception e) {}return isResult; }public static void main(String[] args) {Date date = new Date(); Long duraTime = 8L * 3600 * 1000 * 6; Long startTime = 9L * 3600 * 1000; Long endTime = 17L * 3600 * 1000; Date endDate = new Date(getduaration(new Long[]{date.getTime(),duraTime,startTime,endTime})); System.out.println(date+"-"+endDate); } }
计算有效时长的截止工作时间相关推荐
- 【泛微表单】请假流程中计算请假时长(非系统自带考勤类型)
请假流程计算请假时长 按一天8小时计算,日期为浏览按钮日期字段,时间为单选下拉框: <script> var beginTimeId = {id: "field22286&quo ...
- java 计算有效时长,有一时间段不计算时长
java 计算有效时长,有一时间段不计算时长 计算时效性 计算 2020-08-07 10:10:23 到 2020-08-08 22:10:23 时间段内有多少小时,每天的01:00:00至06:0 ...
- Java计算请假时长(根据规则设置去除节假日、休息日、特殊日期)
首先选择的日期要判断是不是节假日: 这里是写了工具类获取全年的日期信息. dateUtils工具类 某年第一天可以直接拼接 yyyy-01-01 获取节假日方法: public class DateU ...
- 根据采样频率计算音频时长
基础知识: 采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数. 正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论(只有采样频率高于声音信号最高频率的两倍时, ...
- excel不显示0_【208期】根据身份证号计算退休年龄时长高亮提醒,EXCEL做到了
导读 应亲们要求,以后会多上实例,今天给大家分享一期关于EXCEL根据身份证号以及退休年龄,动态自动计算距离到期年限,以及高亮提醒的实战案例. 实例要求: 根据身份证号以及退休年龄,用excel公式自 ...
- 根据文件大小和属性计算音频时长,详解
可以根据一个 wav 文件的大小.采样频率和采样大小估算出一个 wav 文件的播放长度. 譬如 "Windows XP 启动.wav" 的文件长度是 424,644 字节, 它是 ...
- MySQL计算在线时长(超过2分钟未上传不在计算范围)
根据上传时间进行统计,每隔一分钟上传一次数据,超过2分钟也就是120秒没有数据上传的话就不纳入计算范围,统计SQL如下: select t.driverId,t.sumTime,t.countDate ...
- N103_考虑周末及法定上班和休假日计算工作日时长
import pandas as pd from chinese_calendar import is_workday # 构造测试数据 df = pd.DataFrame({'项目':['a', ' ...
- 活动时长计算尝试用Lambada 实现责任链的代码优化
文章目录 活动时长计算尝试用Lambada 实现责任链的代码优化 原流程 原代码 主控流程 计算标准费率时长子过程 电访和面访活动计算标准费率时长 路演活动计算标准费率时长 问卷活动计算标准费率时长 ...
最新文章
- hibernate映射(单向双向的一对多、多对一以及一对一、多对一(转)
- 软件研发中的N条原则
- winform 自适应屏幕分辨率具体操作和注意事项
- 什么事计算机事实性知识,《人工智能》复习要点
- 实验报告:抽象数据类型的表现和实现
- Java基础---File类,就是这么简单
- Linus送出圣诞礼物:发布Linux 4.20,超35万行代码
- [冲啊!!!!!]小白SLAM相关基础知识
- HTML:雪碧图、高度塌陷和序号选择器
- 运放做跟随器有什么要求
- 【转载】红外遥控HS0038B接法
- 小程序开发商可以在哪里接项目订单/有几种接单方式
- 初学者如何快速搭建一个属于自己的网站
- 在地化和本土化的区别_本地化和翻译的本质区别在哪里?
- linux内核空间和用户空间认识和区别
- Java岗大厂面试百日冲刺【Day52】— 数据库8 (日积月累,每日三题)
- visual c 2008 php,十步之遥顺利升级到Visual Studio 2008
- 【教学类-07-04】20221113《破译电话号码-加减法版+自制(PDF打印)》(大班主题《我要上小学》)
- 垂杨柳中学2021年高考成绩查询时间,实力入选!朝阳这几所学校上榜啦丨校园直通车(2021年第4期)...
- 文本框”输入关键字 “提示
热门文章
- 继 CentOS 后,红帽又惹“众怒”:限制访问 RHEL 代码,要“杀死”下游发行版?...
- python正则_Python 正则表达式(转义问题)
- 为什么需要全屋净水,喝的水干净不就可以了?
- 算法作业系列10——Unique Substrings in Wraparound String
- 2020 MIT6.s081 XV6操作系统调试
- 【邵老师】大前端爱前端学习课程初中高级课程全套
- 九校联考-DL24 凉心模拟 Day2T1 锻造 (forging)
- 朴素贝叶斯 php,PHP实现机器学习之朴素贝叶斯算法详解.pdf
- winaip文档服务器已停止工作,win7运行office?excel已停止工作,退出时崩溃
- 最实用的必备电脑软件