先看一个例图:
在金山《电池管家》应用中就有一个类似上图这样的功能—— 开启多个定时任务。
当开启另一个定时任务的时候,如果即将开启的这个定时任务的时间段与已经开启了的定时任务的时间段有交集的话,它就会提示:重叠的任务不可同时启动!
下面我就把这个任务重叠(判断两个时间段是否有重叠)已经写好的一套算法进行封装成了一个工具类的代码贴出来,注释也写在代码中了,相信大家很容易可以理解。
/** * 比较两个时间段是否有交集工具类 * @author qiulong * */ public class TimeCheckUtil { /** * 比较两个时间段数组是否有重合 * @author qiulong * @param timeArray1 * @param timeArray2 * @return 有重合 true; */ public static boolean compare(ArrayList<Integer> timeArray1, ArrayList<Integer> timeArray2) { for (int i : timeArray1) { if (timeArray2.contains(i)) return true; } return false; } /** * 将时间段转换成数组 * @author qiulong * @param ent * @return */ public static ArrayList<Integer> checkList(TimingEntity ent) { // 先将时间转换成分来计算 int timeStart = (ent.getStartHour() * 60) + ent.getStartMinute(); int timeEnd = (ent.getEndHour() * 60) + ent.getEndMinute(); // 将时间段封装成一个数组 ArrayList<Integer> timeArray = new ArrayList<Integer>(); if (timeEnd > timeStart) {// 开始时间小于结束时间 for (int i = timeStart; i <= timeEnd; i++) { timeArray.add(i);// 添加开始时间至结束时间为止的时间 } } else {// 开始时间大于结束时间 for (int i = timeStart; i < 24 * 60; i++) { timeArray.add(i);// 添加开始时间至当天0点以前的剩余时间 } for (int i = 0; i <= timeEnd; i++) { timeArray.add(i);// 添加0点以后到结束时间为止的时间 } } return timeArray; } }