时间工具类--DateUtils

import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;import java.time.temporal.TemporalAdjusters;
import java.util.Date;

/**
 * @program: pandahero-shop
 * @description: 时间处理工具类
 * @author: Yaoson
 * @create: 2021-09-08 12:52
 **/
public class DateUtils {

    public static final String PATTERN = "yyyy-MM-dd";
    public static final String PATTERN2 = "yyyy-MM-dd HH:mm:ss";

    /**
     * Date 转 String
     *
     * @param date
     * @param pattern
     * @return
     */
    public static String dateToString(Date date, String pattern) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
        return simpleDateFormat.format(date);
    }

    /**
     * String 转 Date
     *
     * @param date
     * @param pattern
     * @return
     */
    public static Date stringToDate(String date, String pattern) {
        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
            return simpleDateFormat.parse(date);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * LocalDate 转 String
     *
     * @param date
     * @param pattern
     * @return
     */
    public static String localDateToString(LocalDate date, String pattern) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern(pattern);
        return df.format(date);
    }

    /**
     * String 转 LocalDate
     *
     * @param date
     * @return
     */
    public static LocalDate stringToLocalDate(String date) {
        try {
            DateTimeFormatter df = DateTimeFormatter.ofPattern(PATTERN);
            return LocalDate.parse(date, df);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * LocalDateTime 转 String
     *
     * @param date
     * @param pattern
     * @return
     */
    public static String localDateTimeToString(LocalDateTime date, String pattern) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern(pattern);
        return df.format(date);
    }

    /**
     * String 转 LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime stringToLocalDateTime(String date) {
        try {
            DateTimeFormatter df = DateTimeFormatter.ofPattern(PATTERN2);
            return LocalDateTime.parse(date, df);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Date 转 LocalDate
     *
     * @param date
     * @return
     */
    public static LocalDate dateToLocalDate(Date date) {
        ZoneId zoneId = ZoneId.systemDefault();
        return date.toInstant().atZone(zoneId).toLocalDate();
    }

    /**
     * LocalDate 转 Date
     *
     * @param date
     * @return
     */
    public static Date localDateToDate(LocalDate date) {
        ZoneId zoneId = ZoneId.systemDefault();
        return Date.from(date.atStartOfDay().atZone(zoneId).toInstant());
    }

    /**
     * Date 转 LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime dateToLocalDateTime(Date date) {
        ZoneId zoneId = ZoneId.systemDefault();
        return date.toInstant().atZone(zoneId).toLocalDateTime();
    }

    /**
     * LocalDateTime 转 Date
     *
     * @param date
     * @return
     */
    public static Date localDateTimeToDate(LocalDateTime date) {
        //获取系统默认时区
        ZoneId zoneId = ZoneId.systemDefault();
        //时区的日期和时间
        ZonedDateTime zonedDateTime = date.atZone(zoneId);
        //获取时刻
        return Date.from(zonedDateTime.toInstant());
    }

    /**
     * LocalDate 转 LocalDateTime
     *
     * @param date
     * @return
     */
    public static LocalDateTime localDateToLocalDateTime(LocalDate date) {
        return date.atStartOfDay();
    }

    /**
     * LocalDateTime 转 LocalDate
     *
     * @param date
     * @return
     */
    public static LocalDate localDateTimeToLocalDate(LocalDateTime date) {
        return date.toLocalDate();
    }

    /**
     * 当前时间
     *
     * @param pattern
     * @return
     */
    public static String getNow(String pattern) {
        return localDateTimeToString(LocalDateTime.now(), pattern);
    }

    /**
     * 时间格式转换
     *
     * @param date
     * @param pattern
     * @param pattern2
     * @return
     */
    public static String toPattern(String date, String pattern, String pattern2) {
        Date flagDate = stringToDate(date, pattern);
        return dateToString(flagDate, pattern2);
    }

    /**
     * 获取指定时间的开始时间,结束时间
     *
     * @param date
     * @param type        类型:0-天,1-年,2-月,3-周
     * @param pattern
     * @param isStartDate 是否开始时间
     * @return
     */
    public static String getStartDateOrEndDate(String date, Integer type, String pattern, Boolean isStartDate) {
        switch (type) {
            case 1:
                return getYearStartDateOrEndDate(date, pattern, isStartDate);
            case 2:
                return getMonthStartDateOrEndDate(date, pattern, isStartDate);
            case 3:
                return getWeekStartDateOrEndDate(date, pattern, isStartDate);
            default:
                return getDayStartDateOrEndDate(date, pattern, isStartDate);
        }
    }

    /**
     * 获取某天的开始时间,结束时间
     * @param date
     * @param pattern
     * @param isStartDate
     * @return
     */
    private static String getDayStartDateOrEndDate(String date, String pattern, Boolean isStartDate) {
        LocalDateTime flagDate = stringToLocalDateTime(toPattern(date, pattern, PATTERN2));
        //某天的开始
        if (isStartDate) {
            LocalDateTime firstDay = flagDate.withHour(0).withMinute(0).withSecond(0);
            return toPattern(localDateTimeToString(firstDay, PATTERN2), PATTERN2, pattern);
        } else {
            //某天结束
            LocalDateTime lastDay = flagDate.withHour(23).withMinute(59).withSecond(59);
            return toPattern(localDateTimeToString(lastDay, PATTERN2), PATTERN2, pattern);
        }
    }

    /**
     * 获取某星期的第一天,最后一天
     *
     * @param date
     * @param pattern
     * @param isStartDate
     * @return
     */
    private static String getWeekStartDateOrEndDate(String date, String pattern, Boolean isStartDate) {
        LocalDate flagDate = stringToLocalDate(toPattern(date, pattern, PATTERN));
        //某星期的第一天
        if (isStartDate) {
            LocalDate firstDate = flagDate.with(DayOfWeek.MONDAY);
            return toPattern(localDateToString(firstDate, PATTERN), PATTERN, pattern) + " 00:00:00";
        } else {
            //某星期的最后一天
            LocalDate lastDay = flagDate.with(DayOfWeek.MONDAY);
            return toPattern(localDateToString(lastDay, PATTERN), PATTERN, pattern) + " 23:59:59";
        }
    }

    /**
     * 获取某月的第一天,最后一天
     *
     * @param date
     * @param pattern
     * @param isStartDate
     * @return
     */
    private static String getMonthStartDateOrEndDate(String date, String pattern, Boolean isStartDate) {
        LocalDateTime flagDate = stringToLocalDateTime(toPattern(date, pattern, PATTERN2));
        //某年的第一天
        if (isStartDate) {
            LocalDateTime firstDay = flagDate.with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0);
            return toPattern(localDateTimeToString(firstDay, PATTERN2), PATTERN2, pattern);
        } else {
            //某年的最后一天
            LocalDateTime lastDay = flagDate.with(TemporalAdjusters.firstDayOfMonth()).withHour(23).withMinute(59).withSecond(59);
            return toPattern(localDateTimeToString(lastDay, PATTERN2), PATTERN2, pattern);
        }
    }

    /**
     * 获取某年的第一天,最后一天
     *
     * @param date
     * @param pattern
     * @param isStartDate
     * @return
     */
    private static String getYearStartDateOrEndDate(String date, String pattern, Boolean isStartDate) {
        LocalDateTime flagDate = stringToLocalDateTime(toPattern(date, pattern, PATTERN2));
        //某年的第一天
        if (isStartDate) {
            LocalDateTime firstDay = flagDate.with(TemporalAdjusters.firstDayOfYear()).withHour(0).withMinute(0).withSecond(0);
            return toPattern(localDateTimeToString(firstDay, PATTERN2), PATTERN2, pattern);
        } else {
            //某年的最后一天
            LocalDateTime lastDay = flagDate.with(TemporalAdjusters.lastDayOfYear()).withHour(23).withMinute(59).withSecond(59);
            return toPattern(localDateTimeToString(lastDay, PATTERN2), PATTERN2, pattern);
        }
    }

    /**
     * 时间计算
     * @param date
     * @param pattern
     * @param type      类型:0-分钟,1-小时,2-天,3-星期,4-月,5-年
     * @return
     */
    public static String calculateDate(String date, String pattern, Integer type, Long number, Boolean isPlus){
        switch (type){
            case 1:
                return calculateHourDate(date, pattern, number, isPlus);
            case 2:
                return calculateDayDate(date, pattern, number, isPlus);
            case 3:
                return calculateWeekDate(date, pattern, number, isPlus);
            case 4:
                return calculateMonthDate(date, pattern, number, isPlus);
            case 5:
                return calculateYearDate(date, pattern, number, isPlus);
            default:
                return calculateMinuteDate(date, pattern, number, isPlus);
        }
    }

    /**
     * 计算分钟
     * @param date
     * @param pattern
     * @param number
     * @param isPlus
     * @return
     */
    private static String calculateMinuteDate(String date, String pattern, Long number, Boolean isPlus) {
        LocalDateTime localDateTime = stringToLocalDateTime(toPattern(date, pattern, PATTERN2));
        if (isPlus) {
            localDateTime = localDateTime.plusMinutes(number);
        }else {
            localDateTime = localDateTime.minusMinutes(number);
        }
        return localDateTimeToString(localDateTime, pattern);
    }

    /**
     * 计算年
     * @param date
     * @param pattern
     * @param number
     * @param isPlus
     * @return
     */
    private static String calculateYearDate(String date, String pattern, Long number, Boolean isPlus) {
        LocalDateTime localDateTime = stringToLocalDateTime(toPattern(date, pattern, PATTERN2));
        if (isPlus) {
            localDateTime = localDateTime.plusYears(number);
        }else {
            localDateTime = localDateTime.minusYears(number);
        }
        return localDateTimeToString(localDateTime, pattern);
    }

    /**
     * 计算星期
     * @param date
     * @param pattern
     * @param number
     * @param isPlus
     * @return
     */
    private static String calculateWeekDate(String date, String pattern, Long number, Boolean isPlus) {
        LocalDateTime localDateTime = stringToLocalDateTime(toPattern(date, pattern, PATTERN2));
        if (isPlus) {
            LocalDateTime newDate = localDateTime.plusWeeks(number);
            return localDateTimeToString(newDate, pattern);
        }else {
            LocalDateTime newDate = localDateTime.minusWeeks(number);
            return localDateTimeToString(newDate, pattern);
        }
    }

    /**
     * 计算月
     * @param date
     * @param pattern
     * @return
     */
    private static String calculateMonthDate(String date, String pattern, Long number, Boolean isPlus) {
        LocalDateTime localDateTime = stringToLocalDateTime(toPattern(date, pattern, PATTERN2));
        if (isPlus) {
            LocalDateTime newDate = localDateTime.plusMonths(number);
            return localDateTimeToString(newDate, pattern);
        }else {
            LocalDateTime newDate = localDateTime.minusMonths(number);
            return localDateTimeToString(newDate, pattern);
        }
    }

    /**
     * 计算天
     * @param date
     * @param pattern
     * @param number
     * @param isPlus
     * @return
     */
    private static String calculateDayDate(String date, String pattern, Long number, Boolean isPlus) {
        LocalDateTime localDateTime = stringToLocalDateTime(toPattern(date, pattern, PATTERN2));
        if (isPlus) {
            LocalDateTime newDate = localDateTime.plusDays(number);
            return localDateTimeToString(newDate, pattern);
        }else {
            LocalDateTime newDate = localDateTime.minusDays(number);
            return localDateTimeToString(newDate, pattern);
        }
    }

    /**
     * 计算小时
     * @param date
     * @param pattern
     * @param number
     * @param isPlus
     * @return
     */
    private static String calculateHourDate(String date, String pattern, Long number, Boolean isPlus) {
        LocalDateTime localDateTime = stringToLocalDateTime(toPattern(date, pattern, PATTERN2));
        if (isPlus) {
            LocalDateTime newDate = localDateTime.plusHours(number);
            return localDateTimeToString(newDate, pattern);
        }else {
            LocalDateTime newDate = localDateTime.minusHours(number);
            return localDateTimeToString(newDate, pattern);
        }
    }
}

 

时间工具类--DateUtils

上一篇:WithinPastYears、WithinPastMonths、WithinPastWeeks、WithinPastDays ... 判断两个时间差是否在一个指定范围内


下一篇:header报文时间通用送法