如何将具有时区偏移量的 json 日期转换为 UTC,同时映射到控制器请求对象



我正在开发 Spring Boot 应用程序,我在 JSON 请求中有一个时区偏移量 (1968-07-21T23:00:00.000+02:00) 的日期,它被映射到一个 LocalDateTime 对象,该对象是包装器对象的一部分,没有任何问题。但是我希望日期在映射到控制器中的此请求对象时动态调整为 UTC。因此,在控制器中获取请求包装器对象后,此日期的值应为"1968-07-22T01:00:00.000+00:00",日期和时间会自动调整。

我已经为此尝试了几件事,但没有任何效果,到目前为止我尝试的几件事如下,

方法1:由于我使用的是杰克逊2,因此我注释了DTO日期字段,如下所示

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone="UTC")

方法2:我尝试自定义Jackson2ObjectMapperBuilderCustomizer,如下所示。

@Bean
public Jackson2ObjectMapperBuilderCustomizer init() {
return new Jackson2ObjectMapperBuilderCustomizer() {
  @Override
  public void customize(Jackson2ObjectMapperBuilder builder) {
    builder.timeZone(TimeZone.getTimeZone(ZoneOffset.UTC));
  }
 };
}

但以上两个都对我不起作用。如果还有其他方法可以实现此目的,请告诉我。提前谢谢。

LocalDateTime 是一个没有时区的 DateTime 字段。

从文档:

ISO-8601 日历系统中没有时区的日期时间,例如 2007-12-03T10:15:30。

请改用 ZonedDateTime。

在 ISO-8601 日历系统中具有时区的日期时间,例如 2007-12-03T10:15:30+01:00 欧洲/巴黎。

爪哇文档

使用 java.text 类来完成这项工作。

例如

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String date = format.format(new Date());

然后将其发送到您的用例。

最新更新