解析Joda DateTime对象时,Gson省略了几个小时

时间:2016-09-22 12:29:16

标签: java android json gson jodatime

我从服务器收到的对象中有一个Joda DateTime字段。例如,字段值为2016-09-01T11:30:00.000+03:00。然后,在调用gson.toJson()时,该字段将转换为仅限日期的字符串2016-09-01

代码:

final GsonBuilder builder = new GsonBuilder().registerTypeAdapter(DateTime.class, new DateTimeSerializer());
final Gson gson = builder.create();
String str = gson.toJson(response.body());

调试时我注意到我的自定义类型适配器的serialize方法没有被调用。也许我没有正确理解这一点,但是我希望在将对象转换为JSON字符串时使用该方法(另一方面,在字符串上使用deserialize时调用gson.fromJson()

这是自定义类型适配器:

public class DateTimeSerializer implements JsonDeserializer<DateTime>, JsonSerializer<DateTime>
{
    private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.date();

    @Override
    public DateTime deserialize(final JsonElement je, final Type type, final JsonDeserializationContext jdc) throws JsonParseException {
        final String dateAsString = je.getAsString();
        return dateAsString.length() == 0 ? null : DATE_FORMAT.parseDateTime(dateAsString);
    }

    @Override
    public JsonElement serialize(final DateTime src, final Type typeOfSrc,
                                 final JsonSerializationContext context) {
        return new JsonPrimitive(src == null ? "" : DATE_FORMAT.print(src));
    }
}

知道为什么会这样解析以及如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:0)

正如评论中所述,我使用ISODateTimeFormat.date()代替ISODateTimeFormat.dateTime()