Gson:设置时间戳和时区的日期格式

时间:2014-12-30 15:13:48

标签: java android gson

我应该使用哪种模式作为日期格式1418805300000-0100? (时间戳和时区)

GsonBuilder().setDateFormat("?????????????-Z")

解决方案:

  1. 使用适配器创建新的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);
    }
    
  2. JSON Serializer

    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));
        }
    }
    
  3. 解串器

    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)));
        }
    }
    

1 个答案:

答案 0 :(得分:1)

GsonBuilder#setDateFormat(String)使用String作为参数创建SimpleDateFormat个实例。 SimpleDateFormat未提供用于生成时间戳的任何模式。 setDateFormat您将无法实现所需目标。自定义TypeAdapter似乎合适。