package com.ruoyi.performance.utils; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.regex.Pattern; /** * 时分时间差计算工具类 * 支持格式:HH:mm(24小时制),如 08:30、23:59、00:00 */ public class HourDiffCalculator { // 校验HH:mm格式的正则(24小时制,小时00-23,分钟00-59) private static final Pattern TIME_PATTERN = Pattern.compile("^([01]?[0-9]|2[0-3]):[0-5][0-9]$"); private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm"); /** * 计算两个 HH:mm 时间的小时差 * * @param startTime 开始时间,例如 "23:30" * @param endTime 结束时间,例如 "01:30" * @return 小时差,结束时间小于开始时间时返回负数 */ public static double getHourDiff(String startTime, String endTime) { validateTimeFormat(startTime); validateTimeFormat(endTime); LocalTime start = LocalTime.parse(startTime, FORMATTER); LocalTime end = LocalTime.parse(endTime, FORMATTER); int startMinutes = start.getHour() * 60 + start.getMinute(); int endMinutes = end.getHour() * 60 + end.getMinute(); int diffMinutes; if (endMinutes >= startMinutes) { diffMinutes = endMinutes - startMinutes; } else { diffMinutes = -(24 * 60 - startMinutes + endMinutes); } return diffMinutes / 60.0; } public static void main(String[] args) { System.out.println(getHourDiff("08:00","11:15")); } /** * 校验时间格式是否为HH:mm */ private static void validateTimeFormat(String time) { if (time == null || !TIME_PATTERN.matcher(time).matches()) { throw new IllegalArgumentException("时间格式错误,需为HH:mm(24小时制):" + time); } } }