ustcyc
2025-01-07 de5d55508afd27fb2b47e6d4d6fd9984525c222c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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<String, String> 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<String, String> 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小时
 
 
    }
 
}