2010-02-03 25 views
11

Estoy aprendiendo Java y escribiendo una aplicación de Android que consume un objeto JSON que pasa el servidor.JSON `date (...)` to `java.Util.Date` using` org.json`

Lo tengo todo funcionando, excepto las fechas.

que recibe una de estas vuelta

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

estoy usando org.json.JSONObject.

¿Cómo convierto SomeKey en un java.Util.Date?

Respuesta

8

El formato de fecha no es estándar en JSON, por lo que debe elegir cómo "pasarlo". Creo que el valor que estás viendo está en millis.

En Java:

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

Esto está en mi zona horaria, por supuesto, pero en cualquier caso es una fecha bastante reciente.

Desde el Javadoc del constructor Fecha:

Parámetros:
fecha - los milisegundos desde el 1 de enero de 1970 00:00:00 GMT.

enlace a los documentos aquí ->http://java.sun.com/javase/6/docs/api/java/util/Date.html#Date%28long%29

+0

Soy nuevo en el ava así, ¿cómo lo hago una expresión regular para obtener el valor? –

+0

No tiene que usar expresiones regulares, puede usar los métodos String para obtener una subcadena. Eche un vistazo a los documentos. – Yoni

2

Como ya se ha mencionado Yoni, JSON no define lo que es una fecha, o cómo serializar una. Al mirar el fragmento de JSON que publicó, parece que alguien se sintió demasiado creativo, serializando una fecha como esa.

Lo importante a tener en cuenta aquí es: a cualquier analizador JSON, esto es solo una cadena. La parte "Fecha (12345)" no tiene sentido. Tiene que analizarlo usted mismo en un java.util.Date, que en ese caso significa quitar todo lo que no sea un número, y usar el número (la hora de UNIX) para crear una instancia de java.util.Date.

Solo para el registro. Una forma típica de pasar una fecha utilizando JSON sería ya sea estándar RFC-2822

{'timestamp':1265231402} 

o más probablemente

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

El último ejemplo sería la fecha y hora actual (ya que estoy escribiendo esto) usando formateo, que se puede analizar fácilmente utilizando las utilidades de fecha de Java. Eche un vistazo a SimpleDateFormat para saber cómo analizar fechas en Java.

+1

Así es como los objetos .NET DateTime se serializan con el JsonSerialiser. –

14

Esto podría ayudar:

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