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