时间日期工具类

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
 
public class DateTimeUtils {
 
    private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    private static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
    private static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
    // 获取当前日期
    public static LocalDate getCurrentDate() {
        return LocalDate.now();
    }
 
    // 获取当前时间
    public static LocalTime getCurrentTime() {
        return LocalTime.now();
    }
 
    // 获取当前日期时间
    public static LocalDateTime getCurrentDateTime() {
        return LocalDateTime.now();
    }
 
    // 获取当前时间戳
    public static long getCurrentTimestamp() {
        return Instant.now().toEpochMilli();
    }
 
    /**
     *  生成当前时间字符串,默认格式yyyy-MM-dd HH:mm:ss
     * @return java.lang.String
     **/
    public static String currentDateStr() {
        LocalDateTime now = LocalDateTime.now();
        return now.format(formatter);
    }
 
    /**
     * 指定日期格式生成当前时间字符串
     * @param formatter
     * @return java.lang.String
     **/
    public static String currentDateStr(String formatter) {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern(formatter);
        return now.format(pattern);
    }
 
    /**
     **时间转字符串,默认格式化:yyyy-MM-dd HH:mm:ss
     * @param dateTime
     * @return java.lang.String
     **/
    public static String dateToStr(LocalDateTime dateTime) {
        return dateTime.format(formatter);
    }
 
    /**
     **时间转字符串
     * @param dateTime
     * @param formatter 格式化
     * @return java.lang.String
     **/
    public static String dateToStr(LocalDateTime dateTime, DateTimeFormatter formatter) {
        return dateTime.format(formatter);
    }
 
    /**
     **判断bigTime是否大于smallTime
     * @param smallTime
     * @param bigTime
     * @return boolean
     **/
    public static boolean lessThanTime(String smallTime, String bigTime) {
        LocalDateTime smallDateTime = LocalDateTime.parse(smallTime, formatter);
        LocalDateTime bigDateTime = LocalDateTime.parse(bigTime, formatter);
        return smallDateTime.isBefore(bigDateTime);
    }
 
    /**
     **获取num天前的日期
     * @param num
     * @return java.lang.String
     **/
    public static String getPastDate(int num) {
        LocalDate currentDate = LocalDate.now();
        LocalDate pastDate = currentDate.minusDays(num);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        return pastDate.format(formatter);
    }
 
    /**
     **获取近n天的日期字符串集合
     * @param n
     * @return java.util.List<java.lang.String>
     **/
    public static List<String> getRecentNumDays(int n) {
        List<String> dates = new ArrayList<>();
        LocalDate today = LocalDate.now();
        for (int i = 0; i < n; i++) {
            LocalDate date = today.minusDays(i);
            String dateStr = date.format(DateTimeFormatter.ofPattern("MM-dd"));
            dates.add(dateStr);
        }
        return dates;
    }
 
    // 将日期字符串解析成LocalDate对象
    public static LocalDate parseDate(String date) {
        return LocalDate.parse(date);
    }
 
    // 将时间字符串解析成LocalTime对象
    public static LocalTime parseTime(String time) {
        return LocalTime.parse(time);
    }
 
    // 将日期时间字符串解析成LocalDateTime对象
    public static LocalDateTime parseDateTime(String dateTime) {
        return LocalDateTime.parse(dateTime);
    }
 
    // 将日期时间字符串按照指定格式解析成LocalDateTime对象
    public static LocalDateTime parseDateTime(String dateTime, String format) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(dateTime, formatter);
    }
 
    // 将LocalDate对象格式化成日期字符串
    public static String formatDate(LocalDate date) {
        return date.format(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT));
    }
 
    // 将LocalTime对象格式化成时间字符串
    public static String formatTime(LocalTime time) {
        return time.format(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT));
    }
 
    // 将LocalDateTime对象格式化成日期时间字符串
    public static String formatDateTime(LocalDateTime dateTime) {
        return dateTime.format(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT));
    }
 
    // 将LocalDateTime对象按照指定格式格式化成日期时间字符串
    public static String formatDateTime(LocalDateTime dateTime, String format) {
        return dateTime.format(DateTimeFormatter.ofPattern(format));
    }
 
    // 获取指定日期的星期几(1-7,分别代表周一至周日)
    public static int getDayOfWeek(LocalDate date) {
        return date.getDayOfWeek().getValue();
    }
 
    // 获取指定日期的年份
    public static int getYear(LocalDate date) {
        return date.getYear();
    }
 
    // 获取指定日期的月份
    public static int getMonth(LocalDate date) {
        return date.getMonthValue();
    }
 
    // 获取指定日期的天数
    public static int getDayOfMonth(LocalDate date) {
        return date.getDayOfMonth();
    }
 
    // 获取指定日期是当年的第几天
    public static int getDayOfYear(LocalDate date) {
        return date.getDayOfYear();
    }
 
    // 获取指定日期是否为闰年
    public static boolean isLeapYear(LocalDate date) {
        return date.isLeapYear();
    }
 
    // 获取指定日期之前或之后的几天
    public static LocalDate plusDays(LocalDate date, long days) {
        return date.plusDays(days);
    }
 
    // 获取指定日期之前或之后的几周
    public static LocalDate plusWeeks(LocalDate date, long weeks) {
        return date.plusWeeks(weeks);
    }
 
    // 获取指定日期之前或之后的几个月
    public static LocalDate plusMonths(LocalDate date, long months) {
        return date.plusMonths(months);
    }
 
    // 获取指定日期之前或之后的几年
    public static LocalDate plusYears(LocalDate date, long years) {
        return date.plusYears(years);
    }
 
    // 获取指定日期之前或之后的几小时
    public static LocalDateTime plusHours(LocalDateTime dateTime, long hours) {
        return dateTime.plusHours(hours);
    }
 
    // 获取指定日期之前或之后的几分钟
    public static LocalDateTime plusMinutes(LocalDateTime dateTime, long minutes) {
        return dateTime.plusMinutes(minutes);
    }
 
    // 获取指定日期之前或之后的几秒钟
    public static LocalDateTime plusSeconds(LocalDateTime dateTime, long seconds) {
        return dateTime.plusSeconds(seconds);
    }
 
    // 获取指定日期之前或之后的几毫秒
    public static LocalDateTime plusMilliseconds(LocalDateTime dateTime, long milliseconds) {
        return dateTime.plus(milliseconds, ChronoUnit.MILLIS);
    }
 
    // 获取指定日期之前或之后的几纳秒
    public static LocalDateTime plusNanoseconds(LocalDateTime dateTime, long nanoseconds) {
        return dateTime.plus(nanoseconds, ChronoUnit.NANOS);
    }
 
    // 比较两个日期的先后顺序(返回值小于0表示date1在date2之前,等于0表示两个日期相等,大于0表示date1在date2之后)
    public static int compareDates(LocalDate date1, LocalDate date2) {
        return date1.compareTo(date2);
    }
 
    // 判断两个日期是否相等
    public static boolean areDatesEqual(LocalDate date1, LocalDate date2) {
        return date1.isEqual(date2);
    }
 
    // 计算两个日期之间的天数差
    public static long getDaysBetween(LocalDate date1, LocalDate date2) {
        return ChronoUnit.DAYS.between(date1, date2);
    }
 
    // 计算两个日期之间的周数差
    public static long getWeeksBetween(LocalDate date1, LocalDate date2) {
        return ChronoUnit.WEEKS.between(date1, date2);
    }
 
    // 计算两个日期之间的月数差
    public static long getMonthsBetween(LocalDate date1, LocalDate date2) {
        return ChronoUnit.MONTHS.between(date1, date2);
    }
 
    // 计算两个日期之间的年数差
    public static long getYearsBetween(LocalDate date1, LocalDate date2) {
        return ChronoUnit.YEARS.between(date1, date2);
    }
 
    // 判断指定日期是否在当前日期之前
    public static boolean isBeforeCurrentDate(LocalDate date) {
        return date.isBefore(getCurrentDate());
    }
 
    // 判断指定日期是否在当前日期之后
    public static boolean isAfterCurrentDate(LocalDate date) {
        return date.isAfter(getCurrentDate());
    }
 
    // 判断指定时间是否在当前时间之前
    public static boolean isBeforeCurrentTime(LocalTime time) {
        return time.isBefore(getCurrentTime());
    }
 
    // 判断指定时间是否在当前时间之后
    public static boolean isAfterCurrentTime(LocalTime time) {
        return time.isAfter(getCurrentTime());
    }
 
    // 判断指定日期时间是否在当前日期时间之前
    public static boolean isBeforeCurrentDateTime(LocalDateTime dateTime) {
        return dateTime.isBefore(getCurrentDateTime());
    }
 
    // 判断指定日期时间是否在当前日期时间之后
    public static boolean isAfterCurrentDateTime(LocalDateTime dateTime) {
        return dateTime.isAfter(getCurrentDateTime());
    }
 
    // 判断两个日期时间是否相等
    public static boolean areDateTimesEqual(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return dateTime1.isEqual(dateTime2);
    }
 
    // 计算两个日期时间之间的小时数差
    public static long getHoursBetween(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return ChronoUnit.HOURS.between(dateTime1, dateTime2);
    }
 
    // 计算两个日期时间之间的分钟数差
    public static long getMinutesBetween(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return ChronoUnit.MINUTES.between(dateTime1, dateTime2);
    }
 
    // 计算两个日期时间之间的秒数差
    public static long getSecondsBetween(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return ChronoUnit.SECONDS.between(dateTime1, dateTime2);
    }
 
    // 计算两个日期时间之间的毫秒数差
    public static long getMillisecondsBetween(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return ChronoUnit.MILLIS.between(dateTime1, dateTime2);
    }
 
    // 计算两个日期时间之间的纳秒数差
    public static long getNanosecondsBetween(LocalDateTime dateTime1, LocalDateTime dateTime2) {
        return ChronoUnit.NANOS.between(dateTime1, dateTime2);
    }
 
}