whirly-chai 2015-10-29 02:34 采纳率: 47.1%
浏览 4789

java或者js工作日怎么判断系统时间是否为工作日间啊?

想先获取当前时间,然后判断当前时间是否为周一到周五工作日的非工作日间(工作时间为8:30-17:00),C币不多。就大神帮忙

  • 写回答

7条回答 默认 最新

  • 苏生米沿 博客专家认证 2015-10-29 05:01
    关注
    //根据开始结束时间计算工作小时数(开始结束时间是同一天)
    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;
    

    };

    评论

报告相同问题?

悬赏问题

  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障