lyh
昨天 0d06048c5d560e301bf17fad476975c8ffffcb56
lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java
@@ -5,10 +5,13 @@
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.function.Consumer;
import org.jeecg.common.constant.SymbolConstant;
import org.springframework.util.StringUtils;
@@ -201,9 +204,6 @@
    public static String date2Str(SimpleDateFormat dateSdf) {
        synchronized (dateSdf) {
            Date date = getDate();
            if (null == date) {
                return null;
            }
            return dateSdf.format(date);
        }
    }
@@ -689,6 +689,7 @@
        calendar.setTime(getDate());
        return calendar.get(Calendar.YEAR);
    }
    public static String getDayStr(Date date) {
        Calendar calendar = getCalendar();
        calendar.setTime(date);// 把当前时间赋给日历
@@ -696,23 +697,37 @@
        String dayStr = day < 10 ? "0" + day : day + "";
        return dayStr;
    }
    /**
     * 将字符串转成时间
     * @param str
     * @return
     */
    public static Date parseDatetime(String str){
    public static Date parseDatetime(String str) {
        try {
            return datetimeFormat.get().parse(str);
        }catch (Exception e){
        } catch (Exception e) {
        }
        return null;
    }
    /**
     * 获取指定时间之后的几年 qsw
     */
    public static Date getYearAfter(Date data, int number) {
        Calendar c = Calendar.getInstance();
        c.setTime(data);
        c.add(Calendar.YEAR, number);
        Date afterTime = c.getTime();
//        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        String resultDate = f.format(afterTime);
        return afterTime;
    }
    /**
     * 获取指定时间之后的几天 qsw
     */
    public static Date getDayAfter(Date data,int number) {
    public static Date getDayAfter(Date data, int number) {
        Calendar c = Calendar.getInstance();
        c.setTime(data);
        c.add(Calendar.DAY_OF_MONTH, number);
@@ -725,7 +740,7 @@
    /**
     * 获取指定时间之后的几分钟 qsw
     */
    public static Date getMinAfter(Date data,int number) {
    public static Date getMinAfter(Date data, int number) {
        Calendar c = Calendar.getInstance();
        c.setTime(data);
        c.add(Calendar.MINUTE, number);
@@ -736,7 +751,7 @@
    /**
     * 获取指定时间之后的几小时 qsw
     */
    public static Date getHourAfter(Date data,int number) {
    public static Date getHourAfter(Date data, int number) {
        Calendar c = Calendar.getInstance();
        c.setTime(data);
        c.add(Calendar.HOUR_OF_DAY, number);
@@ -751,8 +766,97 @@
        return dateFormat.format(date);
    }
    /**
     * Date 转 LocalDate
     * @param date
     * @return
     */
    public static LocalDate dateToLocalDate(Date date) {
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    }
    /**
     * LocalDate 转 Date
     * @param localDate
     * @return
     */
    public static Date localDateToDate(LocalDate localDate) {
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }
    /**
     * 日期加年
     * @param date
     * @param year
     * @return
     */
    public static Date addYear(Date date, int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, year);
        return calendar.getTime();
    }
    /**
     * 检查日期是否在今天或之前(忽略时间部分)
     */
    public static boolean isBeforeOrEqualToday(Date targetDate) {
        if (targetDate == null) return false;
}
        Calendar calTarget = Calendar.getInstance();
        calTarget.setTime(targetDate);
        clearTime(calTarget);
        Calendar calToday = Calendar.getInstance();
        clearTime(calToday);
        return !calTarget.after(calToday);
    }
    private static void clearTime(Calendar cal) {
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
    }
    public static void calculateMaintenanceDates(Date nextDate, Integer periodYears,
                                           Consumer<Date> setNextMaintenance,
                                           Consumer<Date> setLatestMaintenance) {
        if (nextDate == null || periodYears == null || periodYears <= 0) {
            return;
        }
        // 转换为Java 8日期类型
        LocalDate nextLocal = nextDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate today = LocalDate.now();
        // 确保有效的计算周期
        int period = Math.max(1, periodYears); // 防止传入0或负值
        if (nextLocal.isAfter(today)) {
            // 未过期:计算最近维护日期
            setLatestMaintenance.accept(
                    Date.from(nextLocal.minusYears(period).atStartOfDay()
                            .atZone(ZoneId.systemDefault()).toInstant())
            );
        } else {
            // 已过期:计算新的下次维护日期
            while (!nextLocal.isAfter(today)) {
                nextLocal = nextLocal.plusYears(period);
            }
            // 设置新日期
            setNextMaintenance.accept(
                    Date.from(nextLocal.atStartOfDay()
                            .atZone(ZoneId.systemDefault()).toInstant())
            );
            // 计算最近维护日期
            setLatestMaintenance.accept(
                    Date.from(nextLocal.minusYears(period).atStartOfDay()
                            .atZone(ZoneId.systemDefault()).toInstant())
            );
        }
    }
}