studio parse dateformat java android parsing iso8601

java - parse - ISO 8601 Cadena a fecha/hora objeto en Android



simpledateformat calendar java (4)

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

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

¿Cómo puedo obtener esto en un objeto como la hora o la fecha? Inicialmente quiero imprimirlo en un formato diferente, pero necesitaré hacer otras cosas con él más tarde (es decir, tal vez usarlo en un formato diferente).

Aclamaciones


Esta pregunta se hizo en 2010, y en ese entonces era correcto que SimpleDateFormat o Joda-Time fueran las herramientas que debería usar. Hace ya bastante tiempo. Uso de hoy

Instant iStart = Instant.parse(dtStart);

Sí, es así de simple. Su cadena está en formato ISO 8601, y las clases de java.time , la API moderna de Java para fecha y hora, 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 bien en dispositivos Android más antiguos y más nuevos. Solo requiere al menos Java 6 .

  • En Java 8 y versiones posteriores, y en los dispositivos Android más nuevos (según me dicen del nivel 26 de API, 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 antiguo) Android use la edición de Android de ThreeTen Backport. Se llama ThreeTenABP. Y asegúrese de importar las clases de fecha y hora de org.threeten.bp con subpaquetes.

Campo de golf



Supongamos que desea calcular la diferencia de tiempo dados los valores separados por columnas.
terminar -> 15:24:04
inicio -> 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");


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 buscas. Hay una publicación existente sobre este problema.