Jackson DateFormatter在不改变时间的情况下设置时区

问题描述 投票:0回答:1

杰克逊有问题。我在数据库中的日期格式如下:2018-01-01 13:00:00

我将数据库条目转换为“日期”对象。

我现在希望jackson objectmapper以下列格式打印出日期,如:2018-01-01T13:00:00.000 + 0200

现在我有以下代码来设置我的objectmapper

private static ObjectMapper init() {
    ObjectMapper mapper = new ObjectMapper();

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM dd'T'HH:mm:ss.SSSZ");
    dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
    mapper.setDateFormat(dateFormat);
    mapper.registerModule(new JavaTimeModule());
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    return mapper;
}

现在的问题是,日期打印出来像这样:2018-01-01T15:00:00.000 + 0200

格式化日期并添加时区信息时,它会计算新时间。我的所有日​​期都使用“欧洲/柏林”时区,但我不会将此信息保存在数据库中。

有没有办法在不改变时间的情况下添加时区信息?

问候

java jackson simpledateformat
1个回答
0
投票

解决方案是使用自定义DateFormat类,我可以在其中处理格式。

非常重要:您必须实现“克隆”方法。如果您使用Eclipse,它只会显示缺少格式和解析方法的错误。克隆方法丢失了,我在DateFormat类中得到了一些nullpointer异常。

mapper.setDateFormat(JsonDateFormat);

public class JsonDateFormat extends DateFormat implements Serializable, Cloneable {

    @Override
    public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
        // TODO DO STUFF
        return toAppendTo;
    }

    @Override
    public Date parse(String source, ParsePosition pos) {
        // TODO DO STUFF
        return null;
    }

    @Override
    public Object clone() {
        return new JsonDateFormat();
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.