Поля даты / времени Java / JSON - PullRequest
1 голос
/ 27 января 2012

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

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

Я взглянул на собственные адаптеры сериализации / десериализации, но не смогне делайте из него головы или хвосты.

С уважением, EZFrag

Ответы [ 2 ]

1 голос
/ 30 января 2012

Мне удалось понять адаптеры (вроде). Вот код, который я использовал:

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 голосов
/ 27 января 2012

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