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
- Tutorial de Oracle: Fecha y hora explicando cómo usar
java.time
. - Solicitud de especificación de Java (JSR) 310 , donde se describió
java.time
por primera vez. - El proyecto ThreeTen Backport , el backport de
java.time
a Java 6 y 7 (ThreeTen para JSR-310). - ThreeTenABP , edición para Android de ThreeTen Backport
- Pregunta: Cómo usar ThreeTenABP en el proyecto de Android , con una explicación muy completa.
- Artículo de Wikipedia: ISO 8601
Puede usar el método de análisis SimpleDateFormat de Java o usar el DateTimeFormat de JodaTime para crear un DateTimeFormatter y analizar un objeto DateTime en consecuencia
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.