JSON `date (...)` to `java.Util.Date`, используя` org.json`

Я изучаю Java и пишу приложение для Android, которое использует объект JSON, который передается сервером.

У меня все работает, кроме дат.

Я получаю один из этих back

'SomeKey':'\/Date(1263798000000)\/'

Я использую org.json.JSONObject.

Как преобразовать SomeKey в java.Util.Date?

Ответ 1

Формат даты не является стандартным для JSON, поэтому вам нужно выбрать, как вы его проходите. Я думаю, что ценность, которую вы видите, находится в миллисе.

В Java:

System.out.println (new Date(1263798000000L));
// prints: Mon Jan 18 09:00:00 IST 2010

Это, конечно, в моем часовом поясе, но в любом случае это довольно недавняя дата.

Из javadoc конструктора Date:

Параметры:
дата - миллисекунды с 1 января 1970 года, 00:00:00 по Гринвичу.

Ссылка на документы здесь → http://java.sun.com/javase/6/docs/api/java/util/Date.html#Date%28long%29

Ответ 2

Это может помочь:

public static Date JsonDateToDate(String jsonDate)
{
    //  "/Date(1321867151710)/"
    int idx1 = jsonDate.indexOf("(");
    int idx2 = jsonDate.indexOf(")");
    String s = jsonDate.substring(idx1+1, idx2);
    long l = Long.valueOf(s);
    return new Date(l);
}

Ответ 3

Как уже упоминал Йони, JSON не определяет, что такое дата, или как ее сериализовать. Глядя на фрагмент JSON, который вы опубликовали, похоже, что кто-то чувствовал себя слишком творчески, сериализовал такую ​​дату.

Важно отметить, что для любого анализатора JSON это всего лишь строка. Часть "Дата (12345)" не имеет смысла. Вы должны проанализировать это самостоятельно в java.util.Date, который в этом случае означает удаление всего, что не является числом, и использование числа (время UNIX) для создания экземпляра java.util.Date.

Только для записи. Типичным способом передачи даты с использованием JSON будет либо

{'timestamp':1265231402}

или более вероятно

{'timestamp':'Wed, 03 Feb 2010 22:10:38 +0100'}

Последний пример - это текущая временная метка (как я ее пишу), используя стандартное форматирование RFC-2822, которое можно легко проанализировать с помощью утилиты Java date. Посмотрите SimpleDateFormat для того, как разбирать даты в Java.

Ответ 4

    public String FormartDate(String date) {
        Calendar calendar = Calendar.getInstance();
        String datereip = date.replace("/Date(", "").replace(")/", "");
        Long timeInMillis = Long.valueOf(datereip);
        calendar.setTimeInMillis(timeInMillis);

        String DateFmtI;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
        DateFmtI = simpleDateFormat.format(calendar.getTime());
        return DateFmtI;
    }