English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo de Java

Java array

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Manejo de excepciones en Java

Java Lista (List)

Java Queue (cola)

Conjuntos de Java Map

Conjuntos de Java

Entrada y salida de Java (I/)

Lector de Java/Writer

Otros temas de Java

Java 8 API de fecha y hora

Java 8 Nuevas características

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).

API de localización de fechas y horas

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

Uso de la API de fecha y hora de la zona horaria

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

Java 8 Nuevas características