/**
* @version 1.0.0
* @ClassName DateTimeUtil.java
* @Description 日期时间工具类
*/
public final class DateTimeUtil {
/**
* 显示年月日时分秒,例如 2020-08-11 09:51:53.
*/
public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
/**
* 仅显示年月日,例如 2020-08-11.
*/
public static final String DATE_PATTERN = "yyyy-MM-dd";
public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(DATETIME_PATTERN);
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_PATTERN);
public static final ThreadLocal<SimpleDateFormat> DATE_TIME_LOCAL = ThreadLocal.withInitial(() -> new SimpleDateFormat(Constant.DATE_TIME_FORMAT));
public static final ThreadLocal<SimpleDateFormat> DATE_LOCAL = ThreadLocal.withInitial(() -> new SimpleDateFormat(Constant.DATE_GAP_FORMAT));
private DateTimeUtil() {
}
/**
* 格式化日期
*
* @param date
* @return yyyy-MM-dd
*/
public static String getFormatDate(Date date) {
return new SimpleDateFormat(DATE_PATTERN).format(date);
}
/**
* 格式化日期及时间
*
* @param date
* @return yyyy-MM-dd HH:mm:ss
*/
public static String getFormatDateTime(Date date) {
return new SimpleDateFormat(DATETIME_PATTERN).format(date);
}
/**
* 格式化日期
*
* @param localDate
* @return
*/
public static String getFormatDate(LocalDate localDate) {
return localDate.format(DATE_FORMATTER);
}
/**
* 格式化日期及时间
*
* @param localDateTime
* @return
*/
public static String getFormatDateTime(LocalDateTime localDateTime) {
return localDateTime.format(DATE_TIME_FORMATTER);
}
/**
* 日期字符串转LocalDate
*
* @param dateStr
* @return
*/
public static LocalDate dateStrToLocalDate(String dateStr) {
return LocalDate.parse(dateStr, DATE_FORMATTER);
}
/**
* 日期字符串 转 Date
*
* @param dateStr
* @return
*/
public static Date dateStrToDate(String dateStr) {
return Date.from(LocalDate.parse(dateStr, DATE_FORMATTER).atStartOfDay(ZoneId.systemDefault()).toInstant());
}
/**
* 日期时间字符串 转 Date
*
* @param dateStr
* @return
*/
public static Date dateTimeStrToDate(String dateStr) {
return Date.from(LocalDateTime.parse(dateStr, DATE_TIME_FORMATTER).atZone(ZoneId.systemDefault()).toInstant());
}
/**
* 日期时间字符串转换为日期时间(java.time.LocalDateTime)
*
* @param localDateTimeStr 日期时间字符串
* @param pattern 日期时间格式 例如:yyyy-MM-dd HH:mm:ss
* @return LocalDateTime 日期时间
*/
public static LocalDateTime parseLocalDateTime(String localDateTimeStr, String pattern) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
return LocalDateTime.parse(localDateTimeStr, dateTimeFormatter);
}
/**
* 日期字符串转换为日期(java.time.LocalDate)
*
* @param localDateStr 日期字符串
* @param pattern 日期格式 例如:yyyy-MM-dd
* @return LocalDate 日期
*/
public static LocalDate parseLocalDate(String localDateStr, String pattern) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
return LocalDate.parse(localDateStr, dateTimeFormatter);
}
/**
* LocalDate -> Date 转换
*
* @param localDate
* @return
*/
public static Date asDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
/**
* LocalDateTime -> Date 转换
*
* @param localDateTime
* @return
*/
public static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* Date -> LocalDate 转换
*
* @param date
* @return
*/
public static LocalDate asLocalDate(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();
}
/**
* Date -> LocalDateTime
*
* @param date 转换
* @return
*/
public static LocalDateTime asLocalDateTime(Date date) {
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
}
/**
* 把Date类型的日期转化成ZoneDateTime类型的日期
*
* @param date date类型日期
* @return ZoneDateTime类型日期
*/
private static ZonedDateTime asZonedDateTime(Date date) {
return ZonedDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
}
/**
* 把ZoneDateTime类型的日期转化成Date类型的日期
*
* @param zonedDateTime ZoneDateTime类型日期
* @return date类型日期
*/
private static Date asDate(ZonedDateTime zonedDateTime) {
return Date.from(zonedDateTime.toInstant());
}