convert - iso 8601 date format java
Cómo convertir la fecha ISO 8601(cadena) a la fecha? (3)
Estoy analizando el archivo XML. En este archivo hay una etiqueta que contiene la cadena de fecha "2008-11-10T05:51:33Z"
y quiero convertir esta cadena en el java.util.Date object.
¿Cómo puede hacerse esto?
Use java.text.DateFormat , o más probablemente, SimpleDateFormat .
Alternativamente, elija Joda Time con su API infinitamente mejor. Tenga cuidado con las API integradas de Java. DateFormats no es seguro para subprocesos. (Están en Joda Time, que usa tipos inmutables en casi todas partes).
Un ejemplo (no probado, debería estar bien, excepto posiblemente el bit de zona horaria) para la API de tiempo de Joda:
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyyMMdd''T''HH:mm:ssZ");
DateTime dt = fmt.parse("2008-11-10T05:51:33Z");
DateTime dateToGetFromString;
dateToGetFromString = DateTime.Parse(stringContainingDate);
También puede usar la función TryParse de la clase DateTime, consulte la documentación.
tl; dr
Instant.parse( "2008-11-10T05:51:33Z" )
Usando java.time
El enfoque moderno usa las clases java.time. Evite las clases problemáticas antiguas de fecha y hora, como Date
y Calendar
ya que ahora están suplantadas por las clases de java.time.
ISO 8601
Su cadena de entrada cumple con el estándar ISO 8601 para formatear cadenas que representan valores de fecha y hora. Las clases java.time utilizan los formatos estándar de forma predeterminada al analizar / generar cadenas, por lo que no es necesario especificar un patrón de formateo.
La Z
en el extremo es corta para Zulu
y significa UTC.
La clase Instant
representa un momento en la línea de tiempo en UTC con una resolución de nanosegundos (hasta nueve (9) dígitos de una fracción decimal).
Instant instant = Instant.parse( "2008-11-10T05:51:33Z" ) ;
java.util.Date
Lo mejor es evitar la antigua clase heredada java.util.Date
. Pero si debe, puede convertir a / desde java.time llamando a nuevos métodos agregados a las clases antiguas. Aquí usamos Date.from
.
java.util.Date d = java.util.Date.from( instant ) ;
Acerca de java.time
El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las problemáticas antiguas clases heredadas de fecha y hora como java.util.Date
, Calendar
y SimpleDateFormat
.
El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .
Para obtener más información, consulte el Tutorial de Oracle . Y busque para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
¿Dónde obtener las clases de java.time?
- Java SE 8 , Java SE 9 y posterior
- Incorporado.
- Parte de la API Java estándar con una implementación integrada.
- Java 9 agrega algunas características y correcciones menores.
- Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
- Androide
- El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) específicamente para Android.
- Consulte Cómo utilizar ThreeTenABP ....
El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y más .