English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Java 8A través de la publicación de nuevas Date-API de tiempo (JSR 310) para fortalecer aún más el manejo de fechas y horas.
En las versiones anteriores de Java, las API de fecha y hora tenían muchos problemas, entre ellos:
No seguro contra la ejecución concurrente − java.util.Date no es seguro contra la ejecución concurrente, todas las clases de fecha son mutables, uno de los mayores problemas de las clases de fecha de Java.
Diseño malo − Fecha de Java/La definición de la clase de tiempo no es consistente, en los paquetes java.util y java.sql hay clases de fecha, además las clases utilizadas para formatear y analizar están definidas en el paquete java.text. java.util.Date contiene tanto fecha como hora, mientras que java.sql.Date solo contiene fecha, no es razonable incluirlo en el paquete java.sql. Además, ambas clases tienen el mismo nombre, lo que es un diseño muy malo.
El manejo de zona horaria es complicado − La clase de fecha no ofrece internacionalización, no tiene soporte para zona horaria, por lo que Java introdujo las clases java.util.Calendar y java.util.TimeZone, pero también tienen todos los problemas mencionados anteriormente.
Java 8 en java.time El paquete ofrece muchos nuevos API. A continuación se presentan dos API bastante importantes:
Local (local) − Simplifica el manejo de fechas y horas, sin problemas de zona horaria.
Zoned (zona horaria) − Maneja fechas y horas a través de la zona horaria especificada.
El nuevo paquete java.time abarca todo el manejo de fechas, horas y/Operaciones de tiempo, zona horaria, momentos (instants), procesos (durante) y relojes (clock).
LocalDate/Las clases LocalTime y LocalDateTime pueden manejar situaciones en las que no es necesario un ajuste de zona horaria. El código es el siguiente:
import java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; import java.time.Month; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testLocalDateTime(); } public void testLocalDateTime() { // Obtener la fecha y hora actual LocalDateTime currentTime = LocalDateTime.now(); System.out.println("hora actual: " + currentTime); LocalDate fecha1 = currentTime.toLocalDate(); System.out.println("fecha1: \ + fecha1); Month mes = currentTime.getMonth(); int día = currentTime.getDayOfMonth(); int segundos = currentTime.getSecond(); System.out.println("mes: " + mes +", día: " + día +", segundos: " + segundos); LocalDateTime fecha2 = currentTime.withDayOfMonth(10).withYear(2012); System.out.println("fecha2: \ + fecha2); // 12 diciembre 2014 LocalDate fecha3 = LocalDate.of(2014, Month.DICIEMBRE, 12); System.out.println("fecha3: \ + fecha3); // 22 horas 15 minutos LocalTime fecha4 = LocalTime.of(22, 15); System.out.println("fecha4: \ + fecha4); // 解析 una cadena LocalTime fecha5 = LocalTime.parse("20:15:30); System.out.println("fecha5: \ + fecha5); } }
Ejecutar el siguiente script, el resultado de salida será:
$ javac Java8Probador.java $ java Java8Probador hora actual: 2016-04-15T16:55:48.668 fecha1: 2016-04-15 mes: ABRIL, día: 15, segundos: 48 fecha2: 2012-04-10T16:55:48.668 fecha3: 2014-12-12 fecha4: 22:15 fecha5: 20:15:30
Si necesitamos considerar la zona horaria, podemos usar la API de fecha y hora de la zona horaria:
import java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testZonedDateTime(); } public void testZonedDateTime() { // Obtener la fecha y hora actual ZonedDateTime fecha1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]"); System.out.println("fecha1: \ + fecha1); ZoneId id = ZoneId.of("Europa/Paris"); System.out.println("ZoneId: "); + id); ZoneId currentZone = ZoneId.systemDefault(); System.out.println("Zona horaria actual: "); + currentZone); } }
Ejecutar el siguiente script, el resultado de salida será:
$ javac Java8Probador.java $ java Java8Probador fecha1: 2015-12-03T10:15:30+08:00[Asia/Shanghai] ZoneId: Europa/Paris Zona horaria actual: Asia/Shanghai