我应该为日期格式 1418805300000-0100 使用什么模式? (时间戳和时区)
GsonBuilder().setDateFormat("?????????????-Z")
解决方案:
使用适配器创建新的 GSON
private static Gson createGson(){ return new GsonBuilder().disableHtmlEscaping() .registerTypeHierarchyAdapter(Date.class, new DateTimeSerializer()) .registerTypeHierarchyAdapter(Date.class, new DateTimeDeserializer()) .create(); } public static MyClass fromJson(String json) { return createGson().fromJson(json, MyClass.class); } public String toJson() { return createGson().toJson(this); }
JSON 序列化器
private static class DateTimeSerializer implements JsonSerializer<Date> { @Override public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { // hodgie code return new JsonPrimitive(src.getTime() + new SimpleDateFormat("Z").format(src)); } }
解串器
private static class DateTimeDeserializer implements JsonDeserializer<Date> { @Override public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { // hodgie code return new Date(Long.valueOf((json).getAsString().substring(0, 13))); } }
最佳答案
GsonBuilder#setDateFormat(String)
使用提供的 String
作为创建 SimpleDateFormat
实例的参数。 SimpleDateFormat
不提供任何用于生成时间戳的模式。您将无法通过 setDateFormat
实现您想要的效果。自定义 TypeAdapter
似乎很合适。
关于java - Gson:为时间戳和时区设置日期格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707918/