luoyisheng
2025-03-26 555ff988376b8650455547d0b6ff7f12f4ae2c63
medicalWaste-common/src/main/java/com/sinata/common/utils/DateUtils.java
@@ -5,11 +5,14 @@
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;
@@ -36,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型日期
@@ -175,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)
@@ -212,7 +245,7 @@
            max.setTime(maxDate);
            Calendar curr = min;
            max.add(Calendar.YEAR, 1);
            //max.add(Calendar.YEAR, 1);
            while (curr.before(max)) {
                result.add(sdf.format(curr.getTime()));
                curr.add(Calendar.YEAR, 1);
@@ -226,7 +259,7 @@
            max.setTime(maxDate);
            Calendar curr = min;
            max.add(Calendar.MONTH, 1);
            //max.add(Calendar.MONTH, 1);
            while (curr.before(max)) {
                result.add(sdf.format(curr.getTime()));
                curr.add(Calendar.MONTH, 1);
@@ -240,7 +273,7 @@
            min.setTime(minDate);
            max.setTime(maxDate);
            Calendar curr = min;
            max.add(Calendar.DATE, 1);
            //max.add(Calendar.DATE, 1);
            while (curr.before(max)) {
                result.add(sdf.format(curr.getTime()));
                curr.add(Calendar.DATE, 1);
@@ -250,4 +283,136 @@
        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());
    }
}