0

我正在使用杰克逊配置器来序列化 - 反序列化日期。

我正在使用这个

SerializationConfig serConfig = mapper.getSerializationConfig();
serConfig.setDateFormat(new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z"));

DeserializationConfig deserializationConfig = mapper.getDeserializationConfig();
deserializationConfig.setDateFormat(new SimpleDateFormat("MM/dd/yyyy HH:mm:ss z"));

现在,如果我通过10/10/2013 02:30:00 EST它,它允许我这样做,但10/10/2013 02:30:00会给我错误。

如何让配置器同时解析两者?

4

1 回答 1

1

您不应该在没有时区的情况下传递日期时间。这样做是胡说八道,毫无意义。就像保存没有区号的本地电话号码一样。

Jackson 应按UTC时区保存其日期。这意味着根本没有时区。因此,您传递的日期时间必须有一个时区,以便杰克逊可以将值调整为 UTC。我实际上不知道或使用杰克逊,但这就是它的医生所说的。

如果传递日期时间的代码知道或可以推断或推断时区,它应该这样做并附加一个时区。

如果您传递的日期时间已经是 UTC,则为Zulu添加一个“Z”时区。

注意:使用 3 个字母的时区代码不是一个好习惯。它们没有标准化,经常有重复。您示例中的 EST 值表示全球至少 3 个时区:美国、澳大利亚和巴西。请改用时区名称

提示:如果您在 Java 中处理日期,请获取第三方Joda-Time库,而不是使用 java.util.Date/Calendar 类。

于 2013-12-03T18:22:28.630 回答