代码如下(示例):
//list: ["11:00-12:00","12:00-13:00","13:43-14:00"] List<String> timeScopeVoList = JSON.parseArray(param.getTimeScope(), String.class); //判断多个时间段是否重复 boolean b = checkOverlap(timeScopeVoList); if (b){ return Result.failure(ResultEnum.PARAM_ERROR.getCode(), "时间段重复,请检查时间段"); }public static boolean checkOverlap(List<String> list){ Collections.sort(list);//排序ASC boolean flag = false;//是否重叠标识 for(int i=0; i<list.size(); i++){ if(i>0){ //跳过第一个时间段不做判断 String[] itime = list.get(i).split("-"); for(int j=0; j<list.size(); j++){ //如果当前遍历的i开始时间小于j中某个时间段的结束时间那么则有重叠,反之没有重叠 //这里比较时需要排除i本身以及i之后的时间段,因为已经排序了所以只比较自己之前(不包括自己)的时间段 if(j==i || j>i){ continue; } Date day=new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String[] jtime = list.get(j).split("-"); //此处DateUtils.compare为日期比较(返回负数date1小、返回0两数相等、返回正整数date1大) int compare = compareDate( (df.format(day)+" "+itime[0]+":00"), (df.format(day)+" "+jtime[1]+":00"), "yyyy-MM-dd HH:mm:ss"); if(compare<0){ flag = true; break;//只要存在一个重叠则可退出内循环 } } } //当标识已经认为重叠了则可退出外循环 if(flag){ break; } } return flag; }