From 8d98a3403bd8ba92ef6c29c46d810a085a3dd1be Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 15 七月 2025 19:13:47 +0800
Subject: [PATCH] 文件ip迁移兼容
---
common/src/main/java/com/ycl/common/utils/DateUtils.java | 96 +++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 91 insertions(+), 5 deletions(-)
diff --git a/common/src/main/java/com/ycl/common/utils/DateUtils.java b/common/src/main/java/com/ycl/common/utils/DateUtils.java
index 43eaf68..e6de789 100644
--- a/common/src/main/java/com/ycl/common/utils/DateUtils.java
+++ b/common/src/main/java/com/ycl/common/utils/DateUtils.java
@@ -4,13 +4,11 @@
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
import java.util.Date;
+import java.util.HashSet;
import java.util.Objects;
+import java.util.Set;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.lang.Nullable;
@@ -37,6 +35,94 @@
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+ private static String isHoliday = "1-1,1-28,1-29,1-30,1-31,2-1,2-2,2-3,2-4,"
+ +"4-4,4-5,4-6,5-1,5-2,5-3,5-4,5-5,5-31,6-1,6-2,10-1,10-2,10-3,"
+ +"10-4,10-5,10-6,10-7,10-8";
+
+ /**
+ * 鑾峰彇涓や釜鏃堕棿鍐咃紝闄ゅ幓鍛ㄦ湯鍛ㄦ棩浠ュ強娉曞畾鑺傚亣鏃ョ殑 灏忔椂鎬绘暟銆�
+ * @param startDate
+ * @param endDate
+ * @return
+ */
+ public static long getWorkingHours(Date startDate,Date endDate){
+
+ long workingHours = 0;
+ //杞崲鏃ユ湡鏍煎紡
+ LocalDateTime startTime = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+ LocalDateTime endTime = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+ if(startTime.isAfter(endTime)){
+ throw new RuntimeException("寮�濮嬫椂闂翠笉鑳芥櫄浜庣粨鏉熸椂闂�");
+ }
+ LocalDateTime varTime = startTime;
+ //鑺傚亣鏃ユ棩鏈�(2025涓哄垪)
+ Set<LocalDate> holidays = new HashSet<>();
+ String[] holiday = isHoliday.split(",");
+ for (String str : holiday) {
+ String[] md = str.split("-");
+ int month = Integer.parseInt(md[0]);
+ int day = Integer.parseInt(md[1]);
+ holidays.add(LocalDate.of(2025,month,day));
+ }
+ while (varTime.isBefore(endTime)){
+ boolean isWorkDay = varTime.getDayOfWeek().getValue() < 6
+ && !holidays.contains(varTime.toLocalDate());
+ // 鍒ゆ柇鏄惁鏄伐浣滄棩锛堥潪鍛ㄦ湯 + 闈炶妭鍋囨棩锛�
+ if (isWorkDay){
+ workingHours++;
+ }
+ varTime = varTime.plusHours(1);
+ }
+ return workingHours;
+ }
+
+ /**
+ * 鑾峰彇涓や釜鏃堕棿鍐咃紝闄ゅ幓鍛ㄦ湯鍛ㄦ棩浠ュ強娉曞畾鑺傚亣鏃ョ殑 绉掓�绘暟銆�
+ * @param startDate
+ * @param endDate
+ * @return
+ */
+ public static long getWorkingSed(Date startDate,Date endDate){
+
+ long workingHours = 0;
+ long workingMill = 0;
+ //杞崲鏃ユ湡鏍煎紡
+ LocalDateTime startTime = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+ LocalDateTime endTime = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+ if(startTime.isAfter(endTime)){
+ throw new RuntimeException("寮�濮嬫椂闂翠笉鑳芥櫄浜庣粨鏉熸椂闂�");
+ }
+ LocalDateTime varTime = startTime;
+ //鑺傚亣鏃ユ棩鏈�(2025涓哄垪)
+ Set<LocalDate> holidays = new HashSet<>();
+ String[] holiday = isHoliday.split(",");
+ for (String str : holiday) {
+ String[] md = str.split("-");
+ int month = Integer.parseInt(md[0]);
+ int day = Integer.parseInt(md[1]);
+ holidays.add(LocalDate.of(2025,month,day));
+ }
+ while (varTime.isBefore(endTime)){
+ boolean isWorkDay = varTime.getDayOfWeek().getValue() < 6
+ && !holidays.contains(varTime.toLocalDate());
+ long diffMill = endTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() - varTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
+ // 鍒ゆ柇鏄惁鏄伐浣滄棩锛堥潪鍛ㄦ湯 + 闈炶妭鍋囨棩锛�
+ if (isWorkDay){
+ if (diffMill < 3600000) {
+ // 濡傛灉涓や釜鏃堕棿涓嶅埌涓�灏忔椂宸窛
+ workingMill += diffMill;
+ break;
+ }
+ workingHours++;
+ workingMill += 3600000;
+ }
+
+ varTime = varTime.plusHours(1);
+ }
+ return workingMill / 1000;
+ }
+
+
/**
* 鑾峰彇褰撳墠Date鍨嬫棩鏈�
*
--
Gitblit v1.8.0