From 0852acae13603be95eaaa0b501f3441508ff3fe5 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 14 四月 2025 09:52:12 +0800
Subject: [PATCH] 大屏统计修改

---
 medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java |  279 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 278 insertions(+), 1 deletions(-)

diff --git a/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java b/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
index 916ca79..81f2f89 100644
--- a/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
+++ b/medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
@@ -1,15 +1,22 @@
 package com.sinata.common.utils;
 
+import org.apache.commons.lang3.time.DateFormatUtils;
+
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
+import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
-import org.apache.commons.lang3.time.DateFormatUtils;
+import java.util.List;
 
 /**
  * 时间工具类
@@ -32,6 +39,7 @@
             "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",
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
     /**
      * 获取当前Date型日期
@@ -171,6 +179,35 @@
     }
 
     /**
+     * 计算小时差
+     *
+     * @param endDate
+     * @param startTime
+     * @return
+     */
+    public static long timeDistanceHour(Date endDate, Date startTime) {
+        long nd = 1000 * 24 * 60 * 60;
+        long nh = 1000 * 60 * 60;
+        long diff = endDate.getTime() - startTime.getTime();
+        long hour = diff % nd / nh;
+        return hour;
+    }
+
+    /**
+     * 计算天数差
+     *
+     * @param endDate
+     * @param startTime
+     * @return
+     */
+    public static long timeDistanceDay(Date endDate, Date startTime) {
+        long nd = 1000 * 24 * 60 * 60;
+        long diff = endDate.getTime() - startTime.getTime();
+        long day = diff / nd;
+        return day;
+    }
+
+    /**
      * 增加 LocalDateTime ==> Date
      */
     public static Date toDate(LocalDateTime temporalAccessor)
@@ -188,4 +225,244 @@
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    /**
+     * 获取两个时间节点之间的月份列表
+     *
+     * @param minDate
+     * @param maxDate
+     * @param type    1 = 日 2 = 月 3 = 年
+     * @return
+     */
+    public static List<String> getDayBetween(Date minDate, Date maxDate, Integer type) {
+        List<String> result = new ArrayList<String>();
+        if (type == 3) {//年
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy");//格式化为年
+
+            Calendar min = Calendar.getInstance();
+            Calendar max = Calendar.getInstance();
+            min.setTime(minDate);
+            max.setTime(maxDate);
+
+            Calendar curr = min;
+            //max.add(Calendar.YEAR, 1);
+            while (curr.before(max)) {
+                result.add(sdf.format(curr.getTime()));
+                curr.add(Calendar.YEAR, 1);
+            }
+        } else if (type == 2) {//月
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月
+
+            Calendar min = Calendar.getInstance();
+            Calendar max = Calendar.getInstance();
+            min.setTime(minDate);
+            max.setTime(maxDate);
+
+            Calendar curr = min;
+            //max.add(Calendar.MONTH, 1);
+            while (curr.before(max)) {
+                result.add(sdf.format(curr.getTime()));
+                curr.add(Calendar.MONTH, 1);
+            }
+
+        } else {//日
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化为年月日
+
+            Calendar min = Calendar.getInstance();
+            Calendar max = Calendar.getInstance();
+            min.setTime(minDate);
+            max.setTime(maxDate);
+            Calendar curr = min;
+            //max.add(Calendar.DATE, 1);
+            while (curr.before(max)) {
+                result.add(sdf.format(curr.getTime()));
+                curr.add(Calendar.DATE, 1);
+            }
+
+        }
+        return result;
+    }
+
+    // 获得本周一0点时间
+    public static Date getTimesWeekmorning() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+        return cal.getTime();
+    }
+
+    // 获得本周日24点时间
+    public static Date getTimesWeeknight() {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(getTimesWeekmorning());
+        cal.add(Calendar.DAY_OF_WEEK, 7);
+        return cal.getTime();
+    }
+
+    // 获得本月第一天0点时间
+    public static Date getTimesMonthmorning() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
+        return cal.getTime();
+    }
+
+    // 获得本月最后一天24点时间
+    public static Date getTimesMonthnight() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
+        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+        cal.set(Calendar.HOUR_OF_DAY, 24);
+        return cal.getTime();
+    }
+
+    /**
+     * 获取本月所有日期字符串列表
+     *
+     * @param format 日期格式,例如 "yyyy-MM-dd"
+     * @return 本月所有日期的字符串列表
+     */
+    public static List<String> getAllDatesOfCurrentMonth(String format) {
+        // 当前日期
+        LocalDate now = LocalDate.now();
+        // 本月的第一天
+        LocalDate firstDayOfMonth = now.withDayOfMonth(1);
+        // 本月的最后一天
+        LocalDate lastDayOfMonth = now.withDayOfMonth(now.lengthOfMonth());
+
+        // 日期格式化器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+
+        // 结果列表
+        List<String> dates = new ArrayList<>();
+
+        // 从第一天开始循环到最后一天
+        LocalDate currentDate = firstDayOfMonth;
+        while (!currentDate.isAfter(lastDayOfMonth)) {
+            dates.add(currentDate.format(formatter)); // 格式化为字符串并添加到列表
+            currentDate = currentDate.plusDays(1);   // 日期加一天
+        }
+
+        return dates;
+    }
+
+    /**
+     * 获取本周所有日期字符串列表
+     *
+     * @param format 日期格式,例如 "yyyy-MM-dd"
+     * @return 本周所有日期的字符串列表
+     */
+    public static List<String> getAllDatesOfCurrentWeek(String format) {
+        // 当前日期
+        LocalDate now = LocalDate.now();
+
+        // 本周的星期一(获取当前日期所在周的第一天)
+        LocalDate firstDayOfWeek = now.with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
+        // 本周的星期日(获取当前日期所在周的最后一天)
+        LocalDate lastDayOfWeek = firstDayOfWeek.plusDays(6);
+
+        // 日期格式化器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+
+        // 结果列表
+        List<String> dates = new ArrayList<>();
+
+        // 从星期一到星期日循环
+        LocalDate currentDate = firstDayOfWeek;
+        while (!currentDate.isAfter(lastDayOfWeek)) {
+            dates.add(currentDate.format(formatter)); // 格式化为字符串并添加到列表
+            currentDate = currentDate.plusDays(1);   // 日期加一天
+        }
+
+        return dates;
+    }
+
+    /**
+     * 获取本月月初第一天0点时间,并返回 Date 类型
+     *
+     * @return 本月月初第一天0点时间(Date 类型)
+     */
+    public static Date getFirstDayOfCurrentMonthAtMidnight() {
+        // 获取当前日期
+        LocalDate now = LocalDate.now();
+
+        // 获取本月的第一天
+        LocalDate firstDayOfMonth = now.withDayOfMonth(1);
+
+        // 将第一天与0点时间合并
+        LocalDateTime firstDayAtMidnight = firstDayOfMonth.atTime(LocalTime.MIDNIGHT);
+
+        // 将 LocalDateTime 转换为 Date
+        return Date.from(firstDayAtMidnight.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+    /**
+     * 获取本周初第一天(周一)0点时间,并返回 Date 类型
+     *
+     * @return 本周初第一天0点时间(Date 类型)
+     */
+    public static Date getFirstDayOfCurrentWeekAtMidnight() {
+        // 获取当前日期
+        LocalDate now = LocalDate.now();
+
+        // 获取本周的第一天(星期一)
+        LocalDate firstDayOfWeek = now.with(DayOfWeek.MONDAY);
+
+        // 将星期一与0点时间合并
+        LocalDateTime firstDayAtMidnight = firstDayOfWeek.atTime(LocalTime.MIDNIGHT);
+
+        // 将 LocalDateTime 转换为 Date
+        return Date.from(firstDayAtMidnight.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+    /**
+     * 获取最近N天所有日期字符串列表
+     *
+     * @param format 日期格式,例如 "yyyy-MM-dd"
+     * @param days 天数
+     * @return 最近N天所有日期的字符串列表
+     */
+    public static List<String> getAllDatesOfLastNDays(String format, int days) {
+        // 当前日期
+        LocalDate now = LocalDate.now();
+        
+        // 获取N天前的日期
+        LocalDate startDate = now.minusDays(days - 1);
+        
+        // 日期格式化器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+        
+        // 结果列表
+        List<String> dates = new ArrayList<>();
+        
+        // 从N天前到今天循环
+        LocalDate currentDate = startDate;
+        while (!currentDate.isAfter(now)) {
+            dates.add(currentDate.format(formatter)); // 格式化为字符串并添加到列表
+            currentDate = currentDate.plusDays(1);   // 日期加一天
+        }
+        
+        return dates;
+    }
+    
+    /**
+     * 获取N天前的0点时间,并返回 Date 类型
+     *
+     * @param days 天数
+     * @return N天前的0点时间(Date 类型)
+     */
+    public static Date getFirstDayOfLastNDaysAtMidnight(int days) {
+        // 获取当前日期
+        LocalDate now = LocalDate.now();
+        
+        // 获取N天前的日期
+        LocalDate nDaysAgo = now.minusDays(days - 1);
+        
+        // 将该天与0点时间合并
+        LocalDateTime startDayAtMidnight = nDaysAgo.atTime(LocalTime.MIDNIGHT);
+        
+        // 将 LocalDateTime 转换为 Date
+        return Date.from(startDayAtMidnight.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
 }

--
Gitblit v1.7.1