java时间工具类记录

        本章主要是基于java8中的一些时间类,写的一些常用的时间转换、时间计算的方法。比如LocalDateTime,LocalDate,Date等。

         在开发的很多时候,经常会遇到一些时间的计算和转换,像多少天后是星期几,两个日期相差天数,时间戳转为Date日期类型等等,每次遇到都需要翻看以往的项目代码查找。故在此做一下简单的记录。

1. LocalDateTime类

public class LocalDateTimeTool {

    public static void main(String[] args) {
        System.out.println(getCurrentDateTime());
        System.out.println(getLocalDateTimeByString("2022-05-05 15:35:20.222", FormatPattern.DATE_TIME_FORMAT.getFormat()));
    }

    /**
     * 获取当前日期: yyyy-mm-dd hh:mm:ss.SSS
     * @return
     */
    public static LocalDateTime getCurrentDateTime() {
        return LocalDateTime.now();
    }

    /**
     * 字符串转LocalDate
     * @return
     */
    public static LocalDateTime getLocalDateTimeByString(String dateString, String format){
        if (format == null) {
            format = FormatPattern.DATE_TIME_FORMAT.getFormat();
        }
        return LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern(format));
    }

    /**
     * LocalDateTime转Date: 默认格式
     * @param date
     * @return
     */
    public static Date getDateByLocalDateTime(LocalDateTime date){
        return Date.from(date.atZone(ZoneId.systemDefault()).toInstant());
    }

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

    /**
     * 日期时间(LocalDateTime)按指定格式转字符串
     *
     * @param dateTime
     * @param format
     * @return
     */
    public static String getStringBylocalDateTime(LocalDateTime dateTime, String format) {
        String dateString;
        if (dateTime == null) {
            dateString = "";
        } else {
            DateTimeFormatter formatDate = DateTimeFormatter.ofPattern(format);
            dateString = dateTime.format(formatDate);
        }
        return dateString;
    }

    /**
     * Date 相差xxx天的日期
     * @param date
     * @param value
     * @param unit
     * @return LocalDateTime
     */
    public static LocalDateTime getDifferValueOfDateForLocalDateTime(Date date, Integer value, ChronoUnit unit){
        LocalDateTime localDateTime = getLocalDateTimeByDate(date);
        return localDateTime.plus(value, unit);
    }

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



public enum  FormatPattern {

    DATE_TIME_FORMAT("yyyy-MM-dd HH:mm:ss"),
    DATETIME_FORMAT("yyyyMMddHHmmss"),
    DATE_FORMAT("yyyy-MM-dd"),
    DATEFORMAT("yyyyMMdd"),
    ;

    private String format;

    private FormatPattern(String format) {
        this.format = format;
    }

    public String getFormat() {
        return format;
    }

}

2. LocalDate类

public class LocalDateTool {

    public static void main(String[] args) {
        System.out.println(getCurrentDate());
        System.out.println(getLocalDateByString("2015-01-01"));
        System.out.println(getDateByLocalDate(LocalDate.now()));
        System.out.println(getStartOrEndOfWeek(null, true));
        System.out.println(getStartOrEndOfMonth(null, false));
        System.out.println(getStartOrEndOfQuarter(null, false));
        System.out.println(getStartOrEndOfYear(null, false));
        System.out.println(getInstantFromLocalDate(getCurrentDate()));
        System.out.println(getDifferValueOfDateForLocalDate(new Date(), -5, ChronoUnitDateEnum.MONTHS));
        System.out.println(getDifferValueOfDateForLocalDate(new Date(), -5, ChronoUnitDateEnum.YEARS));
        System.out.println(getDifferValueOfDateForLocalDate(new Date(), 14, ChronoUnitDateEnum.DAYS));
    }

    /**
     * 获取当前日期: yyyy-mm-dd
     * @return
     */
    public static LocalDate getCurrentDate() {
        return LocalDate.now();
    }

    /**
     * 字符串转LocalDate
     * @return
     */
    public static LocalDate getLocalDateByString(String dateString){
        return LocalDate.parse(dateString);
    }

    /**
     * LocalDate转Date: 默认格式
     * @param date
     * @return
     */
    public static Date getDateByLocalDate(LocalDate date){
        return Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }

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

    /**
     * Date 相差xxx天的日期
     * @param date
     * @param value
     * @param unit
     * @return LocalDate
     */
    public static LocalDate getDifferValueOfDateForLocalDate(Date date, Integer value, ChronoUnitDateEnum unit){
        LocalDate localDate = getLocalDateByDate(date);
        switch (unit.getUnit()) {
            case DAYS:
                return localDate.plusDays(value);
            case WEEKS:
                return localDate.plusWeeks(value);
            case MONTHS:
                return localDate.plusMonths(value);
            case YEARS:
                return localDate.plusYears(value);
            default:
                return localDate;
        }
    }

    /**
     * 获取当前周 开始时间和结束时间
     * @param date 日期
     * @param isFirstDayOfWeek 是否开始
     * @return
     */
    public static LocalDate getStartOrEndOfWeek(LocalDate date  , Boolean isFirstDayOfWeek){
        LocalDate now = LocalDate.now();
        if (date == null){
            date = now;
        }
        DayOfWeek dayOfWeek = date.getDayOfWeek();
        int value = dayOfWeek.getValue();
        if (isFirstDayOfWeek){
            now = date.minusDays(value - 1);
        }else {
            now = date.plusDays(7 - value);
        }
        return now;
    }

    /**
     * 获取当前周 开始时间和结束时间
     * @param date 日期
     * @param isFirstDayOfMonth 是否开始
     * @return
     */
    public static LocalDate getStartOrEndOfMonth(LocalDate date  , Boolean isFirstDayOfMonth){
        LocalDate now = LocalDate.now();
        if (date == null){
            date = now;
        }
        if (isFirstDayOfMonth){
            now = date.withDayOfMonth(1);
        }else {
            now = date.with(TemporalAdjusters.lastDayOfMonth());
        }
        return now;
    }

    /**
     * 获取当前周 开始时间和结束时间
     * @param date 日期
     * @param isFirstDayOfQuarter 是否开始
     * @return
     */
    public static LocalDate getStartOrEndOfQuarter(LocalDate date  , Boolean isFirstDayOfQuarter) {
        LocalDate now = LocalDate.now();
        if (date == null){
            date = now;
        }
        Month month = date.getMonth();
        Month firstMonthOfQuarter = month.firstMonthOfQuarter();
        Month endMonthOfQuarter = Month.of(firstMonthOfQuarter.getValue() + 2);
        if (isFirstDayOfQuarter){
            now = LocalDate.of(date.getYear(), firstMonthOfQuarter, 1);
        }else {
            now = LocalDate.of(date.getYear(), endMonthOfQuarter, endMonthOfQuarter.length(date.isLeapYear()));
        }
        return now;
    }


    /**
     * 获取当前周 开始时间和结束时间
     * @param date 日期
     * @param isFirstDayOfYear 是否开始
     * @return
     */
    public static LocalDate getStartOrEndOfYear(LocalDate date  , Boolean isFirstDayOfYear){
        LocalDate now = LocalDate.now();
        if (date == null){
            date = now;
        }
        if (isFirstDayOfYear){
            now = LocalDate.of(date.getYear(), Month.JANUARY, 1);
        }else {
            now = LocalDate.of(date.getYear(), Month.DECEMBER, Month.DECEMBER.length(date.isLeapYear()));
        }
        return now;
    }

    /**
     * LocalDate 转换成 Instant时间戳
     * @param date
     * @return
     */
    public static Instant getInstantFromLocalDate(LocalDate date){
        return date.atStartOfDay().toInstant(ZoneOffset.UTC);
    }
}



public enum ChronoUnitDateEnum {

    DAYS(ChronoUnit.DAYS),
    WEEKS(ChronoUnit.WEEKS),
    MONTHS(ChronoUnit.MONTHS),
    YEARS(ChronoUnit.YEARS),
    ;

    private ChronoUnit unit;

    private ChronoUnitDateEnum(ChronoUnit unitType) {
        this.unit = unitType;
    }

    public ChronoUnit getUnit() {
        return unit;
    }
}

3. LocalTime类

public class LocalTimeTool {

    public static void main(String[] args) {
        System.out.println(getCurrentTime());
        System.out.println(getLocalTimeByString("20:15:15.256"));
        System.out.println(getDifferValueOfTimeForLocalTime(getCurrentTime(), 50, ChronoUnitTimeEnum.MINUTES));
    }

    /**
     * 获取当前时间: hh:mm:ss.SSS
     * @return
     */
    public static LocalTime getCurrentTime() {
        return LocalTime.now();
    }

    /**
     * 字符串转LocalTime
     * @return
     */
    public static LocalTime getLocalTimeByString(String dateString){
        return LocalTime.parse(dateString);
    }

    /**
     * LocalTime  相差XXX的时间
     * @param time
     * @param value
     * @param unit
     * @return
     */
    public static LocalTime getDifferValueOfTimeForLocalTime(LocalTime time, Integer value , ChronoUnitTimeEnum unit){
        switch (unit.getUnit()) {
            case SECONDS:
                return time.plusSeconds(value);
            case MINUTES:
                return time.plusMinutes(value);
            case HOURS:
                return time.plusHours(value);
            default:
                return time;
        }
    }
}



public enum ChronoUnitTimeEnum {

    SECONDS(ChronoUnit.SECONDS),
    MINUTES(ChronoUnit.MINUTES),
    HOURS(ChronoUnit.HOURS),
    ;

    private ChronoUnit unit;

    private ChronoUnitTimeEnum(ChronoUnit unitType) {
        this.unit = unitType;
    }

    public ChronoUnit getUnit() {
        return unit;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值