Разблокируйте новые навыки «SDK расчета сравнения преобразования даты Java»

Ссылка на зависимость pom с открытым исходным кодом:

<dependency>
    <groupId>io.github.mingyang66</groupId>
    <artifactId>oceansky-date</artifactId>
    <version>4.3.2</version>
</dependency>

1. Класс инструмента преобразования даты DateConvertUtils
public class DateConvertUtils {
    
    
    /**
     * 字符串日期格式化
     *
     * @param str           字符串日期
     * @param sourcePattern 原始日期格式
     * @param targetPattern 目标格式化格式
     * @return 格式化后的日期
     */
    public static String format(String str, String sourcePattern, String targetPattern) {
    
    
        try {
    
    
            Date date = org.apache.commons.lang3.time.DateUtils.parseDate(str, sourcePattern);
            return DateFormatUtils.format(date, targetPattern);
        } catch (ParseException e) {
    
    
            throw new IllegalArgumentException("非法数据");
        }
    }

    /**
     * 字符串日期格式化
     *
     * @param pattern 目标格式化格式
     * @return 格式化后的日期
     */
    public static String format(Date date, String pattern) {
    
    
        return DateFormatUtils.format(date, pattern);
    }

    /**
     * 字符串日期格式化
     *
     * @param str     字符串日期
     * @param pattern 原始日期格式
     * @return 格式化后的日期
     */
    public static Date toDate(String str, String pattern) {
    
    
        try {
    
    
            return org.apache.commons.lang3.time.DateUtils.parseDate(str, pattern);
        } catch (ParseException e) {
    
    
            throw new IllegalArgumentException("非法数据");
        }
    }

    /**
     * 将LocalDateTime转为Date
     *
     * @param localDateTime 日期类型
     * @return Date日期对象
     */
    public static Date toDate(LocalDateTime localDateTime) {
    
    
        if (localDateTime == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 将LocalDateTime转为Date
     *
     * @param localDate 日期类型
     * @return Date日期对象
     */
    public static Date toDate(LocalDate localDate) {
    
    
        if (localDate == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 将LocalDate转换为LocalDateTime
     *
     * @param localDate 日期对象
     * @return LocalDateTime对象
     */
    public static LocalDateTime toLocalDateTime(LocalDate localDate) {
    
    
        if (localDate == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return localDate.atStartOfDay();
    }

    /**
     * 将Date数据类型转换为LocalDateTime
     *
     * @param date 日期对象
     * @return 转换后的LocalDateTime对象
     */
    public static LocalDateTime toLocalDateTime(Date date) {
    
    
        if (date == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
    }

    /**
     * 将字符串日期转换为LocalDateTime对象
     *
     * @param str     字符串日期
     * @param pattern 格式
     * @return 日期对象
     */
    public static LocalDateTime toLocalDateTime(String str, String pattern) {
    
    
        if (str == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        if (pattern == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return LocalDateTime.parse(str, DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 将日期对象和时间对象拼接成一个日期对象
     *
     * @param date1 日期对象
     * @param date2 时间对象
     * @return 拼接后的时间对象
     */
    public static LocalDateTime toLocalDateTime(LocalDate date1, LocalTime date2) {
    
    
        if (date1 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        if (date2 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return LocalDateTime.of(date1, date2);
    }

    /**
     * 将指定时间转化为对应时区的时间
     * ------------------------------------------------------
     * zoneId示例:
     * ZoneId ZONE_CN = ZoneId.of("Asia/Shanghai");
     * ZoneId ZONE_US = ZoneId.of("US/Eastern")
     * ------------------------------------------------------
     *
     * @param date1  日期对象
     * @param zoneId 时区对象
     * @return 转换后的日期对象
     */
    public static LocalDateTime toLocalDateTime(LocalDateTime date1, ZoneId zoneId) {
    
    
        if (date1 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        if (zoneId == null) {
    
    
            zoneId = ZoneId.systemDefault();
        }
        return date1.atZone(ZoneId.systemDefault()).withZoneSameInstant(zoneId).toLocalDateTime();
    }

    /**
     * 将Date数据类型转换为LocalDate
     *
     * @param date 日期对象
     * @return 转换后的LocalDate对象
     */
    public static LocalDate toLocalDate(Date date) {
    
    
        if (date == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    }

    /**
     * 将LocalDateTime 转 LocalDate
     *
     * @param localDateTime 日期对象
     * @return LocalDate日期对象
     */
    public static LocalDate toLocalDate(LocalDateTime localDateTime) {
    
    
        if (localDateTime == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return localDateTime.toLocalDate();
    }

    /**
     * 将字符串日期转换为LocalDate对象
     *
     * @param str     字符串日期
     * @param pattern 格式
     * @return 日期对象
     */
    public static LocalDate toLocalDate(String str, String pattern) {
    
    
        if (str == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        if (pattern == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return LocalDate.parse(str, DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 将Date数据类型转换为LocalDate
     *
     * @param date 日期对象
     * @return 转换后的LocalDate对象
     */
    public static LocalTime toLocalTime(Date date) {
    
    
        if (date == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
    }

    /**
     * 将LocalDateTime转 LocalTime对象
     *
     * @param localDateTime 日期对象
     * @return LocalTime对象
     */
    public static LocalTime toLocalTime(LocalDateTime localDateTime) {
    
    
        if (localDateTime == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return localDateTime.toLocalTime();
    }

    /**
     * 将字符串日期转换为LocalDate对象
     *
     * @param str     字符串日期
     * @param pattern 格式
     * @return 日期对象
     */
    public static LocalTime toLocalTime(String str, String pattern) {
    
    
        if (str == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        if (pattern == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return LocalTime.parse(str, DateTimeFormatter.ofPattern(pattern));
    }
}

2. Класс инструмента сравнения размера даты DateCompareUtils
public class DateCompareUtils {
    
    
    /**
     * 比较日期大小,firstDate大于等于secondDate 返回true,否则返回false
     *
     * @param date1   日期字符串
     * @param date2   日期字符串
     * @param pattern 日期格式
     * @return 1:date1>date2、0:date1=date2 -1:date1<date2
     */
    public static int compareTo(String date1, String date2, String pattern) {
    
    
        if (StringUtils.isEmpty(date1) || StringUtils.isEmpty(date2) || StringUtils.isEmpty(pattern)) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        try {
    
    
            Date first = org.apache.commons.lang3.time.DateUtils.parseDate(date1, pattern);
            Date second = org.apache.commons.lang3.time.DateUtils.parseDate(date2, pattern);
            return first.compareTo(second);
        } catch (ParseException e) {
    
    
            throw new IllegalArgumentException("非法数据");
        }
    }

    /**
     * 比较日期大小,firstDate大于等于secondDate 返回true,否则返回false
     *
     * @param date1 日期字符串
     * @param date2 日期字符串
     * @return 1:date1>date2、0:date1=date2 -1:date1<date2
     */
    public static int compareTo(Date date1, Date date2) {
    
    
        if (date1 == null || date2 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return date1.compareTo(date2);
    }

    /**
     * 日期大小比较
     *
     * @param date1 日期对象
     * @param date2 日期对象
     * @return 1:date1>date2、0:date1=date2 -1:date1<date2
     */
    public static int compareTo(LocalDateTime date1, LocalDateTime date2) {
    
    
        if (date1 == null || date2 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return date1.compareTo(date2);
    }

    /**
     * 日期大小比较
     *
     * @param date1 日期对象
     * @param date2 日期对象
     * @return 1:date1>date2、0:date1=date2 -1:date1<date2
     */
    public static int compareTo(LocalDate date1, LocalDate date2) {
    
    
        if (date1 == null || date2 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return date1.compareTo(date2);
    }

    /**
     * 日期大小比较
     *
     * @param date1 日期对象
     * @param date2 日期对象
     * @return 1:date1>date2、0:date1=date2 -1:date1<date2
     */
    public static int compareTo(LocalTime date1, LocalTime date2) {
    
    
        if (date1 == null || date2 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return date1.compareTo(date2);
    }

    /**
     * Duration对象类型比较大小
     *
     * @param duration1 日期对象
     * @param duration2 日期对象
     * @return 1:duration1>duration2,0:duration1=duration2,-1:duration1<duration2
     */
    public static int compareTo(Duration duration1, Duration duration2) {
    
    
        if (duration1 == null || duration2 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return duration1.compareTo(duration2);
    }
}

3. Инструменты для расчета даты DateComputeUtils
public class DateComputeUtils {
    
    
    /**
     * 获取指定日期的月份的第一天
     *
     * @param localDateTime 日期
     * @return 获取指定日期对应的第一天的日期对象
     */
    public static LocalDate firstDayOfMonth(LocalDateTime localDateTime) {
    
    
        if (localDateTime == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return localDateTime.with(TemporalAdjusters.firstDayOfMonth()).toLocalDate();
    }

    /**
     * 获取指定日期的月份的第一天
     *
     * @param localDateTime 日期
     * @param month         向前推 month>0 向后推<0
     * @return
     */
    public static LocalDate firstDayOfMonth(LocalDateTime localDateTime, int month) {
    
    
        if (localDateTime == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        if (month == 0) {
    
    
            return localDateTime.with(TemporalAdjusters.firstDayOfMonth()).toLocalDate();
        } else if (month < 0) {
    
    
            return localDateTime.minusMonths(-month).with(TemporalAdjusters.firstDayOfMonth()).toLocalDate();
        } else {
    
    
            return localDateTime.plusMonths(month).with(TemporalAdjusters.firstDayOfMonth()).toLocalDate();
        }
    }

    /**
     * 获取指定日期的月份的最后一天
     *
     * @param localDateTime 日期
     * @return
     */
    public static LocalDate lastDayOfMonth(LocalDateTime localDateTime) {
    
    
        if (localDateTime == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return localDateTime.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate();
    }

    /**
     * 获取指定日期的月份的最后一天
     *
     * @param localDateTime 日期
     * @param month         向前推 month>0 向后推<0
     * @return
     */
    public static LocalDate lastDayOfMonth(LocalDateTime localDateTime, int month) {
    
    
        if (localDateTime == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        if (month == 0) {
    
    
            return localDateTime.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate();
        } else if (month < 0) {
    
    
            return localDateTime.minusMonths(-month).with(TemporalAdjusters.lastDayOfMonth()).toLocalDate();
        } else {
    
    
            return localDateTime.plusMonths(month).with(TemporalAdjusters.lastDayOfMonth()).toLocalDate();
        }
    }

    /**
     * 获取日期所在月份剩余的天数
     *
     * @param localDateTime 日期
     * @return 指定日期所在月份剩余天数
     */
    public static int getRemainDayOfMonth(LocalDateTime localDateTime) {
    
    
        if (localDateTime == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        LocalDateTime lastDayOfMonth = localDateTime.with(TemporalAdjusters.lastDayOfMonth());
        return lastDayOfMonth.getDayOfMonth() - localDateTime.getDayOfMonth();
    }

    /**
     * 获取指定日期所在年份剩余的天数
     *
     * @param localDateTime 日期
     * @return 指定日期所在年剩余天数
     */
    public static int getRemainDayOfYear(LocalDateTime localDateTime) {
    
    
        if (localDateTime == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        LocalDateTime lastDayOfYear = localDateTime.with(TemporalAdjusters.lastDayOfYear());
        return lastDayOfYear.getDayOfYear() - localDateTime.getDayOfYear();
    }

    /**
     * 计算两个日期的时间间隔,精度是秒、纳秒
     * ---------------------------------------------------------------
     * 格式转换
     * Duration fromChar1 = Duration.parse("P1DT1H10M10.5S");
     * Duration fromChar2 = Duration.parse("PT10M");
     * 采用ISO-8601时间格式。格式为:PnYnMnDTnHnMnS   (n为个数)
     * <p>
     * 例如:P1Y2M10DT2H30M15.03S
     * P:开始标记
     * 1Y:一年
     * 2M:两个月
     * 10D:十天
     * T:日期和时间的分割标记
     * 2H:两个小时
     * 30M:三十分钟
     * 15S:15.02秒
     * ---------------------------------------------------------------
     *
     * @param date1, 开始日期
     * @param date2  结束日期
     * @return date1-date2>0 返回正数,否则返回负数
     */
    public static Duration between(Temporal date1, Temporal date2) {
    
    
        if (date1 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        if (date2 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return Duration.between(date2, date1);
    }

    /**
     * 计算两个日期的时间间隔,精度为年 月 日
     * ---------------------------------------------------------------
     * 格式转换:
     * "P2Y"             -- Period.ofYears(2)
     * "P3M"             -- Period.ofMonths(3)
     * "P4W"             -- Period.ofWeeks(4)
     * "P5D"             -- Period.ofDays(5)
     * "P1Y2M3D"         -- Period.of(1, 2, 3)
     * "P1Y2M3W4D"       -- Period.of(1, 2, 25)
     * "P-1Y2M"          -- Period.of(-1, 2, 0)
     * "-P1Y2M"          -- Period.of(-1, -2, 0)
     * P:开始符,表示period(即:表示年月日);
     * Y:year;
     * M:month;
     * W:week;
     * D:day
     * ---------------------------------------------------------------
     *
     * @param date1 日期对象
     * @param date2 日期对象
     * @return ddate1-date2>0 返回正数,否则返回负数
     */
    public static Period between(LocalDate date1, LocalDate date2) {
    
    
        if (date1 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        if (date2 == null) {
    
    
            throw new IllegalArgumentException("非法参数");
        }
        return Period.between(date2, date1);
    }
}

Адрес GitHub: https://github.com/mingyang66/spring-parent

Guess you like

Origin blog.csdn.net/yaomingyang/article/details/130769258