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

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

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

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

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

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

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

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

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

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

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

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

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

 {'timestamp':1265231402} 

Или, скорее всего,

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

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

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