Objeto ISO 8601 String to Date / Time en Android

Tengo una cadena en el formato estándar ISO 8601 que contiene la fecha / hora devuelta desde un servicio web como sigue:

String dtStart = "2010-10-15T09:27:37Z" 

¿Cómo puedo obtener esto en un objeto como Hora o Fecha? Inicialmente quiero imprimirlo en un formato diferente, pero necesitaré hacer otras cosas más tarde (es decir, usarlo en un formato diferente).

Aclamaciones

 String dtStart = "2010-10-15T09:27:37Z"; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); try { Date date = format.parse(dtStart); System.out.println(date); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Esto es lo que estás buscando. Existe una publicación existente sobre este problema.

Esta pregunta se realizó en 2010, y en aquel momento era correcto que SimpleDateFormat o Joda-Time serían las herramientas que debería usar. Hace bastante tiempo. Hoy usa

  Instant iStart = Instant.parse(dtStart); 

Sí, es así de simple. Su cadena está en formato ISO 8601, y las clases de java.time , la moderna API de fecha y hora de Java, analizan ISO 8601 sin ningún formateador explícito. Instant es solo una de esas clases.

Pregunta: ¿Puedo usar java.time en Android?

Sí, java.time funciona muy bien en dispositivos Android más antiguos y nuevos. Solo requiere al menos Java 6 .

  • En Java 8 y versiones posteriores y en dispositivos Android más nuevos (desde el nivel 26 de la API, según me dicen), la API moderna viene incorporada.
  • En Java 6 y 7, obtenga el ThreeTen Backport, el backport de las nuevas clases (ThreeTen para JSR 310, vea los enlaces en la parte inferior).
  • En (más viejo) Android usa la edición Android de ThreeTen Backport. Se llama ThreeTenABP. Y asegúrese de importar las clases de fecha y hora desde org.threeten.bp con subpaquetes.

Campo de golf

  • Tutorial de Oracle: Fecha y hora explicando cómo usar java.time .
  • Solicitud de especificación de Java (JSR) 310 , donde java.time se describió por primera vez.
  • El proyecto ThreeTen Backport , el backport de java.time para Java 6 y 7 (ThreeTen for JSR-310).
  • ThreeTenABP , edición Android de ThreeTen Backport
  • Pregunta: Cómo usar ThreeTenABP en Android Project , con una explicación muy completa.
  • Artículo de Wikipedia: ISO 8601

Puede utilizar el método de análisis SimpleDateFormat de Java o usar DateTimeFormat de JodaTime para crear un DateTimeFormatter y analizar un objeto DateTime en consecuencia

Supongamos que le gustaría calcular la diferencia de tiempo dado los valores separados de la columna.
terminar -> 15:24:04
comenzar -> 09:27:37
Sin usar Date y SimpleDateFormat , lo hice de esta manera:

 String tStart = "09:27:37"; String tFinish = "15:24:04"; String[] sTimeHourMinSec = tStart.split(":"); int sHour = Integer.valueOf(sTimeHourMinSec[0]); int sMin = Integer.valueOf(sTimeHourMinSec[1]); int sSec = Integer.valueOf(sTimeHourMinSec[2]); String[] fTimeHourMinSec = tFinish.split(":"); int fHour = Integer.valueOf(fTimeHourMinSec[0]); int fMin = Integer.valueOf(fTimeHourMinSec[1]); int fSec = Integer.valueOf(fTimeHourMinSec[2]); int diffTotSec = (fHour - sHour) * 3600 + (fMin - sMin) * 60 + (fSec - sSec); int diffHours = diffTotSec / 3600; int diffMins = (diffTotSec % 3600) / 60; int diffSecs = (diffTotSec % 3600) % 60; System.out.println("Difference: " + diffHours + " h " + diffMins + " m " + diffSecs + " sec");