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.
Sí, java.time
funciona muy bien en dispositivos Android más antiguos y nuevos. Solo requiere al menos Java 6 .
org.threeten.bp
con subpaquetes. java.time
. java.time
se describió por primera vez. java.time
para Java 6 y 7 (ThreeTen for JSR-310). 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");