• 不同的时间区间取并集


    public class Test {
    private static Map<Date, Date> dateMap = new ConcurrentSkipListMap<>();

    public static void dateHandle(Date startTime, Date endTime) {
    if(startTime.after(endTime)) return;
    if (MapUtils.isEmpty(dateMap)) {
    dateMap.put(startTime, endTime);
    return;
    }
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    String startTimeFor = sdf.format(startTime);
    String endTimeFor = sdf.format(endTime);
    Map<Long, Long> tempMap = new TreeMap<>();
    //ConcurrentSkipListMap能自动根据Key排序,只需要合并交集
    //1、有交集则合并
    //2、没有交集则添加
    Iterator<Map.Entry<Date, Date>> iterator = dateMap.entrySet().iterator();
    while (iterator.hasNext()) {
    Map.Entry<Date, Date> entry = iterator.next();
    Date start = entry.getKey();
    Date end = entry.getValue();
    String startFor = sdf.format(start);
    String endFor = sdf.format(end);
    if(startTime.before(start) && (endTime.after(start) ||
    endTime.equals(start)) && (endTime.before(end) || endTime.equals(end))) {
    iterator.remove();
    dateMap.put(startTime, end);

    } else if(startTime.before(start) && endTime.after(end)) {
    iterator.remove();
    dateMap.put(startTime, endTime);

    } else if(endTime.after(end) && (startTime.after(start) ||
    startTime.equals(start)) && (startTime.before(end) || startTime.equals(end))) {
    iterator.remove();
    dateMap.put(start, endTime);

    } else if(endTime.before(start) || startTime.after(end)) {
    if(!iterator.hasNext())
    dateMap.put(startTime, endTime);
    }
    }
    }
    //测试数据
    public static void main(String[] args) {
    ArrayList<HashMap<Date, Date>> objects = new ArrayList<>();
    HashMap<Date, Date> dateDateHashMap = new HashMap<>();
    Date startTime = DateUtils.parse("2020-12-21 08:00:00","yyyy-MM-dd hh:mm:ss");
    Date endTime = DateUtils.parse("2020-12-31 18:00:00","yyyy-MM-dd hh:mm:ss");
    dateDateHashMap.put(startTime,endTime);
    objects.add(dateDateHashMap);

    HashMap<Date, Date> dateDateHashMap2 = new HashMap<>();
    Date startTime2 = DateUtils.parse("2021-01-01 00:00:00","yyyy-MM-dd hh:mm:ss");
    Date endTime2 = DateUtils.parse("2021-01-31 18:00:00","yyyy-MM-dd hh:mm:ss");
    dateDateHashMap2.put(startTime2,endTime2);
    objects.add(dateDateHashMap2);


    HashMap<Date, Date> dateDateHashMap3 = new HashMap<>();
    Date startTime3 = DateUtils.parse("2021-02-01 08:00:00","yyyy-MM-dd hh:mm:ss");
    Date endTime3 = DateUtils.parse("2021-02-28 18:00:00","yyyy-MM-dd hh:mm:ss");
    dateDateHashMap3.put(startTime3,endTime3);
    objects.add(dateDateHashMap3);


    HashMap<Date, Date> dateDateHashMap4 = new HashMap<>();
    Date startTime4 = DateUtils.parse("2021-03-01 08:00:00","yyyy-MM-dd hh:mm:ss");
    Date endTime4 = DateUtils.parse("2021-03-31 18:00:00","yyyy-MM-dd hh:mm:ss");
    dateDateHashMap4.put(startTime4,endTime4);
    objects.add(dateDateHashMap4);


    HashMap<Date, Date> dateDateHashMap5 = new HashMap<>();
    Date startTime5 = DateUtils.parse("2021-03-01 08:00:00","yyyy-MM-dd hh:mm:ss");
    Date endTime5 = DateUtils.parse("2021-12-31 18:00:00","yyyy-MM-dd hh:mm:ss");
    dateDateHashMap5.put(startTime5,endTime5);
    objects.add(dateDateHashMap5);

    HashMap<Date, Date> dateDateHashMap6 = new HashMap<>();
    Date startTime6 = DateUtils.parse("2021-08-01 08:30:00","yyyy-MM-dd hh:mm:ss");
    Date endTime6 = DateUtils.parse("2021-08-31 19:00:00","yyyy-MM-dd hh:mm:ss");
    dateDateHashMap6.put(startTime6,endTime6);
    objects.add(dateDateHashMap6);

    HashMap<Date, Date> dateDateHashMap7 = new HashMap<>();
    Date startTime7 = DateUtils.parse("2021-09-01 08:30:00","yyyy-MM-dd hh:mm:ss");
    Date endTime7 = DateUtils.parse("2021-09-30 18:30:00","yyyy-MM-dd hh:mm:ss");
    dateDateHashMap7.put(startTime7,endTime7);
    objects.add(dateDateHashMap7);

    HashMap<Date, Date> dateDateHashMap8 = new HashMap<>();
    Date startTime8 = DateUtils.parse("2021-10-01 08:30:00","yyyy-MM-dd hh:mm:ss");
    Date endTime8 = DateUtils.parse("2021-10-31 18:30:00","yyyy-MM-dd hh:mm:ss");
    dateDateHashMap8.put(startTime8,endTime8);
    objects.add(dateDateHashMap8);

    HashMap<Date, Date> dateDateHashMap9 = new HashMap<>();
    Date startTime9 = DateUtils.parse("2021-11-01 08:30:00","yyyy-MM-dd hh:mm:ss");
    Date endTime9 = DateUtils.parse("2021-11-30 18:30:00","yyyy-MM-dd hh:mm:ss");
    dateDateHashMap9.put(startTime9,endTime9);
    objects.add(dateDateHashMap9);


    for (HashMap<Date, Date> object : objects) {
    Set<Date> dates = object.keySet();
    for (Date date : dates) {
    //end
    Date end = object.get(date);
    dateHandle(date,end);
    }
    }
    int i = 0;
    //去重之后结果

    for (Date date : dateMap.keySet()) {

    //end
    String startT = DateUtils.format(date, "yyyy-MM-dd hh:mm:ss");
    String endT = DateUtils.format(dateMap.get(date), "yyyy-MM-dd hh:mm:ss");

    i= i+1;
    System.out.println("第"+i+"个时间区间:开始时间" +startT+ "----结束时间:"+endT);

    }
    System.out.println("各区间累加合计-----------------");
    //累加时间
    long sumTime = 0L;
    for (Date date : dateMap.keySet()) {
    long end = dateMap.get(date).getTime();
    long start = date.getTime();
    long startEnd = end - start;

    sumTime = sumTime + startEnd;

    }
    //分钟
    long ss = sumTime/1000;
    long min = sumTime/1000/60;
    long hour = sumTime/1000/60/60;
    long day = sumTime/1000/60/60/24;

    System.out.println("单位--秒---" + ss);
    System.out.println("单位--分钟---" + min);
    System.out.println("单位--小时---" + hour);
    System.out.println("单位--天---" + day);
    }
    }
  • 相关阅读:
    第二次作业
    第一次作业
    第三次作业
    第二次作业
    第一次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/liuzhenguo/p/15812185.html
Copyright © 2020-2023  润新知