某次遇到不同模块给我送来的ZonedDateTime时间格式都不一样,我这边根据不同模块的类型new一个自定义的gson对象去解析json。
private Gson getMyGson() {
return new GsonBuilder().registerTypeAdapter(ZonedDateTime.class, new JsonDeserializer<ZonedDateTime>() {
@Override
public ZonedDateTime deserialize(JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
if (json == null) {
return null;
}
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").withZone(ZoneId.systemDefault());
return ZonedDateTime.from(fmt.parse(json.getAsString())).withZoneSameInstant(ZoneId.systemDefault());
}
}).registerTypeAdapter(ZonedDateTime.class, new JsonSerializer<ZonedDateTime>() {
@Override
public JsonElement serialize(ZonedDateTime zonedDateTime, Type type, JsonSerializationContext jsonSerializationContext) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
return new JsonPrimitive(fmt.format(zonedDateTime.truncatedTo(ChronoUnit.MILLIS)));
}
}).setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).setDateFormat("yyyy-MM-dd HH:mm:ss.SSS").create();
}