我正在使用Spring Boot应用程序,并且在JSON请求中有一个带时区偏移量的日期(1968-07-21T23:00:00.000 + 02:00),并且它已映射到LocalDateTime对象,该对象是包装对象没有任何问题。但是我希望日期在映射到控制器中的此请求对象时可以动态调整为UTC。因此,在控制器中获取请求包装对象之后,该日期的值应为“ 1968-07-22T01:00:00.000 + 00:00”,日期和时间会自动调整。
我为此尝试了几件事,但没有任何效果,到目前为止,我尝试过的事情如下:
方法1:由于我使用的是Jackson 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));
}
};
}
但是以上两种方法都不适合我。请让我知道是否还有其他方法可以实现此目的。预先感谢。
答案 0 :(得分:0)
LocalDateTime是没有时区的DateTime字段。
摘自文档:
ISO-8601日历系统中没有时区的日期时间,例如2007-12-03T10:15:30。
改为使用ZonedDateTime。
ISO-8601日历系统中带有时区的日期时间,例如2007-12-03T10:15:30 + 01:00欧洲/巴黎。
答案 1 :(得分:0)
使用java.text类来完成这项工作。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
String date = format.format(new Date());
然后将其发送到您的用例。