解析字符串日期为LocalDateTime并指定转换时区
LocalDateTimeUtil.parse 方法的默认行为是将字符串解析为 LocalDateTime 对象,而不设置任何特定的时区。因此,解析后的 LocalDateTime 对象是无时区的,它只表示一个日期和时间的组合。
如果需要将解析后的日期时间转换为特定的时区,可以使用 atZone 和 withZoneSameInstant 方法。
LocalDateTime activeTime =
// 将日期字符串解析为指定格式的LocalDateTime对象(hutool工具)
LocalDateTimeUtil.parse(response.getActiveTime(), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
// 将 LocalDateTime 转换为 ZonedDateTime,并设置时区为 UTC
.atZone(ZoneId.from(ZoneOffset.UTC))
// 将 ZonedDateTime 的时区转换为 Asia/Shanghai
.withZoneSameInstant(ZoneId.of("Asia/Shanghai"))
// 将 ZonedDateTime 转换为 LocalDateTime,去掉时区信息
.toLocalDateTime();
@JsonFormat注解格式化日期
@JsonFormat 的 timezone 参数:
timezone参数的作用是针对带时区的日期时间类型(如Date、ZonedDateTime或Instant),在序列化和反序列化时进行时区转换。
Date类型,存储时间戳,使用@JsonFormat序列化时,如不指定timezone,则根据系统的默认时区格式化为字符串,如指定时区,则以指定时区为准格式化为字符串。
LocalDateTime类型,使用@JsonFormat序列化时,不涉及时区转换,指定timezone无效,直接格式化为字符串。