zoukankan      html  css  js  c++  java
  • 计算每天工时逻辑,去掉可能重叠交叉的数据(由于前端插件存储["11:30","12:00"] 这样的json字符串)



    private  Double  countTimes(List<Record> list) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd");
        List al=new ArrayList();
        for(int i=0;i<list.size();i++){
            Record r=list.get(i);
            String s = r.getWorkTime();//获得的参数 ["11:30","12:00"]
            if(StringUtils.isNotNull(s)){
    
    
                Object[] times = JSONArray.parseArray(s).toArray();
                Long [] oj=new Long[times.length];
                for (int k = 0; k < times.length; k++) {
                    String time = DateFormat.format(new Date()) + " " + times[k] + ":00";
                    oj[k]=simpleDateFormat.parse(time).getTime()/1000;
                }
                if(times.length==2){
    
                    if(i==0){//取出第一次入参的参数作为参照对象
                        al.add(oj[0]);
                        al.add(oj[1]);
                    }else{//下面是比较去除交叉重叠的时间算法逻辑
                        for(int j=0;j<al.size()/2;j++){
                            if(oj[0]<Convert.toLong(al.get(j*2))){
                                if(oj[1]<Convert.toLong(al.get(j*2))){
                                    if(j==0||(j>0&&oj[0]>Convert.toLong(al.get(j*2-1)))){
                                        al.add(2*j,oj[0]);
                                        al.add(2*j+1,oj[1]);
                                        break;
                                    }
                                }else{
                                    if(oj[1]<Convert.toLong(al.get(2*j+1))){
                                        if(j>0&&oj[0]<=Convert.toLong(al.get(2*j-1))){
                                            al.remove(j*2);
                                            al.remove(j*2-1);
                                        }else {
                                            al.remove(j*2);
                                            al.add(j*2,oj[0]);
                                        }
                                    }else{
                                        if(j>0&&oj[0]<Convert.toLong(al.get(2*j-1))){
                                            al.remove(j*2);
                                            al.remove(j*2);
                                        }else {
                                            al.remove(j*2);
                                            al.add(j*2,oj[0]);
                                            al.remove(j*2+1);
                                            al.add(j*2+1,oj[1]);
                                        }
    
                                    }
                                }
                            }else{
                                if(oj[0]>Convert.toLong(al.get(2*j+1))){
                                    if((al.size()-(2*j+1))<=1) {
                                        al.add(oj[0]);
                                        al.add(oj[1]);
                                        break;
                                    }
                                }else {
                                    if(oj[1]>Convert.toLong(al.get(2*j+1))){
                                        al.remove(2*j+1);
                                        al.add(2*j+1,oj[1]);
                                    }
                                }
                            }
                        }
                    }
    
                }
            }
    
        }
    
        double h=0.00;
        for(int l=0;l<al.size()/2;l++){
            long max=Convert.toLong(al.get(l*2+1))/60;
            long min=Convert.toLong(al.get(l*2))/60;
            double f1 = new BigDecimal((float)(max-min)/60).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            h+=f1;
            logger.info("f1="+f1);
            logger.info("h="+h);
        }
    
    return h;
    
    }
  • 相关阅读:
    [JS]格式化Date和分析格式化Date字符串的JS代码
    发布一个实用美观的Vista Sidebar Gadget (代表博客园参赛)
    2月8号N706从深圳回湖南,有没有同行的,呵呵
    LiveWriter测试
    自动内容滚动条[WinForm控件]
    关于Ajax的一揽子工程(1)
    “做事先做人”实战
    成熟度即流程
    金秋游故宫
    html块状元素、内联元素
  • 原文地址:https://www.cnblogs.com/itliyh/p/12619654.html
Copyright © 2011-2022 走看看