Saltar al contenido

GSON – Formato de fecha

Luego de consultar expertos en la materia, programadores de deferentes ramas y maestros dimos con la solución a la interrogande y la dejamos plasmada en este post.

Solución:

Parece que necesita definir formatos para la parte de fecha y hora o usar formato basado en cadenas. Por ejemplo:

Gson gson = new GsonBuilder()
   .setDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").create();

o usando java.text.DateFormat

Gson gson = new GsonBuilder()
   .setDateFormat(DateFormat.FULL, DateFormat.FULL).create();

o hacerlo con serializadores:

Creo que los formateadores no pueden producir marcas de tiempo, pero este par serializador/deserializador parece funcionar

JsonSerializer ser = new JsonSerializer() 
  @Override
  public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext 
             context) 
    return src == null ? null : new JsonPrimitive(src.getTime());
  
;

JsonDeserializer deser = new JsonDeserializer() 
  @Override
  public Date deserialize(JsonElement json, Type typeOfT,
       JsonDeserializationContext context) throws JsonParseException 
    return json == null ? null : new Date(json.getAsLong());
  
;

Gson gson = new GsonBuilder()
   .registerTypeAdapter(Date.class, ser)
   .registerTypeAdapter(Date.class, deser).create();

Si usa Java 8 o superior, debe usar los serializadores/deserializadores anteriores de esta manera:

JsonSerializer ser = (src, typeOfSrc, context) -> src == null ? null
            : new JsonPrimitive(src.getTime());

JsonDeserializer deser = (jSon, typeOfT, context) -> jSon == null ? null : new Date(jSon.getAsLong());

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create();

El formato anterior me parece mejor ya que tiene una precisión de hasta milisegundos.

Como señaló ML, JsonSerializer funciona aquí. Sin embargo, si está formateando entidades de base de datos, use java.sql.Date para registrar su serializador. No se necesita deserializador.

Gson gson = new GsonBuilder()
   .registerTypeAdapter(java.sql.Date.class, ser).create();

Este informe de error puede estar relacionado: http://code.google.com/p/google-gson/issues/detail?id=230. Sin embargo, uso la versión 1.7.2.

valoraciones y comentarios

Tienes la opción de añadir valor a nuestro contenido informacional añadiendo tu veteranía en las crónicas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *