Configurar Gson para usar varios formatos de fecha
Ahora que cuando quiero decir a gson cómo analizar las fechas que hago:
Gson gson= new GsonBuilder().setDateFormat("yyyy-MM-dd hh:mm").create();
Pero también tengo campos con sólo la fecha, y otros sólo con el tiempo, y quiero que ambos se almacenen como objetos de fecha. ¿Cómo puedo hacer esto?
- Serializar parámetro de consulta en Retrofit
- Convierta GsonBuilder en Kotlin
- Json a clases de datos kotlin
- ¿Cómo puedo especificar la serialización con GSON?
- JSON a ListView en Android con Gson
- Gson deserializa json con diferentes tipos de valor
- Uso de Gson y Retrofit 2 para deserializar las complejas respuestas de la API
- GSON lanzando "esperado esperaba un nombre pero era NUMBER en la línea 1 columna 8"?
- Retrofit - eliminando algunos caracteres inválidos del cuerpo de respuesta antes de analizarlo como json
- ¿Por qué no encontrar android en com.google.gson.Gson
- No se puede resolver la importación com.google.api.client.json.gson.GsonFactory
- Error json de Android com.google.gson.JsonSyntaxException: java.lang.IllegalStateException
- Parsing Gson con Json no funciona para Android
Este serializador / deserializador personalizado puede manejar múltiples formatos. Primero puede intentar analizar en un formato, y si falla, intente con un segundo formato. Esto también debe manejar fechas nulas sin explotar también.
public class GsonDateDeSerializer implements JsonDeserializer<Date> { ... private SimpleDateFormat format1 = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a"); private SimpleDateFormat format2 = new SimpleDateFormat("HH:mm:ss"); ... @Override public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { try { String j = json.getAsJsonPrimitive().getAsString(); return parseDate(j); } catch (ParseException e) { throw new JsonParseException(e.getMessage(), e); } } private Date parseDate(String dateString) throws ParseException { if (dateString != null && dateString.trim().length() > 0) { try { return format1.parse(dateString); } catch (ParseException pe) { return format2.parse(dateString); } } else { return null; } } }
Espero que ayude, buena suerte con su proyecto.
GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, new GsonDateDeSerializer()); gson = builder.create();
Por encima del código se aplicará el nuevo GsonDateDeSerializer creado como GSON Date serializador que fue creado por @reggoodwin
- ¿Qué debo poner en el atributo contentDescription para las imágenes decorativas como el separador de campo?
- Cómo ejecutar la aplicación C ++ en Android SHELL