package com.yn.bftl.thirdparty.common.util; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import org.joda.time.DateTime; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.Locale; /** * @Author:Vance * @Description: * @Date:2023/3/2 13:34 */ public class DateTimeUtils { /** * 时间转化 * * @param dateStr RFC3339格式时间 * @return LocalDateTime * @description * @author huabiao * @create 2022/12/28 11:24 */ public static LocalDateTime getLocalDateTimeByRFC3339(String dateStr) { DateTime dateTime = new DateTime(dateStr); long timeInMillis = dateTime.toCalendar(Locale.getDefault()).getTimeInMillis(); ZoneId zoneId = ZoneId.systemDefault(); return Instant.ofEpochMilli(timeInMillis).atZone(zoneId).toLocalDateTime(); } public static LocalDateTime getLocalDateTimeByRFC3339Str(String dateStr) { // 给定的字符串格式化 ZoneId zoneId = ZoneId.of("GMT+08:00"); // 解析带有时区的日期时间字符串 ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateStr, java.time.format.DateTimeFormatter.ISO_ZONED_DATE_TIME); // 将ZonedDateTime转换为LocalDateTime return zonedDateTime.withZoneSameInstant(zoneId).toLocalDateTime(); } public static String setDateTimeToRFC3339(String dateStr) { if(ObjectUtil.isNotEmpty(dateStr)) { return DateUtil.format(Convert.toLocalDateTime(dateStr) ,"yyyy-MM-dd'T'HH:mm:ssXXX"); } else { return null; } } public static String getDateTimeToRFC3339(String dateStr ) { if(ObjectUtil.isNotEmpty(dateStr)) { return getDateTimeToRFC3339( dateStr,"yyyyMMddHHmmss"); } else { return null; } } public static String getDateTimeToRFC3339(String dateStr, String pattern ) { // 定义日期格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); // 解析原始字符串为 LocalDateTime LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(dateStr)); // 转换为 系统默认 时区的 ZonedDateTime ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId); // 使用 ISO 8601 标准的 DateTimeFormatter 格式化时间 DateTimeFormatter rfc3339Formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME; return zonedDateTime.format(rfc3339Formatter); } }