【问题标题】:Date changed after serialize Object to String with Jackson Json使用 Jackson Json 将对象序列化为字符串后更改日期
【发布时间】:2016-01-27 10:29:19
【问题描述】:

我有点困惑。我需要将一个对象序列化为一个 json 字符串。我使用Jackson 作为库。

我的 Pojo 类 Stage 有一个属性 fromDate 和它的一个 util.date

public class Stage {

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy", timezone="UTC+1")
private Date fromDate;
... 

在序列化之前,fromDate 有这个值:Wed May 11 00:00:00 CEST 2016

我的序列化方法如下所示:

 public static String serialize(Stages stages) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(stages);
        return s;
    }

但是在序列化我的对象之后,json 字符串中的 dateFrom 具有这个值: ..."fromDate":"10.05.2016"... 。所以日期是错误的。

我使用了@JsonFormat 的模式,也尝试了ObjectMapper 配置。

public static String serialize(Stages stages) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    SimpleDateFormat dateFormat = new SimpleDateFormat(Util.SDF_dd_mm_yyyy);
    objectMapper.setDateFormat(dateFormat);
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC+1"));
    String s = objectMapper.writeValueAsString(stages);
    return s;
}

但日期不是我预期的:..."fromDate":"11.05.2016"...

我做错了什么?

【问题讨论】:

    标签: java json serialization jackson


    【解决方案1】:

    我认为这只是另一个时区问题。序列化日期看起来像是 UTC(?),所以你看到 10.05 实际上是正确的,因为 2016-11-05 00:00 UTC+1 实际上是 2016-10-05 23:00 UTC..

    您可能应该尝试调整您正在读取此序列化值的代码,以考虑日期已被序列化的时区。

    【讨论】:

    • 我查了一下日期在哪个时区,是CET。将时区更改为 timezone="CET" 并且它工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 2015-03-23
    • 2022-01-08
    • 2017-08-02
    • 2021-01-01
    • 2019-08-21
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多