# ShiftTimeUtil.java

    package cloud.wconnect.frontoffice.service.endofshift;

    import java.time.LocalTime;
    import java.util.ArrayList;
    import java.util.List;

    /**
     * 排班时间工具类
     *
     * @author lichen
     * @date 2025/6/25
     */
    public class ShiftTimeUtil {

        /**
         * 时间字符串转分钟数
         *
         * @param time 格式，例如：07:00
         * @return int
         * @author lichen
         * @date 2025/6/23
         */
        public static int timeToMinutes(String time) {
            String[] parts = time.split(":");
            int hour = Integer.parseInt(parts[0]);
            int minute = Integer.parseInt(parts[1]);
            return hour * 60 + minute;
        }

        /**
         * 将时间区间拆分为不跨天的子区间
         *
         * @param start 开始时间，单位分钟数。例如：每日的早上7点 = 7 * 60 = 420
         * @param end   结束时间，单位分钟数。例如：每日的早上7点 = 7 * 60 = 420
         * @return java.util.List<int [ ]>
         * @author lichen
         * @date 2025/6/23
         */
        public static List<int[]> splitInterval(int start, int end) {
            List<int[]> subIntervals = new ArrayList<>();
            if (start <= end) {
                // 不跨天，直接添加
                subIntervals.add(new int[]{start, end});
            } else {
                // 跨天，拆分为 [start, 1440] 和 [0, end]
                subIntervals.add(new int[]{start, 1440});
                subIntervals.add(new int[]{0, end});
            }
            return subIntervals;
        }

        /**
         * 转换成分钟数的时间区间
         *
         * @param startStr 开始时间字符串，例如：07:00
         * @param endStr   结束时间字符串，例如：15:00
         * @return int[]
         * @author lichen
         * @date 2025/6/23
         */
        public static int[] timeToInterval(String startStr, String endStr) {
            int start = ShiftTimeUtil.timeToMinutes(startStr);
            int end = ShiftTimeUtil.timeToMinutes(endStr);
            return new int[]{start, end};
        }

        /**
         * 判断时间区间是否跨天
         *
         * @param startStr 开始时间字符串，例如：07:00
         * @param endStr   结束时间字符串，例如：15:00
         * @return boolean
         * @author lichen
         * @date 2025/6/25
         */
        public static boolean isCrossDay(String startStr, String endStr) {
            int[] minuteInterval = timeToInterval(startStr, endStr);
            // 判断是否跨天（结束时间早于开始时间）
            return minuteInterval[1] < minuteInterval[0];
        }

        /**
         * 时间字符串转分钟数
         *
         * @param localTime 时间
         * @return int
         * @author lichen
         * @date 2025/6/23
         */
        public static int timeToMinutes(LocalTime localTime) {
            int hour = localTime.getHour();
            int minute = localTime.getMinute();
            return hour * 60 + minute;
        }
    }