logo

Fecha y hora de Java

Los paquetes java.time, java.util, java.sql y java.text contienen clases para representar la fecha y la hora. Las siguientes clases son importantes para tratar con fechas en Java.

API de fecha/hora de Java 8

Java ha introducido una nueva API de fecha y hora desde Java 8. El paquete java.time contiene clases de fecha y hora de Java 8.

API clásica de fecha/hora

Pero la API Java Date clásica o antigua también es útil. Veamos la lista de clases clásicas de Fecha y Hora.

Formatear fecha y hora

Podemos formatear la fecha y la hora en Java usando las siguientes clases:

API de fecha y hora de Java

Java proporciona la funcionalidad de fecha y hora con la ayuda de dos paquetes java.time y java.util. El paquete java.time se introduce en Java 8 y las clases recién introducidas intentan superar las deficiencias de las clases heredadas java.util.Date y java.util.Calendar.

Clases clásicas de API de fecha y hora

Las clases principales antes del lanzamiento de Java 8 eran:

descargar videos de youtube en vlc

Sistema.idioma.java: La clase proporciona el método currentTimeMillis() que devuelve la hora actual en milisegundos. Muestra la fecha y hora actuales en milisegundos desde el 1 de enero de 1970.

java.util.Date: Se utiliza para mostrar un instante de tiempo específico, con unidades de milisegundo.

java.util.Calendario: Es una clase abstracta que proporciona métodos para convertir entre instancias y manipular los campos del calendario de diferentes maneras.

java.text.SimpleDateFormat: Es una clase que se utiliza para formatear y analizar las fechas de una manera predefinida o un patrón definido por el usuario.

java.util.TimeZone: Representa un desplazamiento de zona horaria y también calcula el horario de verano.

Inconvenientes de las API de fecha/hora existentes

    Seguridad del hilo:Las clases existentes, como Fecha y Calendario, no proporcionan seguridad para subprocesos. Por lo tanto, genera problemas de concurrencia difíciles de depurar que los desarrolladores deben solucionar. Las nuevas API de fecha y hora de Java 8 brindan seguridad para subprocesos y son inmutables, evitando así el problema de concurrencia por parte de los desarrolladores.Mal diseño de API:Las API clásicas de Fecha y Calendario no proporcionan métodos para realizar funcionalidades básicas del día a día. Las clases de Fecha y Hora introducidas en Java 8 están centradas en ISO y proporcionan varios métodos diferentes para realizar operaciones relacionadas con la fecha, la hora, la duración y los períodos.Manejo difícil de la zona horaria:Manejar la zona horaria usando las clases clásicas de Fecha y Calendario es difícil porque se suponía que los desarrolladores debían escribir la lógica para ello. Con las nuevas API, el manejo de la zona horaria se puede realizar fácilmente con las API Local y ZonedDate/Time.

Nueva API de fecha y hora en Java 8

La nueva API de fecha ayuda a superar los inconvenientes mencionados anteriormente con las clases heredadas. Incluye las siguientes clases:

java.time.LocalDate: Representa un año, mes y día en el calendario ISO y es útil para representar una fecha sin hora. Se puede utilizar para representar información de fecha únicamente, como la fecha de nacimiento o la fecha de boda.

java.time.LocalTime: Se trata sólo en el tiempo. Es útil para representar la hora del día basada en humanos, como los horarios de cine o los horarios de apertura y cierre de la biblioteca local.

java.time.LocalDateTime: Maneja tanto fecha como hora, sin zona horaria. Es una combinación de LocalDate con LocalTime.

java.time.ZonedDateTime: Combina la clase LocalDateTime con la información de zona proporcionada en la clase ZoneId. Representa una marca de fecha y hora completa junto con información de zona horaria.

java.time.OffsetTime: Maneja la hora con una zona horaria correspondiente desplazada de Greenwich/UTC, sin un ID de zona horaria.

java.time.OffsetDateTime: Maneja una fecha y hora con una zona horaria correspondiente desplazada de Greenwich/UTC, sin un ID de zona horaria.

java.time.Reloj: Proporciona acceso al instante, la fecha y la hora actuales en cualquier zona horaria determinada. Aunque el uso de la clase Reloj es opcional, esta característica nos permite probar su código para otras zonas horarias o mediante el uso de un reloj fijo, donde la hora no cambia.

java.time.Instant: Representa el inicio de un nanosegundo en la línea de tiempo (desde EPOCH) y es útil para generar una marca de tiempo para representar el tiempo de la máquina. Un instante que ocurre antes de la época tiene un valor negativo y un instante que ocurre después de la época tiene un valor positivo.

java.time.Duración: Diferencia entre dos instantes y se mide en segundos o nanosegundos y no utiliza construcciones basadas en fechas como años, meses y días, aunque la clase proporciona métodos que convierten a días, horas y minutos.

java.time.Period: Se utiliza para definir la diferencia entre fechas en valores basados ​​en fechas (años, meses, días).

java.time.ZoneId: Indica un identificador de zona horaria y proporciona reglas para convertir entre Instant y LocalDateTime.

java.time.ZoneOffset: Describe una zona horaria diferenciada de la hora de Greenwich/UTC.

java.time.format.DateTimeFormatter: Viene con varios formateadores predefinidos, o podemos definir el nuestro. Tiene el método parse() o format() para analizar y formatear los valores de fecha y hora.