Analiza el formato de fecha de JSON en String usando GSON en Android
Estoy recibiendo muchas fechas de un feed de JSON.
Se parecen a esto: \/Date(1307972400000+0200)\/
- Convertir Json Array a una matriz Java normal
- Obtenga el objeto JSON uno por uno desde la matriz JSON en Android utilizando Retrofit y RxJava
- Error de puntero nulo en la tarea asíncrona
- Google Plus SignIn / oAuth2 - lanzamiento del lado del servidor TokenResponseException: 401 no autorizado
- Java: Vista previa de la solicitud HttpPost
Necesito analizar estas fechas en horas y minutos usando Java.
EDITAR:
Esto es lo lejos que he llegado:
String s = dateString.replaceAll("^/Date\\(" , "");
Esto me da la siguiente salida: 1307972400000+0200)/
¿Cómo puedo quitar el resto de esta cadena, cualquier sugerencia?
Quiero que le guste esto: 1307972400000L
- ¿Cómo analizar la respuesta de json usando Jackson en android?
- Crear json en android
- Que es mejor en términos de análisis de rendimiento en Android, XML o JSON?
- Volley Post JsonObjectRequest ignorando los parámetros mientras usa getHeader y getParams
- Sólo el hilo original que creó una jerarquía de vistas puede tocar su excepción de vistas
- Serializar objeto personalizado que contiene objetos JodaTime en JSON
- Crear objeto de la cadena Gson no funciona
- Enviar JSON al servidor vía HTTP poner solicitud en android
¿Cómo puedo quitar el resto de esta cadena, cualquier sugerencia?
Quiero que le guste esto: 1307972400000L
En sentido estricto, sólo se puede obtener la subcadena desde el principio hasta el carácter '+'.
String input = "/Date(1307972400000+0200)/"; String result = input.replaceAll("^/Date\\(" , ""); result = result.substring(0, result.indexOf('+')); System.out.println(new Long(result));
Es el feed de JSON del servicio .Net. Estoy usando este código:
public class GsonHelper { public static Gson createWcfGson() { GsonBuilder gsonb = new GsonBuilder(); gsonb.registerTypeAdapter(Date.class, new WcfDateDeserializer()); Gson gson = gsonb.create(); return gson; } private static class WcfDateDeserializer implements JsonDeserializer<Date>, JsonSerializer<Date> { public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/"; Pattern pattern = Pattern.compile(JSONDateToMilliseconds); Matcher matcher = pattern.matcher(json.getAsJsonPrimitive().getAsString()); String result = matcher.replaceAll("$2"); return new Date(new Long(result)); } @Override public JsonElement serialize(Date date, Type arg1, JsonSerializationContext arg2) { return new JsonPrimitive("/Date(" + date.getTime() + ")/"); } } }
Registra el serializador personalizado y el deserializador para el tipo de Date
. El uso es simple: Gson gson = GsonHelper.createWcfGson();
Y hacer lo que quieras.
Actualización: Lo sentimos, el ejemplo anterior no funciona con zonas horarias. Es más fácil utilizar Calendar
para tener en cuenta el desplazamiento de zona horaria. El código se verá así:
public class GsonHelper { public static Gson createWcfGson() { GsonBuilder gsonb = new GsonBuilder(); gsonb.registerTypeAdapter(Date.class, new WcfCalendarDeserializer ()); Gson gson = gsonb.create(); return gson; } public static class WcfCalendarDeserializer implements JsonDeserializer<Calendar>, JsonSerializer<Calendar> { public Calendar deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/"; Pattern pattern = Pattern.compile(JSONDateToMilliseconds); Matcher matcher = pattern.matcher(json.getAsJsonPrimitive().getAsString()); matcher.matches(); String tzone = matcher.group(3); String result = matcher.replaceAll("$2"); Calendar calendar = new GregorianCalendar(); calendar.setTimeZone(TimeZone.getTimeZone("GMT" + tzone)); calendar.setTimeInMillis(new Long(result)); return calendar; } @Override public JsonElement serialize(Calendar calendar, Type arg1, JsonSerializationContext arg2) { return new JsonPrimitive("/Date(" + calendar.getTimeInMillis() + ")/"); } } }
A continuación, puede utilizar el objeto Calendar
devuelto para obtener horas y minutos (y ajustar la zona horaria si es necesario).
calendar.get(Calendar.HOUR_OF_DAY); calendar.get(Calendar.MINUTE);
Para aumentar la respuesta aceptada por @Programmer Bruce puede simplemente utilizar esto:
public static Long getTime(String date) { if (Utils.isEmpty(date)) return -1l; String t = date.substring(date.indexOf('(') + 1); if (date.contains("+")) t = t.substring(0, t.indexOf('+')); else if (date.contains("-")) t = t.substring(0, t.indexOf('-')); else t = t.substring(0, t.indexOf(')')); return new Long(t); }
- Procesar el valor de preferencia antes de guardar en Android?
- Archivo Project.properties en lugar del archivo default.properties