2012-01-27 49 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