杰克逊有问题。我在数据库中的日期格式如下: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
格式化日期并添加时区信息时,它会计算新时间。我的所有日期都使用“欧洲/柏林”时区,但我不会将此信息保存在数据库中。
有没有办法在不改变时间的情况下添加时区信息?
问候
解决方案是使用自定义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();
}
}