Quien lleva tiempo programando en Java sabrá que el formateo de fechas es un verdadero dolor de cabeza.
Afortunadamente desde la versión 8 Java posee una nuevo Date y Time API que permite ahorrarnos algunos bloques de código engorrosos y tediosos.
¿Qué veremos? Nos enfocaremos en estas clases del paquete ``java.time``:
- Instant: para un punto en el tiempo, un instante (antes se usaba
System.currentTimeMillis()). - LocalDate: para obtener la fecha del sistema.
- LocalTime: para obtener la hora del sistema
- LocalDateTime: para obtener fecha y hora del sistema.
- ZonedDateTime: para obtener fecha y hora del sistema por zona horaria.
TestTimeAPI.java
import java.time.LocalTime; import java.time.LocalDate; import java.time.LocalDateTime; public class TestTimeAPI{ public static void main(String[] args){ System.out.println("\t Nueva API Time de Java."); LocalTime horaActual = LocalTime.now(); LocalDate tiempoActual = LocalDate.now(); LocalDateTime tiempoHoraActual = LocalDateTime.now(); System.out.printf("Hora actual: %s\n", horaActual.toString()); System.out.printf("Fecha actual: %s\n", tiempoActual.toString()); System.out.printf("Fecha y hora actual: %s\n", tiempoHoraActual.toString()); } }
Compilación y ejecución:
$ javac -g TestTimeAPI.java $ java TestTimeAPI
Salida:
Hora actual: 18:45:22.203592700 Fecha actual: 2026-04-11 Fecha y hora actual: 2026-04-11T18:45:22.203592700
Como se puede ver nos permite:
- Obtener la fecha.
- Obtener la hora y
- Obtener la fecha con hora actual.
Ahora veremos la clase Instant:
TestTimeAPI.java
import java.time.Instant; public class TestTimeAPI{ public static void main(String[] args){ System.out.println("\t Nueva API Time de Java."); Instant ahora = Instant.now(); System.out.println("Instante actual: " + ahora); Instant epochPlus10Segundos = Instant.ofEpochSecond(10); System.out.println("Epoch + 10 segundos: " + epochPlus10Segundos); Instant dentroDeUnaHora = ahora.plusSeconds(3600); System.out.println("Dentro de una hora: " + dentroDeUnaHora); Instant haceCincoMinutos = ahora.minusSeconds(300); System.out.println("Hace cinco minutos: " + haceCincoMinutos); } }
Compilación y ejecución:
$ javac -g TestTimeAPI.java $ java TestTimeAPI
Salida:
Instante actual: 2026-04-12T00:45:22.215549300Z Epoch + 10 segundos: 1970-01-01T00:00:10Z Dentro de una hora: 2026-04-12T01:45:22.215549300Z Hace cinco minutos: 2026-04-12T00:40:22.215549300Z
Como se puede observar hemos:
- Obtenido el instante actual en UTC.
- Creado un instante a partir de un número de segundos desde el epoch (1970-01-01T00:00:00Z).
- Sumar y restar tiempo
Ahora veremos la clase ``ZonedDateTime``:
TestTimeAPI.java
import java.time.ZonedDateTime; import java.time.ZoneId; public class TestTimeAPI{ public static void main(String[] args){ System.out.println("\t Nueva API Time de Java."); ZonedDateTime ahoraZona = ZonedDateTime.now(); System.out.println("Ahora en zona local: " + ahoraZona); ZonedDateTime nyTime = ZonedDateTime.now(ZoneId.of("America/New_York")); System.out.println("Hora en Nueva York: " + nyTime); ZonedDateTime tokyoTime = ahoraZona.withZoneSameInstant(ZoneId.of("Asia/Tokyo")); System.out.println("Hora equivalente en Tokio: " + tokyoTime); ZonedDateTime evento = ZonedDateTime.of(2026, 4, 11, 18, 30, 0, 0, ZoneId.of("America/Mexico_City")); System.out.println("Evento en CDMX: " + evento); } }
Compilación y ejecución:
$ javac -g TestTimeAPI.java $ java TestTimeAPI
Salida:
Ahora en zona local: 2026-04-11T18:45:22.274598100-06:00[America/Mexico_City] Hora en Nueva York: 2026-04-11T20:45:22.292591300-04:00[America/New_York] Hora equivalente en Tokio: 2026-04-12T09:45:22.274598100+09:00[Asia/Tokyo] Evento en CDMX: 2026-04-11T18:30-06:00[America/Mexico_City]
Con este ejemplo hemos:
- Obtenido la fecha y hora actual en la zona horaria del sistema.
- Obtenido la fecha y hora en una zona específica (ejemplo: Nueva York).
- Convertir entre zonas horarias.
- Creado un
ZonedDateTimeespecífico.
La API ``java.time`` en Java es muy poderosa, pues permite trabajar con fechas, horas, zonas horarias, instantes precisos y duraciones de manera clara y segura
Observemos la siguiente tabla que trata de resumir esta API.
| Clase | Qué representa | Ejemplos de uso |
|---|---|---|
LocalDate |
Fecha (año, mes, día) sin hora ni zona | Obtener la fecha actual, sumar días, calcular edad |
LocalTime |
Hora del día sin fecha ni zona | Obtener hora actual, comparar horas, programar alarmas |
LocalDateTime |
Fecha y hora sin zona horaria | Registrar eventos, combinar fecha y hora |
ZonedDateTime |
Fecha y hora con zona horaria | Convertir entre zonas, manejar horarios internacionales |
Instant |
Momento exacto en UTC | Marcas de tiempo, cálculos precisos de duración |
Duration |
Diferencia entre dos instantes (tiempo) | Medir cuánto tarda un proceso, calcular intervalos |
Period |
Diferencia entre dos fechas (años, meses, días) | Calcular edad, tiempo hasta un evento |
ZoneId |
Identificador de zona horaria | Definir zonas como "America/Mexico_City" |
OffsetDateTime |
Fecha y hora con desplazamiento fijo respecto a UTC | Trabajar con APIs que usan offsets (+02:00, -06:00) |
Estos solo son algunos ejemplos de uso de esta nueva API Time de Java.
Enlaces:
https://medium.com/javarevisited/mastering-the-java-time-api-a-comprehensive-guide-c22376ab323ahttps://www.arquitecturajava.com/java-8-date-time-api/
https://keepcoding.io/blog/como-funciona-java-time-localtime-en-java/

Comentarios
Publicar un comentario