2012-01-27 86 views
1

我有一个JSON响应,其中包含一个时间戳,但我有一些问题解析它的日期对象。我也有同样的难题序列化为相同的格式。我使用Gson来解码对象的JSON响应,这是我有一个hicup的唯一现货。Java/JSON日期时间字段

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

我确实看了一下自定义的序列化/反序列化适配器,但是无法制作头部或尾部。

问候, EZFrag

+1

这似乎与http://stackoverflow.com/questions/4322541/how-to-convert-a-date-between-jackson-and-gson – stacker 2012-01-27 09:44:18

回答

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

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

附: +1和UpVote,如果你喜欢这个评论... – 2012-01-27 09:46:15

+0

哈哈!评论还是回答? – 2012-01-27 11:09:10