API de fecha y hora de Java 8
Nuevas características de Java 8
Java 8 refuerza aún más el manejo de fechas y horas mediante la publicación de la nueva API Date-Time (JSR 310).
En versiones anteriores de Java, la API de fecha y hora tenía muchos problemas, entre ellos:
No segura para hilos (no thread-safe)- java.util.Date no es seguro para hilos; todas las clases de fecha son mutables, lo cual es uno de los mayores problemas de las clases de fecha de Java.
Diseño deficiente- Las clases de fecha/hora de Java no son consistentes en su definición: hay clases de fecha tanto en los paquetes java.util como java.sql, además las clases para formato y análisis se definen en el paquete java.text. java.util.Date incluye tanto fecha como hora, mientras que java.sql.Date solo incluye fecha, y no tiene sentido incluirlo en el paquete java.sql. Además, ambas clases tienen el mismo nombre, lo cual es en sí mismo un diseño muy malo.
Manejo problemático de zonas horarias- Las clases de fecha no ofrecen internacionalización ni soporte para zonas horarias. Por eso Java introdujo las clases java.util.Calendar y java.util.TimeZone, pero también presentan todos los problemas mencionados anteriormente.
Java 8, enjava.timeel paquete, proporciona muchas API nuevas. Las siguientes son dos de las API más importantes:
Local (local)- Simplifica el manejo de fecha y hora, sin problemas de zona horaria.
Zoned (zona horaria)- Maneja fecha y hora mediante la zona horaria especificada.
El nuevo paquete java.time cubre todas las operaciones para manejar fechas, horas, fecha/hora, zonas horarias, instantes, duraciones (during) y relojes (clock).
API de fecha y hora local
Las clases LocalDate/LocalTime y LocalDateTime se pueden usar cuando el manejo de la zona horaria no es necesario. El código es el siguiente:
Archivo Java8Tester.java
Ejecute el script anterior, el resultado de salida es:
$ javac Java8Tester.java $ java Java8Tester 当前时间: 2016-04-15T16:55:48.668 date1: 2016-04-15 月: APRIL, 日: 15, 秒: 48 date2: 2012-04-10T16:55:48.668 date3: 2014-12-12 date4: 22:15 date5: 20:15:30
API de fecha y hora con zona horaria
Si necesitamos tener en cuenta la zona horaria, podemos usar la API de fecha y hora con zona horaria:
Archivo Java8Tester.java
Ejecute el script anterior, el resultado de salida es:
$ javac Java8Tester.java $ java Java8Tester date1: 2015-12-03T10:15:30+08:00[Asia/Shanghai] ZoneId: Europe/Paris 当期时区: Asia/Shanghai
Otras extensiones