2010-02-03 4 views
11

Я изучаю Java и записываю приложение для Android, которое использует объект JSON, который передается сервером.JSON `date (...)` to `java.Util.Date` using` org.json`

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

я один из них назад

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

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

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

ответ

8

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

В Java:

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

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

С Javadoc из конструктора Date:

Параметры:
дата - миллисекунды с 1 января 1970, 00:00:00 GMT.

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

+0

Я новичок в Ava, а также, как я делаю регулярное выражение, чтобы получить значение? –

+0

Вам не нужно использовать регулярные выражения, вы можете использовать методы String для получения подстроки. Взгляните на документы. – Yoni

2

Как Йони уже упоминалось, 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.

+1

Вот как объекты .NET DateTime становятся сериализованными с помощью JsonSerialiser. –

14

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

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