【问题标题】:Jackson JSON - Strip Timezone from Calendar object while deserializingJackson JSON - 在反序列化时从日历对象中剥离时区
【发布时间】:2016-01-05 23:23:44
【问题描述】:

我有杰克逊反序列化器将 json 字符串中的日期转换为日历对象。我在请求中传递了“2015-10-22”,并在将其转换为日历对象后将其转换为“2015-10-22-04:00”。有没有办法禁止发送时区?在使用 XMLGregorianCalendar 的场景中,我使用“date.setTimezone(DatatypeConstants.FIELD_UNDEFINED)”来抑制时区。

private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

@Override
public Calendar deserialize(JsonParser jsonparser, DeserializationContext arg1) throws IOException, JsonProcessingException {
    // TODO Auto-generated method stub
    String dateString = jsonparser.getText();
    try {

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(formatter.parse(dateString));
        return calendar;
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
}

【问题讨论】:

  • 不要使用Calendar。如果您不关心时区,java.time.LocalDate 似乎是合适的。

标签: java json spring spring-boot jackson


【解决方案1】:

没有发送时区,所以问“有没有办法禁止发送时区?”毫无意义。

Calendar.getInstance() 方法分配一个默认时区,参见 javadoc:

使用默认时区和语言环境获取日历。返回的Calendar 基于默认时区和默认语言环境中的当前时间。

然后您将“当前时间”替换为对setTime() 的调用,但时区和区域设置保持不变。

Calendar 对象将始终具有时区和语言环境。

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2019-03-05
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多