package com.zhitan.common.utils.time; import java.util.HashMap; /** * @description: 判断时间是否覆盖24小时 * @author hph * @date 2022-11-14 10:52 */ public class Time24HourUtil { public static void main(String[] args) throws Exception { HashMap map = new HashMap<>(); map.put("06:00:00-12:00:00", "尖"); map.put("12:00:00-16:00:00", "峰"); map.put("16:00:00-20:30:00", "平"); map.put("20:30:00-00:00:00", "峰"); map.put("00:00:00-06:00:00", "谷"); boolean b = checkTimeSpan(map); System.out.print("是否24小时" + b); } /** * 检查 时间段 格式是否正确 * 1、小时、分钟都是两位 且 小时是0-23,分钟是0-59 * 2、首尾相连 * 3、共24小时 * * @param map */ public static boolean checkTimeSpan(HashMap map) { // 校验格式 String regex = "([0-1]+[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])-([0-1]+[0-9]|2[0-3]):([0-5][0-9]:([0-5][0-9]))"; for (String key : map.keySet()) { String[] tt = key.split("-"); if (tt[0].equals(tt[1])) { return false; } if (!key.matches(regex)) { return false; } } // 校验首尾相连 // 以第一个为基准 int foundSpan = 0; String span = ""; String startSpan = ""; String endSpan = ""; int index = 0; // 最多循环map.keySet().size()次就能找到所有的 // 缺点在于,如果一个时间段一直没找到下一个,还是会循环完,才会退出 // 如何 循环一遍就退出整个循环呢 // 变量太多,不想再加变量了,太乱 for (int i = 0; i < map.keySet().size(); i++) { if (foundSpan == map.keySet().size()) { break; } // 没办法,还是加个变量吧 int temp = 0 ; for (String value : map.keySet()) { String[] tt = value.split("-"); // 第一次 if (index == 0) { span = tt[1]; startSpan = tt[0]; foundSpan++; index++; } // 找到下一个时间段 if (span.equals(tt[0])) { foundSpan++; span = tt[1]; // 最后一次 if (foundSpan == map.keySet().size()) { endSpan = tt[1]; } temp++; continue; } } // 如果 一次循环,temp没有增加,那么就退出,不用再循环了 if(temp == 0){ break; } } if (foundSpan == map.keySet().size() && startSpan.equals(endSpan)) { return true; } else { return false; } // 校验 是否是 24小时 // 按理说 只要首尾相连了,那么肯定是24小时 } }