JSON `date (...)` to `java.Util.Date` используя` org.json` - PullRequest
11 голосов
/ 03 февраля 2010

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

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

Я получаю один из них обратно

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

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

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

Ответы [ 4 ]

14 голосов
/ 21 ноября 2011

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

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);
}
8 голосов
/ 03 февраля 2010

Формат даты не является стандартным в 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 голосов
/ 04 февраля 2010

Как уже упоминал Йони, 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. Посмотрите на SimpleDateFormat , как разобрать даты в Java.

0 голосов
/ 19 июля 2016
    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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...