我是靠谱客的博主 清新日记本,最近开发中收集的这篇文章主要介绍Java8中的时间工具类代码注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

代码

import org.springframework.util.StringUtils;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Objects;

/**
 * 时间工具类
 *
 * @version V1.0
 * @date: 2022年02月17日 11时38分
 */
public abstract class TimeUtil {

    /**
     * 默认使用系统当前时区
     */
    private static final ZoneId ZONE = ZoneId.systemDefault();

    private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern(TimeFormatPatternEnum.DATETIME_FORMAT_PATTERN.toString());

    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(TimeFormatPatternEnum.DATE_FORMAT_PATTERN.toString());

    private static final DateTimeFormatter DATETIME_ZONE_FORMATTER = DateTimeFormatter.ofPattern(TimeFormatPatternEnum.DATETIME_ZONE_FORMAT_PATTERN.toString());

    /**
     * String 转 LocalDateTime
     *
     * @param stringDateTime 时间字符串,格式为yyyy-MM-dd HH:mm:ss的字符串
     * @return LocalDateTime 实例
     */
    public static LocalDateTime stringToLocateDateTime(String stringDateTime) {
        if (!StringUtils.hasLength(stringDateTime)) {
            return null;
        }
        return LocalDateTime.parse(stringDateTime, DATETIME_FORMATTER);
    }

    /**
     * 将Date转换成LocalDateTime
     * <br>
     * date为null时,抛出异常;不为null时转换为LocalDateTime
     *
     * @param date 日期
     * @return LocalDateTime 实例
     */
    public static LocalDateTime dateToLocalDateTime(Date date) {
        Instant instant = requireNonNull(date).toInstant();
        return LocalDateTime.ofInstant(instant, ZONE);
    }

    /**
     * 将Date转换成LocalDate
     *
     * @param date date,日期不能为空
     * @return LocalDate 实例
     */
    public static LocalDate dateToLocalDate(Date date) {
        Instant instant = requireNonNull(date).toInstant();
        return LocalDateTime.ofInstant(instant, ZONE).toLocalDate();
    }

    /**
     * 将LocalDateTime转换成Date
     *
     * @param localDateTime LocalDateTime实例
     * @return date 日期
     */
    public static Date localDateTimeToDate(LocalDateTime localDateTime) {
        Instant instant = requireNonNull(localDateTime).atZone(ZONE).toInstant();
        return Date.from(instant);
    }

    /**
     * 将LocalDate转换成Date
     *
     * @param localDate LocalDate实例
     * @return date 日期
     */
    public static Date localDateToDate(LocalDate localDate) {
        Instant instant = requireNonNull(localDate).atStartOfDay().atZone(ZONE).toInstant();
        return Date.from(instant);
    }

    /**
     * 将相应格式yyyy-MM-dd、 yyyy-MM-dd HH:mm:ss 时间字符串转换成Date
     *
     * @param time                  string
     * @param timeFormatPatternEnum 时间格式
     * @return date
     */
    public static Date stringToDate(String time, TimeFormatPatternEnum timeFormatPatternEnum) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeFormatPatternEnum.toString());
        if (TimeFormatPatternEnum.DATETIME_FORMAT_PATTERN.equals(timeFormatPatternEnum)) {
            return localDateTimeToDate(LocalDateTime.parse(time, formatter));
        } else if (TimeFormatPatternEnum.DATE_FORMAT_PATTERN.equals(timeFormatPatternEnum)) {
            return localDateToDate(LocalDate.parse(time, formatter));
        }
        throw TimeBusinessExceptions.timeFormatUnSupportException();
    }

    /**
     * 将time时间(格式为yyyy-MM-dd HH:mm:ss)转换成毫秒时间戳
     *
     * @param time string
     * @return 毫秒时间戳
     */
    public static Long stringDateToMilli(String time) {
        return LocalDateTime.parse(time, DATETIME_FORMATTER).atZone(ZONE).toInstant().toEpochMilli();
    }

    /**
     * 获取时间戳秒
     *
     * @param localDateTime 日期时间
     * @return 时间戳秒
     */
    public static Long locateTimeToSecond(LocalDateTime localDateTime) {
        return localDateTime.atZone(ZONE).toEpochSecond();
    }

    /**
     * 获取时间戳毫秒
     *
     * @param localDateTime 日期时间
     * @return 时间戳毫秒
     */
    public static Long locateTimeToMilli(LocalDateTime localDateTime) {
        return localDateTime.atZone(ZONE).toInstant().toEpochMilli();
    }

    /**
     * 接收一个不为空的时间对象
     *
     * @param object 时间、日期相关的对象
     * @param <T>    Date
     * @return 不为空的时间对象
     */
    private static <T> T requireNonNull(T object) {
        if (Objects.isNull(object)) {
            throw TimeBusinessExceptions.timeNonNull();
        }
        return object;
    }

    /**
     * 时间格式枚举
     */
    public enum TimeFormatPatternEnum {
        /**
         * 时间格式枚举:年月日,年月日时分秒,年月日时分秒时区
         */
        DATE_FORMAT_PATTERN("yyyy-MM-dd"),
        DATETIME_FORMAT_PATTERN("yyyy-MM-dd HH:mm:ss"),
        DATETIME_ZONE_FORMAT_PATTERN("yyyy-MM-dd HH:mm:ssZ");

        private final String format;

        TimeFormatPatternEnum(String format) {
            this.format = format;
        }

        @Override
        public String toString() {
            return format;
        }
    }
}


注意事项

StringUtils 和 TimeBusinessExceptions的使用:
判空和抛出异常,别的没用。
TimeBusinessExceptions比如定义了:

    public static TimeBusinessException timeNonNull(){
        return new TimeBusinessException("日期时间不能为空");
    }

    public static TimeBusinessException timeFormatException(){
        return new TimeBusinessException("日期时间格式不正确");
    }

    public static TimeBusinessException timeFormatUnSupportException(){
        return new TimeBusinessException("不支持的日期时间格式");
    }

最后

以上就是清新日记本为你收集整理的Java8中的时间工具类代码注意事项的全部内容,希望文章能够帮你解决Java8中的时间工具类代码注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部