【问题标题】:Java/JSON DateTime FieldsJava/JSON 日期时间字段
【发布时间】:2012-01-27 09:40:20
【问题描述】:

我有一个包含时间戳的 JSON 响应,但在将其解析为日期对象时遇到了一些问题。我也有同样的困难将它序列化回相同的格式。我正在使用 Gson 解码对对象的 JSON 响应,这是我唯一遇到的问题。

    "TimeStamp":"\/Date(1327650052632+0000)\/"

我确实查看了自定义序列化/反序列化适配器,但无法从中得出正面或反面。

问候, EZFrag

【问题讨论】:

标签: java formatting timestamp gson


【解决方案1】:

我设法理解了适配器(有点)。这是我使用的代码:

private Gson createGson(){

    JsonSerializer<Date> ser = new JsonSerializer<Date>() {
          @Override
          public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext 
                     context) {
            return src == null ? null : new JsonPrimitive("\\/Date("+src.getTime()+"+0000)\\/");
          }
        };

        JsonDeserializer<Date> deser = new JsonDeserializer<Date>() {
          @Override
          public Date deserialize(JsonElement json, Type typeOfT,
              JsonDeserializationContext context) throws JsonParseException {
              String tmpDate = json.getAsString();

              Pattern pattern = Pattern.compile("\\d+");
              Matcher matcher = pattern.matcher(tmpDate);
              boolean found = false;

              while (matcher.find() && !found) {
                   found = true;
                    tmpDate = matcher.group();
              }


            return json == null ? null : new Date(Long.parseLong(tmpDate));
          }
        };


    return new GsonBuilder().serializeNulls()
            .registerTypeAdapter(Date.class, ser)
            .registerTypeAdapter(Date.class, deser).create();
}

【讨论】:

    【解决方案2】:

    JQuery 有这个方法。

    formatJSONDate(日期(result.dateFromJSON))

    或者你可以试试这个正则表达式。

    function parseJsonDate(jsonDate) {
        var offset = new Date().getTimezoneOffset() * 60000;
        var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);
    
        if (parts[2] == undefined)
          parts[2] = 0;
    
        if (parts[3] == undefined)
          parts[3] = 0;
    
        return new Date(+parts[1] + offset + parts[2]*3600000 + parts[3]*60000);
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      相关资源
      最近更新 更多