zouyu
14 小时以前 1b2f1eb44d9f0de6b9238cfe314988a95c87344a
inspect-server/src/main/java/com/ruoyi/inspect/util/HourDiffCalculator.java
@@ -2,6 +2,8 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Objects;
import java.util.regex.Pattern;
@@ -39,6 +41,41 @@
        return hourDiff.doubleValue();
    }
    public static void main(String[] args) {
        System.out.println(getHourDiff("07:38","19:26"));
        LocalDateTime localDateTime = LocalDateTime.of(2026, 3, 30, 7, 38);
        LocalDateTime localDateTime2 = LocalDateTime.of(2026, 3, 30, 19, 26);
        System.out.println(getTimeDifference(localDateTime,localDateTime2));
    }
    /**
     * 计算两个时间的差值,返回 天:时:分:秒(每位两位数,支持跨天)
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 格式化后的时间差(例:01天 01时 30分 05秒)
     */
    public static String getTimeDifference(LocalDateTime startTime, LocalDateTime endTime) {
        // 1. 计算两个时间的**总毫秒差**(绝对值,避免时间顺序问题)
        long totalMillis = Math.abs(ChronoUnit.MILLIS.between(startTime, endTime));
        // 2. 定义时间单位常量(毫秒)
        final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;  // 1天
        final long MILLIS_PER_HOUR = 60 * 60 * 1000;       // 1小时
        final long MILLIS_PER_MINUTE = 60 * 1000;          // 1分钟
        final long MILLIS_PER_SECOND = 1000;               // 1秒
        // 3. 拆分 天、时、分、秒
        long days = totalMillis / MILLIS_PER_DAY;
        long remainingMillis = totalMillis % MILLIS_PER_DAY;
        long hours = remainingMillis / MILLIS_PER_HOUR;
        remainingMillis %= MILLIS_PER_HOUR;
        long minutes = remainingMillis / MILLIS_PER_MINUTE;
        long seconds = remainingMillis / MILLIS_PER_SECOND;
        // 4. 格式化:%02d = 整数补零到两位数(核心!满足精确到两位数要求)
        return String.format("%02d天 %02d时 %02d分 %02d秒", days, hours, minutes, seconds);
    }
    /**
     * 校验时间格式是否为HH:mm
     */