java Jackson@JsonFormat转换日期的时区不正确

mftmpeh8  于 2023-03-16  发布在  Java
关注(0)|答案(4)|浏览(216)

我有一个来自JSON有效负载的值,如下所示:

"callStartTime" : "2019-03-27 13:00:00"

Entity.java

@JsonProperty("callStartTime")
@Column(name = "call_start_dt", nullable = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", lenient = OptBoolean.FALSE)
private Date callStartTime;

当我把它打印在控制台上时,它说:

Wed Mar 27 08:00:00 CDT 2019

我想和json payload里的一样。我该怎么修呢?
我只是从json中获取date并将其写入mysqldb的datetime列中。

6l7fqoea

6l7fqoea1#

**简单的解决方案:**我通过将数据类型更改为String来解决这个问题,这完成了我捕获来自JSON负载的值的目标。使用Date和其他数据类型将值转换为一些不同的时区。

@JsonProperty("callStartTime")
@Column(name = "call_start_dt", nullable = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", lenient = OptBoolean.FALSE)
private **String** callStartTime;
i86rm4rw

i86rm4rw2#

试试这个

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
private Date callStartTime;
5fjcxozz

5fjcxozz3#

java.util.Date不捕获时区数据。它只知道自纪元以来的米利斯数。
您可以尝试使用jackson-modules-java8中的某个模块,并将其反序列化为ZonedDateTime的一个示例,该示例可以识别时区。
编辑:试着把这个作为让它工作的基础:

public class SoTest {
    public static void main(String[] args) throws Exception {
        ObjectMapper om = new ObjectMapper().registerModule(new ParameterNamesModule())
                                            .registerModule(new JavaTimeModule());

        String s = "{\"callStartTime\" : \"2019-03-27T13:00:00Z\" }";

        MyType mt = om.readValue(s, MyType.class);

        System.out.println(mt.getCallStartTime());
    }
}

class MyType {
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssX", lenient = OptBoolean.FALSE)
    private ZonedDateTime callStartTime;

    public ZonedDateTime getCallStartTime() {
        return callStartTime;
    }

    public void setCallStartTime(ZonedDateTime date) {
        this.callStartTime = date;
    }

}
eeq64g8w

eeq64g8w4#

对此有两种可能的解决方案:

1.定义ObjectMapper bean并设置日期格式。

@Bean
public ObjectMapper objectMapper()
{
   ObjectMapper objectMapper = new ObjectMapper();

   DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   objectMapper.setDateFormat(df);
       return objectMapper;
}

2.使用@JsonFormat设置特定字段的日期格式

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", lenient = OptBoolean.FALSE)
private Date createTime;

相关问题