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