tl; dr
Instant.parse ("2010-04-05T17:16:00Z")
ISO 8601 Estándar
la cadena cumple con la ISO 8601 estándar (de los cuales el mencionado RFC 3339 es un perfil).
Evitar j.u.Date
Las clases java.util.Date y .calendar incluido con Java son notoriamente molesto. Evítales.
En su lugar, utilice la biblioteca Joda-Time o el nuevo paquete java.time en Java 8. Ambos utilizan ISO 8601 como valores predeterminados para analizar y generar representaciones de cadena de valores de fecha y hora.
java.time
El marco java.time incorporado en Java 8 y posterior suplanta las viejas clases java.util.Date/.Calendar problemáticos. Las nuevas clases están inspiradas en el exitoso marco Joda-Time, diseñado como su sucesor, similar en concepto pero rediseñado. Definido por JSR 310. Ampliado por el proyecto ThreeTen-Extra. Vea el Tutorial.
La clase Instant
en java.time representa un momento en la línea de tiempo en UTC zona horaria.
El Z
al final de su cadena de entrada significa Zulu
que significa UTC
. Dicha cadena se puede analizar directamente mediante la clase Instant
, sin necesidad de especificar un formateador.
String input = "2010-04-05T17:16:00Z";
Instant instant = Instant.parse (input);
Volcar a la consola.
System.out.println ("instant: " + instant);
instantánea: 2010-04-05T17: 16: 00Z
Desde allí se puede aplicar una zona horaria (ZoneId
) para ajustar esta Instant
en un ZonedDateTime
. Búsqueda de desbordamiento de pila para discusión y ejemplos.
Si debe usar un objeto java.util.Date
, puede realizar la conversión llamando a los nuevos métodos de conversión agregados a las clases antiguas, como el método estático java.util.Date.from(Instant)
.
java.util.Date date = java.util.Date.from(instant);
Joda-Time
Ejemplo en Joda-Time 2.5.
Convertir a UTC.
DateTime dateTimeUtc = dateTime.withZone(DateTimeZone.UTC);
Convierta a un java.util.Date si es necesario.
java.util.Date date = dateTime.toDate();
El sufijo 'Z' en el sello de tiempo no debe confundirse con Z o z en el patrón. En java 7 puede analizar un sufijo ISO8601 con SimpleDateFormat usando la letra de patrón 'X'. –
FYI, las viejas clases problemáticas de fecha y hora como 'SimpleTextFormat' ahora son [legacy] (https://en.wikipedia.org/wiki/Legacy_system), suplantadas por [java.time] (https: // docs .oracle.com/javase/8/docs/api/java/time/package-summary.html) clases. Consulte [Tutorial de Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –