/*
|
* Copyright (c) 2018-2028, DreamLu All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
* Redistributions in binary form must reproduce the above copyright
|
* notice, this list of conditions and the following disclaimer in the
|
* documentation and/or other materials provided with the distribution.
|
* Neither the name of the dreamlu.net developer nor the names of its
|
* contributors may be used to endorse or promote products derived from
|
* this software without specific prior written permission.
|
* Author: DreamLu 卢春梦 (596392912@qq.com)
|
*/
|
package org.springblade.core.tool.utils;
|
|
import java.time.*;
|
import java.time.format.DateTimeFormatter;
|
import java.time.temporal.Temporal;
|
import java.time.temporal.TemporalAccessor;
|
import java.util.Date;
|
|
/**
|
* DateTime 工具类
|
*
|
* @author L.cm
|
*/
|
public class DateTimeUtil {
|
public static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME);
|
public static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATE);
|
public static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern(DateUtil.PATTERN_TIME);
|
|
/**
|
* 日期时间格式化
|
*
|
* @param temporal 时间
|
* @return 格式化后的时间
|
*/
|
public static String formatDateTime(TemporalAccessor temporal) {
|
return DATETIME_FORMAT.format(temporal);
|
}
|
|
/**
|
* 日期时间格式化
|
*
|
* @param temporal 时间
|
* @return 格式化后的时间
|
*/
|
public static String formatDate(TemporalAccessor temporal) {
|
return DATE_FORMAT.format(temporal);
|
}
|
|
/**
|
* 时间格式化
|
*
|
* @param temporal 时间
|
* @return 格式化后的时间
|
*/
|
public static String formatTime(TemporalAccessor temporal) {
|
return TIME_FORMAT.format(temporal);
|
}
|
|
/**
|
* 日期格式化
|
*
|
* @param temporal 时间
|
* @param pattern 表达式
|
* @return 格式化后的时间
|
*/
|
public static String format(TemporalAccessor temporal, String pattern) {
|
return DateTimeFormatter.ofPattern(pattern).format(temporal);
|
}
|
|
/**
|
* 将字符串转换为时间
|
*
|
* @param dateStr 时间字符串
|
* @param pattern 表达式
|
* @return 时间
|
*/
|
public static LocalDateTime parseDateTime(String dateStr, String pattern) {
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
|
return DateTimeUtil.parseDateTime(dateStr, formatter);
|
}
|
|
/**
|
* 将字符串转换为时间
|
*
|
* @param dateStr 时间字符串
|
* @param formatter DateTimeFormatter
|
* @return 时间
|
*/
|
public static LocalDateTime parseDateTime(String dateStr, DateTimeFormatter formatter) {
|
return LocalDateTime.parse(dateStr, formatter);
|
}
|
|
/**
|
* 将字符串转换为时间
|
*
|
* @param dateStr 时间字符串
|
* @return 时间
|
*/
|
public static LocalDateTime parseDateTime(String dateStr) {
|
return DateTimeUtil.parseDateTime(dateStr, DateTimeUtil.DATETIME_FORMAT);
|
}
|
|
/**
|
* 将字符串转换为时间
|
*
|
* @param dateStr 时间字符串
|
* @param pattern 表达式
|
* @return 时间
|
*/
|
public static LocalDate parseDate(String dateStr, String pattern) {
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
|
return DateTimeUtil.parseDate(dateStr, formatter);
|
}
|
|
/**
|
* 将字符串转换为时间
|
*
|
* @param dateStr 时间字符串
|
* @param formatter DateTimeFormatter
|
* @return 时间
|
*/
|
public static LocalDate parseDate(String dateStr, DateTimeFormatter formatter) {
|
return LocalDate.parse(dateStr, formatter);
|
}
|
|
/**
|
* 将字符串转换为日期
|
*
|
* @param dateStr 时间字符串
|
* @return 时间
|
*/
|
public static LocalDate parseDate(String dateStr) {
|
return DateTimeUtil.parseDate(dateStr, DateTimeUtil.DATE_FORMAT);
|
}
|
|
/**
|
* 将字符串转换为时间
|
*
|
* @param dateStr 时间字符串
|
* @param pattern 时间正则
|
* @return 时间
|
*/
|
public static LocalTime parseTime(String dateStr, String pattern) {
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
|
return DateTimeUtil.parseTime(dateStr, formatter);
|
}
|
|
/**
|
* 将字符串转换为时间
|
*
|
* @param dateStr 时间字符串
|
* @param formatter DateTimeFormatter
|
* @return 时间
|
*/
|
public static LocalTime parseTime(String dateStr, DateTimeFormatter formatter) {
|
return LocalTime.parse(dateStr, formatter);
|
}
|
|
/**
|
* 将字符串转换为时间
|
*
|
* @param dateStr 时间字符串
|
* @return 时间
|
*/
|
public static LocalTime parseTime(String dateStr) {
|
return DateTimeUtil.parseTime(dateStr, DateTimeUtil.TIME_FORMAT);
|
}
|
|
/**
|
* 时间转 Instant
|
*
|
* @param dateTime 时间
|
* @return Instant
|
*/
|
public static Instant toInstant(LocalDateTime dateTime) {
|
return dateTime.atZone(ZoneId.systemDefault()).toInstant();
|
}
|
|
/**
|
* Instant 转 时间
|
*
|
* @param instant Instant
|
* @return Instant
|
*/
|
public static LocalDateTime toDateTime(Instant instant) {
|
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
|
}
|
|
/**
|
* 转换成 date
|
*
|
* @param dateTime LocalDateTime
|
* @return Date
|
*/
|
public static Date toDate(LocalDateTime dateTime) {
|
return Date.from(DateTimeUtil.toInstant(dateTime));
|
}
|
|
/**
|
* 比较2个时间差,跨度比较小
|
*
|
* @param startInclusive 开始时间
|
* @param endExclusive 结束时间
|
* @return 时间间隔
|
*/
|
public static Duration between(Temporal startInclusive, Temporal endExclusive) {
|
return Duration.between(startInclusive, endExclusive);
|
}
|
|
/**
|
* 比较2个时间差,跨度比较大,年月日为单位
|
*
|
* @param startDate 开始时间
|
* @param endDate 结束时间
|
* @return 时间间隔
|
*/
|
public static Period between(LocalDate startDate, LocalDate endDate) {
|
return Period.between(startDate, endDate);
|
}
|
}
|