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);
|
}
|
}
|
|
}
|