想先获取当前时间,然后判断当前时间是否为周一到周五工作日的非工作日间(工作时间为8:30-17:00),C币不多。就大神帮忙
7条回答 默认 最新
关注 //根据开始结束时间计算工作小时数(开始结束时间是同一天) public static Double getOneDayWorkTimeHours(Date begin, Date end){ Double xss = 0.0; if(begin.compareTo(end) != -1){ logger.warn("我填写的开始时间比结束时间还晚"); xss = 0.0; return xss; }; Double oneHour = 60.0; DateTime startdt = new DateTime(begin); DateTime enddt = new DateTime(end); /*下面这些是固定的上班时间*/ //早上上班时间 8:30 Date beginworkdate = (Date) begin.clone(); beginworkdate = DateUtils.setHours(beginworkdate, 8); beginworkdate = DateUtils.setMinutes(beginworkdate, 30); DateTime workbegin = new DateTime(beginworkdate); //上午下班时间 12:00 Date beginlaunchdate = (Date) begin.clone(); beginlaunchdate = DateUtils.setHours(beginlaunchdate, 12); beginlaunchdate = DateUtils.setMinutes(beginlaunchdate, 0); DateTime launchbegin = new DateTime(beginlaunchdate); //下午上班时间 14:00 Date endlaunchdate = (Date) begin.clone(); endlaunchdate = DateUtils.setHours(endlaunchdate, 14); endlaunchdate = DateUtils.setMinutes(endlaunchdate, 0); DateTime launchend = new DateTime(endlaunchdate); //下午下班时间 17:30 Date workenddate = (Date) end.clone(); workenddate = DateUtils.setHours(workenddate, 17); workenddate = DateUtils.setMinutes(workenddate, 30); DateTime workend = new DateTime(workenddate); /*到这里规定动作写完*/ //2.减去周六周日及节假日 -----选择在节假日补休的人,肯定是测试吧---doglus SimpleDateFormat format = new SimpleDateFormat(com.common.StringCommon.DATEFORMATE); if (startdt.isBefore(workbegin) || startdt.isEqual(workbegin)) {//1.开始时间早于8:30 设置开始时间为8:30 //1.1结束时间在12:00之前 不用扣掉午休时间 if (enddt.isBefore(launchbegin)||enddt.isEqual(launchbegin)) { int minits = Minutes.minutesBetween(workbegin, enddt).getMinutes(); xss = minits/oneHour; logger.info("补休时间为上午时间段-补休小时为: " + xss); }else if(enddt.isBefore(launchend)||enddt.isEqual(launchend)){ //1.2 结束时间在下午上班之前,就是只上一上午整班 int minits = Minutes.minutesBetween(workbegin, launchbegin).getMinutes(); xss = (double) minits/oneHour; logger.info("存在午休时间段(扣午休时间)-补休小时为: " + xss); }else if(enddt.isBefore(workend)){ //1.3 结束时间在14:00之后 下班之前 int minits = Minutes.minutesBetween(launchend, enddt).getMinutes(); logger.info("上午加下午扣午休2小时-补休小时为: " + (minits/oneHour + 3.5)); xss = (double) minits/oneHour + 3.5; }else{ //1.4 结束时间在下班之后 int minits = Minutes.minutesBetween(workbegin, workend).getMinutes(); logger.info("实际上就是7小时--: " + (minits/oneHour - 2)); xss = minits/oneHour - 2; }; }else if(startdt.isBefore(launchbegin)){//2.开始时间在8:30和12:00之间 //2.1结束时间在12:00之前 不用扣掉午休时间 if (enddt.isBefore(launchbegin)) { int minits = Minutes.minutesBetween(startdt, enddt).getMinutes(); xss = minits/oneHour; logger.info("上午时间段-补休小时为: " + xss); }else if(enddt.isBefore(launchend)){ //2.2 结束时间在下午上班之前 int minits = Minutes.minutesBetween(startdt, launchbegin).getMinutes(); xss = minits/oneHour; logger.info("上午时间段,结束时间存在午休时间-补休小时为: " + xss); }else if(enddt.isBefore(workend)){ //2.3 结束时间在14:00之后 下班之前 int minits = Minutes.minutesBetween(startdt, enddt).getMinutes(); xss = minits/oneHour-2; logger.info("上午加下午扣2小时补休时间: " + xss); }else{ //2.4 结束时间在下班之后 int minits = Minutes.minutesBetween(startdt, workend).getMinutes(); xss = minits/oneHour - 2; logger.info("上午加下午(全部)扣2小时午休: " + xss); }; }else if(startdt.isBefore(launchend)){ //3.开始时间在12:00和14:00之间 if(enddt.isBefore(workend)){ //3.1结束时间在14:00之后 下班之前 int minits = Minutes.minutesBetween(launchend, enddt).getMinutes(); xss = minits/oneHour; logger.info("下午补休-补休小时为: " + xss); }else if (enddt.isAfter(workend)) { //3.2 结束时间在下班之后 int minits = Minutes.minutesBetween(launchend, workend).getMinutes(); xss = minits/oneHour; logger.info("整整一个下午实际上是3: " + xss); }else{ //3.3 结束时间在下午上班之前 logger.warn("没有在正常时间补休休假时间为0"); xss = 0.0; }; }else if(startdt.isBefore(workend)){ //4.开始时间在午休之后下班之间 //4.1结束时间也在下班之前 if (enddt.isBefore(workend) || enddt.isEqual(workend)) { int minits = Minutes.minutesBetween(startdt, enddt).getMinutes(); xss = minits/oneHour; logger.info("补休时间为下午上班时间-补休小时数为: " + xss); }else if(enddt.isAfter(workend)){ //4.2 结束时间在下班之后 int minits = Minutes.minutesBetween(startdt, workend).getMinutes(); xss = minits/oneHour; logger.info("补休时间为下午上班时间(扣下班之后时间)-补休小时数为: " + minits/oneHour); }else{ //4.3 其它情况都非法 logger.error("输入时间段非法,请重新输入 。开始时间: "+ startdt.toString() +" 结束时间:" + enddt.toString()); xss = 0.0; }; } return xss;
};
解决 1无用
悬赏问题
- ¥15 乘性高斯噪声在深度学习网络中的应用
- ¥15 运筹学排序问题中的在线排序
- ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
- ¥30 求一段fortran代码用IVF编译运行的结果
- ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
- ¥15 C++ 头文件/宏冲突问题解决
- ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
- ¥50 安卓adb backup备份子用户应用数据失败
- ¥20 有人能用聚类分析帮我分析一下文本内容嘛
- ¥30 python代码,帮调试,帮帮忙吧