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