Java8中LocalDateTime时间序列化

143 阅读1分钟

解析字符串日期为LocalDateTime并指定转换时区

LocalDateTimeUtil.parse 方法的默认行为是将字符串解析为 LocalDateTime 对象,而不设置任何特定的时区。因此,解析后的 LocalDateTime 对象是无时区的,它只表示一个日期和时间的组合。

如果需要将解析后的日期时间转换为特定的时区,可以使用 atZonewithZoneSameInstant 方法。

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 参数的作用是针对带时区的日期时间类型(如 DateZonedDateTime 或 Instant),在序列化和反序列化时进行时区转换。

Date 类型,存储时间戳,使用 @JsonFormat 序列化时,如不指定timezone,则根据系统的默认时区格式化为字符串,如指定时区,则以指定时区为准格式化为字符串。

LocalDateTime 类型,使用 @JsonFormat 序列化时,不涉及时区转换,指定timezone无效,直接格式化为字符串。