Java.UtilsJAVA 8 时间工具类

首页 / 新闻资讯 / 正文

基于 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();}}