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