从Joda DateTime对象访问原始本地时间



我有下面的JSON字符串,它正在被转换为Joda DateTime对象(使用Jackson)

"2015-08-02T11:30:00.000+01:00"

使用以下代码打印时间

DateTimeFormatter timeFmt = DateTimeFormat.forPattern("HH:mm");
String timePart = timeFmt.print(dt);

我得到:

10:30

这是正确的UTC时间。

然而,我希望能够打印出原始的本地时间

11:30

我如何从我的日期-时间对象中获得这个(甚至是+01:00的原始偏移量)?

谢谢,

Kenny

好的,我终于找到了解决方案。它不是最优雅的,我宁愿在应用程序context.xml中注册自定义对象映射器,但无法正常工作。。

无论如何,我在反序列化过程中返回UTC的原因是Jackson提供的DateTime反序列化程序故意做的:

public ReadableInstant deserialize(JsonParser jp, DeserializationContext ctxt)
        throws IOException, JsonProcessingException
    {
        JsonToken t = jp.getCurrentToken();
        if(t == JsonToken.VALUE_NUMBER_INT)
            return new DateTime(jp.getLongValue(), DateTimeZone.UTC);
        if(t == JsonToken.VALUE_STRING)
        {
            String str = jp.getText().trim();
            if(str.length() == 0)
                return null;
            else
                return new DateTime(str, DateTimeZone.UTC);
        } else
        {
            throw ctxt.mappingException(getValueClass());
        }
    }

所以我创建了一个自定义的对象映射

public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
    SimpleModule module = new SimpleModule("DateTime", Version.unknownVersion());
    module.addDeserializer(DateTime.class, new dateDeserializer());
    super.registerModule(module);
}
public class dateDeserializer extends JsonDeserializer<DateTime> {
    @Override
    public DateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
  JsonToken t = jp.getCurrentToken();
  String str = jp.getText().trim();
  if (str.length() == 0) {
    return null;
  }
  else {
    DateTimeFormatter formatter = ISODateTimeFormat.dateTime().withOffsetParsed();
    return formatter.parseDateTime(str);
  }
    }
}

}

然后将其注册到其他模板

private MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter() {
    MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter();
    converter.setObjectMapper(new CustomObjectMapper());
    return converter;
}
restTemplate.getMessageConverters().add(0, mappingJacksonHttpMessageConverter());

如果有人对此有任何改进或想法,我很乐意听到。

谢谢,

Kenny

相关内容

  • 没有找到相关文章

最新更新