2012-01-27 6 views
1

У меня есть ответ JSON, который содержит метку времени, но у меня есть некоторые проблемы, анализирующие ее на объект даты. У меня такая же сложность, что и его повторное преобразование в тот же формат. Я использую Gson для декодирования ответов JSON на объекты, и это единственное место, с которым я сталкиваюсь.Java/JSON DateTime Fields

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

я посмотреть на пользовательские сериализации/десериализации адаптеров, но не мог сделать головы или хвосты от него.

Привет, EZFrag

+1

Это, кажется, связано http://stackoverflow.com/questions/4322541/how-to-convert-a-date-between-jackson-and-gson – stacker

ответ

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

P.S. +1 и UpVote, если вам нравится этот комментарий ... –

+0

haha! комментарий или ответ? –