serialize localdatetime jsonformat example java json

localdatetime - Fecha JSON a la fecha de Java?



send date json java (3)

Esta pregunta ya tiene una respuesta aquí:

No pude encontrar esto en ninguna parte. Busco algunos JSON de una API que devuelve fechas JSON estándar. Puede ver el formato ejecutando este código en una consola de JavaScript:

> new Date().toJSON(); "2010-10-27T11:58:22.973Z"

Bueno, en realidad, la API con la que estoy trabajando no devuelve la parte en milisegundos, y algunas veces devuelve una zona horaria en lugar de Z , por lo que las fechas pueden parecerse a cualquiera de estas:

  • 2010-10-27T11:58:22Z
  • 2010-10-27T11:58:22+03:00

El análisis de este tipo de fechas es algo engorroso. ¿Hay alguna forma de analizar este tipo de fechas, usando org.json ?

Mi solución actual es:

public static Date parseDateTime(String dateString) { if (dateString == null) return null; DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"); if (dateString.contains("T")) dateString = dateString.replace(''T'', '' ''); if (dateString.contains("Z")) dateString = dateString.replace("Z", "+0000"); else dateString = dateString.substring(0, dateString.lastIndexOf('':'')) + dateString.substring(dateString.lastIndexOf('':'')+1); try { return fmt.parse(dateString); } catch (ParseException e) { Log.e(Const.TAG, "Could not parse datetime: " + dateString); return null; } }

¡Uf!


Ese formato de DateTime es en realidad ISO 8601 DateTime. JSON no especifica ningún formato particular para las fechas / horas. Si Google un poco, encontrará muchas implementaciones para analizarlo en Java.

Aquí hay uno

Si está abierto a usar algo más que las clases integradas de Fecha / Hora / Calendario de Java, también le sugiero Joda Time . Ofrecen (entre otras cosas) un ISODateTimeFormat para analizar este tipo de cadenas.


Si necesita admitir más de un formato, tendrá que ajustar el patrón de su entrada y analizar en consecuencia.

final DateFormat fmt; if (dateString.endsWith("Z")) { fmt = new SimpleDateFormat("yyyy-MM-dd''T''HH:mm:ss''Z''"); } else { fmt = new SimpleDateFormat("yyyy-MM-dd''T''HH:mm:ssZ"); }

Supongo que estás lidiando con un error en la API que estás usando y que ha citado el patrón de Z zona horaria en alguna parte ...


Tenga en cuenta que el formato de formato SimpleDateFormat Z es para la zona horaria RFC 822 y el patrón X para ISO 8601 (este estándar admite nombres de zona horaria de una sola letra como Z para Zulu).

Así que el new SimpleDateFormat("yyyy-MM-dd''T''HH:mm:ss.SSSX") produce un formato que puede analizar tanto "2013-03-11T01:38:18.309Z" como "2013-03-11T01:38:18.309+0000" y le dará el mismo resultado.

Desafortunadamente, por lo que puedo decir, no se puede obtener este formato para generar la versión de Z para Zulu, que es molesto.

De hecho, tengo más problemas en el lado de JavaScript para tratar con ambos formatos.