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)\/

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 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); } 
  • Enviando una solicitud POST con JSONArray usando Volley
  • Android devuelve cadena vacía HTTP
  • Generar listview desde JSON en android
  • Xamarin Android deserializa el archivo json local
  • Cómo anidar objetos al crear JSON con JSONObject
  • problema POST android JSONObject a PHP
  • Problema de desplazamiento Infinito Infinito de RecyclerView
  • Cómo enviar datos JSON ARRAY al servidor en Android
  • GCM Error = MissingRegistration enviando mensajes vía JSON
  • Análisis de JSON en android: desde la carpeta de recursos
  • Adaptación de adaptadores desde la vista de lista a la clase de vista de elemento único
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.