我对杰克逊有问题。 我在数据库中有以下格式的日期: 2018-01-01 13:00:00
我将数据库条目转换为“日期”对象。
我现在希望杰克逊对象映射器以以下格式打印日期: 2018-01-01T13:00:00.000 + 0200
现在,我有以下代码在其中设置对象映射器
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
格式化日期并添加时区信息时,它会计算新时间。我所有的日期都使用“欧洲/柏林”时区,但我没有将此信息与数据库一起保存。
有什么方法可以在不更改时间的情况下添加时区信息?
致谢
答案 0 :(得分: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();
}
}