• 根据多个成对的cron表达式生成的时间段,合并


    场景:数据库一张表,有个startcron 和endcron 两个字段,根据表达式计算今天的所有时间段。

    例:startcron :0 30 20 ? * * endcron :0 30 21 ? * *,现在时间20:19 所以得到的时间是20:30~21:30

    由于有多个数据,

     0 0 9 ? * *       0 0 10 ? * * 
     0 30 20 ? * *   0 30 20 ? * * 
     0 0 21 ? * *     0 0 22 ? * * 
     0 30 20 ? * *   0 30 22 ? * * 等

    Map<Date,Date> map = new HashMap<>();

    Set<Date> set = map.keySet();
    Date[] dateArray = new Date[set.size()];
    set.toArray(dateArray);
    if(set.size()==0){
    map.put(starttime, endtime);
    }else{
    boolean flag = true;
    for(int j =0;j<dateArray.length;j++){
    if(flag){
    Date date= dateArray[j];

    if(!(map.get(date).beforestarttime) || date.after(endtime))){
    Date minDate = date.before(starttime)?date:starttime;
    Date maxDate = map.get(date).after(endtime)?map.get(date):endtime;
    map.remove(date);
    map.put(minDate, maxDate);
    flag = false;
    }
    }
    }
    if(flag){
    map.put(starttime, endtime);
    }
    }

    主要思路: 两个时段 A-B          C-D

    map,key放startime  value放endtime

    判断只要相交,if(!(map.get(date).before(starttime) || date.after(endtime)))

    就取四个时间的最大值和最小值,Date minDate = date.before(starttime)?date:starttime;
                   Date maxDate = map.get(date).after(endtime)?map.get(date):endtime;

    先移除map中原来的,map.remove(date);

    再放入最大值和最小值 map.put(minDate, maxDate);

    设置了一个flag,初始值为true,只要有交换就改变flag,,遍历map,若flag为true,代表没有合并,就表示该时段独立的。map.put(starttime, endtime);

  • 相关阅读:
    十大排序算法
    SQL优化指南
    Python基础-类与对象
    Python基础-函数
    Python基础-字典
    Python基础-字符串
    Python基础-列表
    以太坊智能合约开发框架Truffle
    比特币钱包搭建与使用
    矩阵的压缩存储
  • 原文地址:https://www.cnblogs.com/xlblog/p/8576114.html
Copyright © 2020-2023  润新知