From 25ca0715b47090fc79527910cbb4cf7ea9b3e1f2 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期四, 07 五月 2026 17:07:36 +0800
Subject: [PATCH] 人员考勤:导出日期选择调整&不合格处理展示供应商编码字段

---
 performance-server/src/main/java/com/ruoyi/performance/utils/HourDiffCalculator.java |   86 ++++++++++++------------------------------
 1 files changed, 25 insertions(+), 61 deletions(-)

diff --git a/performance-server/src/main/java/com/ruoyi/performance/utils/HourDiffCalculator.java b/performance-server/src/main/java/com/ruoyi/performance/utils/HourDiffCalculator.java
index c81384a..9d287a1 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/utils/HourDiffCalculator.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/utils/HourDiffCalculator.java
@@ -1,9 +1,7 @@
 package com.ruoyi.performance.utils;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDateTime;
-import java.time.temporal.ChronoUnit;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 import java.util.regex.Pattern;
 
 /**
@@ -15,64 +13,40 @@
     // 鏍¢獙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");
+
     /**
-     * 璁$畻涓や釜鏃跺垎瀛楃涓蹭箣闂寸殑鐩搁殧灏忔椂鏁�
-     * @param startTime 寮�濮嬫椂闂达紙HH:mm锛屽 "08:30"锛�
-     * @param endTime 缁撴潫鏃堕棿锛圚H:mm锛屽 "17:45"锛�
-     * @return 鐩搁殧灏忔椂鏁帮紙淇濈暀2浣嶅皬鏁帮紝濡� 9.25 灏忔椂锛�
-     * @throws IllegalArgumentException 鏃堕棿鏍煎紡閿欒鏃舵姏鍑哄紓甯�
+     * 璁$畻涓や釜 HH:mm 鏃堕棿鐨勫皬鏃跺樊
+     *
+     * @param startTime 寮�濮嬫椂闂达紝渚嬪 "23:30"
+     * @param endTime   缁撴潫鏃堕棿锛屼緥濡� "01:30"
+     * @return 灏忔椂宸紝缁撴潫鏃堕棿灏忎簬寮�濮嬫椂闂存椂杩斿洖璐熸暟
      */
     public static double getHourDiff(String startTime, String endTime) {
-        // 1. 鏍¢獙鏃堕棿鏍煎紡
         validateTimeFormat(startTime);
         validateTimeFormat(endTime);
 
-        // 2. 瑙f瀽鏃跺垎瀛楃涓蹭负鎬诲垎閽熸暟
-        int startMinutes = convertTimeToMinutes(startTime);
-        int endMinutes = convertTimeToMinutes(endTime);
+        LocalTime start = LocalTime.parse(startTime, FORMATTER);
+        LocalTime end = LocalTime.parse(endTime, FORMATTER);
 
-        // 3. 璁$畻鍒嗛挓宸�
-        int minuteDiff = endMinutes - startMinutes;
+        int startMinutes = start.getHour() * 60 + start.getMinute();
+        int endMinutes = end.getHour() * 60 + end.getMinute();
 
-        // 4. 杞崲涓哄皬鏃舵暟锛堜繚鐣�2浣嶅皬鏁帮紝閬垮厤绮惧害涓㈠け锛�
-        BigDecimal hourDiff = new BigDecimal(minuteDiff)
-                .divide(new BigDecimal(60), 2, RoundingMode.HALF_UP);
-        return hourDiff.doubleValue();
+        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("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);
+        System.out.println(getHourDiff("08:00","11:15"));
     }
 
     /**
@@ -82,16 +56,6 @@
         if (time == null || !TIME_PATTERN.matcher(time).matches()) {
             throw new IllegalArgumentException("鏃堕棿鏍煎紡閿欒锛岄渶涓篐H:mm锛�24灏忔椂鍒讹級锛�" + time);
         }
-    }
-
-    /**
-     * 灏咹H:mm瀛楃涓茶浆鎹负鎬诲垎閽熸暟锛堝 08:30 鈫� 510 鍒嗛挓锛�
-     */
-    private static int convertTimeToMinutes(String time) {
-        String[] parts = time.split(":");
-        int hour = Integer.parseInt(parts[0]);
-        int minute = Integer.parseInt(parts[1]);
-        return hour * 60 + minute;
     }
 
 }
\ No newline at end of file

--
Gitblit v1.9.3