Java.UtilsJAVA 8 时间工具类

2022年6月7日10:25:45

基于 Java 1.8,新的日期和时间 API 封装

Don’t say much, just go to the code.

packageorg.bood.common.utils;importjava.time.*;importjava.time.format.DateTimeFormatter;importjava.time.temporal.Temporal;importjava.time.temporal.TemporalAdjuster;importjava.time.temporal.TemporalAdjusters;importjava.util.Date;/**
 * JAVA 8 时间工具类
 *
 * @author bood
 * @since 2020/9/25
 */publicclassDateTimeUtils{/**
     * 格式:yyyy-MM-dd HH:mm:ss
     */publicstaticfinalDateTimeFormatter DATETIME_FORMATTER=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");/**
     * 格式:yyyy-MM-dd
     */publicstaticfinalDateTimeFormatter DATE_FORMATTER=DateTimeFormatter.ofPattern("yyyy-MM-dd");/**
     * 格式:HH:mm:ss
     */publicstaticfinalDateTimeFormatter TIME_FORMATTER=DateTimeFormatter.ofPattern("HH:mm:ss");privateDateTimeUtils(){}// ------------------------------------------- 获取时间 -------------------------------------------/**
     * 返回 当前时间的(yyyy-MM-dd HH:mm:ss)
     *
     * @return yyyy-MM-dd HH:mm:ss
     */publicstaticLocalDateTimeget(){returnLocalDateTime.now();}/**
     * 返回 当前时间的(yyyy-MM-dd)
     *
     * @return yyyy-MM-dd
     */publicstaticLocalDategetCurrentLocalDate(){returnLocalDate.now();}/**
     * 返回 当前时间的(HH:mm:ss)
     *
     * @return HH:mm:ss
     */publicstaticLocalTimegetCurrentLocalTime(){returnLocalTime.now();}// ------------------------------------------- 时间格式化 -------------------------------------------/**
     * <p>
     * yyyy-MM-dd HH:mm:ss 转 LocalDateTime 类型
     * </p>
     *
     * @param dateTimeStr: yyyy-MM-dd HH:mm:ss
     * @return:java.time.LocalDateTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateTimeparseLocalDateTime(String dateTimeStr){returnLocalDateTime.parse(dateTimeStr, DATETIME_FORMATTER);}/**
     * <p>
     * yyyy-MM-dd 转 LocalDate 类型
     * </p>
     *
     * @param dateStr: yyyy-MM-dd
     * @return:java.time.LocalDate
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateparseLocalDate(String dateStr){returnLocalDate.parse(dateStr, DATE_FORMATTER);}/**
     * <p>
     * HH:mm:ss 转 LocalTime 类型
     * </p>
     *
     * @param timeStr: HH:mm:ss
     * @return:java.time.LocalTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalTimeparseLocalTime(String timeStr){returnLocalTime.parse(timeStr, TIME_FORMATTER);}/**
     * <p>
     * LocalDateTime 转 yyyy-MM-dd HH:mm:ss
     * </p>
     *
     * @param datetime: LocalDateTime
     * @return:java.lang.String
     * @author:bood
     * @date:2020/9/25
     */publicstaticStringformatLocalDateTime(LocalDateTime datetime){return datetime.format(DATETIME_FORMATTER);}/**
     * <p>
     * LocalDate 转 yyyy-MM-dd
     * </p>
     *
     * @param date: LocalDate
     * @return:java.lang.String
     * @author:bood
     * @date:2020/9/25
     */publicstaticStringformatLocalDate(LocalDate date){return date.format(DATE_FORMATTER);}/**
     * <p>
     * LocalTime 转 HH:mm:ss
     * </p>
     *
     * @param time: LocalTime
     * @return:java.lang.String
     * @author:bood
     * @date:2020/9/25
     */publicstaticStringformatLocalTime(LocalTime time){return time.format(TIME_FORMATTER);}// ------------------------------------------- 时间计算 -------------------------------------------/**
     * <p>
     * 当前时间延期几天
     * </p>
     *
     * @param days: 天数
     * @return:java.time.LocalDateTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateTimeplusDays(int days){returnget().plusDays(days);}/**
     * <p>
     * 日期相隔天数
     * </p>
     *
     * @param startDateInclusive: 开始时间
     * @param endDateExclusive:   结束时间
     * @return:int
     * @author:bood
     * @date:2020/9/25
     */publicstaticintperiodDays(LocalDate startDateInclusive,LocalDate endDateExclusive){returnPeriod.between(startDateInclusive, endDateExclusive).getDays();}/**
     * <p>
     * 日期相隔小时
     * </p>
     *
     * @param startInclusive: 开始时间
     * @param endExclusive:   结束时间
     * @return:long
     * @author:bood
     * @date:2020/9/25
     */publicstaticlongdurationHours(Temporal startInclusive,Temporal endExclusive){returnDuration.between(startInclusive, endExclusive).toHours();}/**
     * <p>
     * 日期相隔分钟
     * </p>
     *
     * @param startInclusive: 开始时间
     * @param endExclusive:   结束时间
     * @return:long
     * @author:bood
     * @date:2020/9/25
     */publicstaticlongdurationMinutes(Temporal startInclusive,Temporal endExclusive){returnDuration.between(startInclusive, endExclusive).toMinutes();}/**
     * <p>
     * 日期相隔毫秒数
     * </p>
     *
     * @param startInclusive: 开始时间
     * @param endExclusive:   结束时间
     * @return:long
     * @author:bood
     * @date:2020/9/25
     */publicstaticlongdurationMillis(Temporal startInclusive,Temporal endExclusive){returnDuration.between(startInclusive, endExclusive).toMillis();}/**
     * <p>
     * 返回 指定年份的(yyyy-MM-dd HH:mm:ss)
     * </p>
     *
     * @param year: 年份
     * @return:java.time.LocalDateTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateTimewithYear(int year){returnget().withYear(year);}/**
     * <p>
     * 返回 指定年份的 第一天时间
     * </p>
     *
     * @param year: 年份
     * @return:java.time.LocalDateTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateTimefirstDayOfThisYear(int year){returnwithYear(year).with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN);}/**
     * <p>
     * 返回 指定年份的 最末天时间
     * </p>
     *
     * @param year: 年份
     * @return:java.time.LocalDateTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateTimelastDayOfThisYear(int year){returnwithYear(year).with(TemporalAdjusters.lastDayOfYear()).with(LocalTime.MAX);}/**
     * <p>
     * 返回 指定年份的 第一天时间
     * </p>
     *
     * @param year: 年份
     * @return:java.lang.String
     * @author:bood
     * @date:2020/9/25
     */publicstaticStringgetFirstDayOfThisDate(int year){LocalDateTime firstDayOfThisYear=firstDayOfThisYear(year);return DATETIME_FORMATTER.format(firstDayOfThisYear);}/**
     * <p>
     * 返回 指定年份的 最末天时间
     * </p>
     *
     * @param year: 年份
     * @return:java.lang.String
     * @author:bood
     * @date:2020/9/25
     */publicstaticStringgetLastDayOfThisDate(int year){LocalDateTime lastDayOfThisYear=lastDayOfThisYear(year);return DATETIME_FORMATTER.format(lastDayOfThisYear);}/**
     * <p>
     * 获取本月的第一天(当前时间)
     * </p>
     *
     * @return:java.lang.String
     * @author:bood
     * @date:2020/9/25
     */publicstaticStringgetFirstDayOfThisMonth(){LocalDateTime firstDayOfThisYear=get().with(TemporalAdjusters.firstDayOfMonth());return DATETIME_FORMATTER.format(firstDayOfThisYear);}/**
     * <p>
     * 获取本月的最末天(当前时间)
     * </p>
     *
     * @return:java.lang.String
     * @author:bood
     * @date:2020/9/25
     */publicstaticStringgetLastDayOfThisMonth(){LocalDateTime firstDayOfThisYear=get().with(TemporalAdjusters.lastDayOfMonth());return DATETIME_FORMATTER.format(firstDayOfThisYear);}/**
     * <p>
     * 当天开始时间
     * </p>
     *
     * @return:java.time.LocalDateTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateTimetodayStart(){returnLocalDateTime.of(getCurrentLocalDate(),LocalTime.MIN);}/**
     * <p>
     * 当天结束时间
     * </p>
     *
     * @return:java.time.LocalDateTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateTimetodayEnd(){returnLocalDateTime.of(getCurrentLocalDate(),LocalTime.MAX);}/**
     * <p>
     * 获取 指定年月的 第一个周一
     * </p>
     *
     * @param year:  年份
     * @param month: 月份
     * @return:java.time.LocalDateTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateTimefirstDayOfWeekInYearMonth(int year,int month){returnget().withYear(year).withMonth(month).with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));}/**
     * <p>
     * 获取 本周 第一天
     * </p>
     *
     * @return:java.lang.String
     * @author:bood
     * @date:2020/9/25
     */publicstaticStringgetStartDayOfWeekToString(){returnformatLocalDate(getStartDayOfWeek());}/**
     * <p>
     * 获取 本周 第一天
     * </p>
     *
     * @return:java.time.LocalDate
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDategetStartDayOfWeek(){TemporalAdjuster first_of_week=TemporalAdjusters.ofDateAdjuster(localDate-> localDate.minusDays(localDate.getDayOfWeek().getValue()-DayOfWeek.MONDAY.getValue()));returngetCurrentLocalDate().with(first_of_week);}/**
     * <p>
     * 获取 本周 第末天
     * </p>
     *
     * @return:java.lang.String
     * @author:bood
     * @date:2020/9/25
     */publicstaticStringgetEndDayOfWeekToString(){returnformatLocalDate(getEndDayOfWeek());}/**
     * <p>
     * 获取 本周 第末天
     * </p>
     *
     * @return:java.time.LocalDate
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDategetEndDayOfWeek(){TemporalAdjuster last_of_week=TemporalAdjusters.ofDateAdjuster(localDate-> localDate.plusDays(DayOfWeek.SUNDAY.getValue()- localDate.getDayOfWeek().getValue()));returngetCurrentLocalDate().with(last_of_week);}/**
     * <p>
     * LocalDateTime 转 Date
     * </p>
     *
     * @param localDateTime: LocalDate 类型
     * @return:java.util.Date
     * @author:bood
     * @date:2020/9/25
     */publicstaticDateasDate(LocalDateTime localDateTime){returnDate.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());}/**
     * <p>
     * Date 转 LocalDateTime
     * </p>
     *
     * @param date: Date 类型
     * @return:java.time.LocalDateTime
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateTimeasLocalDateTime(Date date){returnInstant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();}/**
     * <p>
     * LocalDate 转 Date
     * </p>
     *
     * @param localDate: LocalDate 类型
     * @return:java.util.Date
     * @author:bood
     * @date:2020/9/25
     */publicstaticDateasDate(LocalDate localDate){returnDate.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());}/**
     * <p>
     * Date 转 LocalDate
     * </p>
     *
     * @param date: Date 类型
     * @return:java.time.LocalDate
     * @author:bood
     * @date:2020/9/25
     */publicstaticLocalDateasLocalDate(Date date){returnInstant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();}}
  • 作者:Geek攻城猫
  • 原文链接:https://blog.csdn.net/BUG_call110/article/details/103506914
    更新时间:2022年6月7日10:25:45 ,共 8160 字。