概述
代码
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中的时间工具类代码注意事项所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复