java - Gson:为时间戳和时区设置日期格式化程序

标签 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 序列化器

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

最佳答案

GsonBuilder#setDateFormat(String) 使用提供的 String 作为创建 SimpleDateFormat 实例的参数。 SimpleDateFormat 不提供任何用于生成时间戳的模式。您将无法通过 setDateFormat 实现您想要的效果。自定义 TypeAdapter 似乎很合适。

关于java - Gson:为时间戳和时区设置日期格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707918/

相关文章:

java - 如何连接osgi框架(felix)

java - 在 Web 应用程序中部署模块

android - 如何摆脱 tabhost 中的水平滚动条?

Android - 如何在 Marshmallow 中打开默认手机应用程序屏幕

java - 如何从点的 ArrayList 中获取 GeoPoint?

java - 如何使用Gson将JSON转换为具有自定义字段名称的POJO

java - Android服务没有及时更新变量

Java swing下拉选择监听器

android - 如何在表面上绘制平滑的运动

java - 如何从 JSON 字符串中获取数据?