package com.ruoyi.payment.wx.utils;
|
|
import org.joda.time.DateTime;
|
import org.joda.time.DateTimeZone;
|
import org.springframework.util.StringUtils;
|
|
import java.time.Instant;
|
import java.time.LocalDateTime;
|
import java.time.ZoneId;
|
import java.time.ZonedDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.Date;
|
import java.util.Objects;
|
import java.util.TimeZone;
|
|
/**
|
* @author xiaochen
|
* @ClassName WxTimeUtils
|
* @Description
|
* @date 2021-12-16 16:07
|
*/
|
public class WxTimeUtils {
|
/**
|
* 系统默认时区
|
*/
|
private static final ZoneId ZONE = ZoneId.systemDefault();
|
/**
|
* yyyy-MM-dd'T'HH:mm:ssxxx 比如:2020-05-23T17:06:30+08:00 0时区时末尾 为+00:00
|
*/
|
public static final DateTimeFormatter YYYY_MM_DD_T_HH_MM_SS_XXX_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
|
/**
|
* yyyy-MM-dd HH:mm:ss 比如:2020-05-23 17:06:30
|
*/
|
public static final DateTimeFormatter YYYY_MM_DD_HH_MM_SS_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZONE);
|
|
/**
|
* 时间转 TimeZone
|
*
|
* @param date
|
* @return
|
* @throws Exception
|
*/
|
public static String dateToTimeZone(Date date) throws Exception {
|
String time;
|
if (date == null) {
|
throw new Exception("date is not null");
|
}
|
ZonedDateTime zonedDateTime = toZonedDateTime(date);
|
time = format(zonedDateTime, YYYY_MM_DD_T_HH_MM_SS_XXX_FMT);
|
return time;
|
}
|
|
/**
|
* Date转ZonedDateTime,时区为系统默认时区
|
*
|
* @param date Date
|
* @return ZonedDateTime
|
*/
|
public static ZonedDateTime toZonedDateTime(Date date) {
|
Objects.requireNonNull(date, "date");
|
return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault());
|
}
|
|
/**
|
* 根据 formatter格式化 zonedDateTime
|
*
|
* @param zonedDateTime ZonedDateTime
|
* @param formatter DateTimeFormatter
|
* @return String
|
*/
|
public static String format(ZonedDateTime zonedDateTime, DateTimeFormatter formatter) {
|
Objects.requireNonNull(zonedDateTime, "zonedDateTime");
|
Objects.requireNonNull(formatter, "formatter");
|
return zonedDateTime.format(formatter);
|
}
|
|
|
/**
|
* TimeZone 时间转标准时间
|
*
|
* @param date
|
* @return
|
* @throws Exception
|
*/
|
public static String toTimeZoneStr(String date) {
|
String time;
|
if (!StringUtils.hasLength(date)) {
|
throw new RuntimeException("str is not null");
|
}
|
ZonedDateTime zonedDateTime = parseToZonedDateTime(date, YYYY_MM_DD_T_HH_MM_SS_XXX_FMT);
|
if (zonedDateTime == null) {
|
throw new RuntimeException("str to zonedDateTime fail");
|
}
|
time = zonedDateTime.format(YYYY_MM_DD_HH_MM_SS_FMT);
|
return time;
|
}
|
|
/**
|
* 转date
|
*
|
* @param date
|
* @return
|
* @throws Exception
|
*/
|
public static Date toDate(String date) {
|
String time;
|
if (!StringUtils.hasLength(date)) {
|
throw new RuntimeException("str is not null");
|
}
|
ZonedDateTime zonedDateTime = parseToZonedDateTime(date, YYYY_MM_DD_T_HH_MM_SS_XXX_FMT);
|
if (zonedDateTime == null) {
|
throw new RuntimeException("str to zonedDateTime fail");
|
}
|
return Date.from(zonedDateTime.toInstant());
|
}
|
|
/**
|
* str --> Date
|
*
|
* @param date
|
* @return java.util.Date
|
* @author xiaochen
|
* @date 2022-01-20 18:20
|
*/
|
public static Date toRfc3339Date(String date) {
|
DateTime dt2 = new DateTime(date);
|
return dt2.toDate();
|
}
|
|
/**
|
* 将 Date 转为 LocalDateTime
|
*
|
* @param date
|
* @return java.time.LocalDateTime;
|
*/
|
public static LocalDateTime dateToLocalDateTime(Date date) {
|
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
}
|
|
|
/**
|
* str --> Date
|
*
|
* @param date
|
* @return java.util.Date
|
* @author xiaochen
|
* @date 2022-01-20 18:20
|
*/
|
public static String toRfc3339Str(Date date) {
|
DateTime dt1 = new DateTime(new Date(), DateTimeZone.forTimeZone(TimeZone.getTimeZone("Asia/Shanghai")));
|
return dt1.toString();
|
}
|
|
/**
|
* 根据 formatter解析为 ZonedDateTime
|
*
|
* @param text 待解析字符串
|
* @param formatter DateTimeFormatter
|
* @return ZonedDateTime
|
*/
|
public static ZonedDateTime parseToZonedDateTime(String text, DateTimeFormatter formatter) {
|
return ZonedDateTime.parse(text, formatter);
|
}
|
}
|