¿Qué es java.time.LocalDateTime y cómo manejar fechas y horas en Java?

| Última modificación: 7 de enero de 2025 | Tiempo de Lectura: 3 minutos

El manejo del tiempo en Java puede ser un verdadero reto. Lo sé porque lo viví cuando me tocó trabajar en un proyecto donde debía procesar miles de registros de horarios y fechas. De verdad que fue tremendo tener que lidiar con zonas horarias y mantener la coherencia entre operaciones. Gracias a la explicación de un amigo sobre cómo usar java.time.LocalDateTime, fue que descubrí las ventajas y los métodos principales de esta clase para trabajar con fechas y mi trabajo se facilitó como nunca antes. Así que me he propuesto explicártela de una forma muy sencilla, con ejemplos incluidos, para que aprendas a usarla en tus proyectos.

java.time.LocalDateTime en Java qué es

¿Qué es java.time.LocalDateTime?

¿Has visto un reloj de arena? Pues java.time.LocalDateTime es igual. Lo que hace es representar el momento exacto en el tiempo, porque captura la fecha (día, mes, año) como la hora (hora, minutos, segundos, nanosegundos).

Ahora, la arena o los granos de arena dentro del reloj serían los nanosegundos, segundos, minutos y horas que fluyen. Por eso, a cada rato, el reloj de arena te mostrará el estado exacto del tiempo.

Lo único es que este reloj no necesita saber dónde estás (zona horaria), solo le importa el tiempo exacto en términos de fecha y hora.

Características

  • Representa la fecha y hora en el formato yyyy-MM-dd-HH-mm-ss.zzz.
  • Es parte del paquete java.time, diseñado para simplificar el manejo de fechas y horas en Java.
  • Implementa la interfaz ChronoLocalDateTime y hereda de la clase Object.
  • Inmutabilidad y seguridad en hilos: Las instancias de LocalDateTime no se pueden modificar después de ser creadas, por eso son buenísimas para entornos multihilo.
  • Versatilidad: Es perfecta para operaciones donde la zona horaria no es relevante, como configurar recordatorios locales o registrar logs de eventos.

Métodos principales de java.time.LocalDateTime

Quiero mostrarte los métodos que más vas a usar:

  • now(): Obtiene la fecha y hora actual.
  • plusDays(long days): Suma días a la fecha actual.
  • minusHours(long hours): Resta horas a la fecha actual.
  • format(DateTimeFormatter formatter): Da formato a la fecha.
  • parse(CharSequence text, DateTimeFormatter formatter): Convierte texto en fecha.

Cómo empezar a trabajar con java.time.LocalDateTime

Crear instancias

Ten en cuenta que puedes crear un objeto LocalDateTime de diferentes maneras:

import java.time.LocalDateTime;

public class Ejemplo {
public static void main(String[] args) {
// Fecha y hora actuales
LocalDateTime ahora = LocalDateTime.now();
System.out.println("Fecha y hora actuales: " + ahora);

// Fecha y hora específicas
LocalDateTime fechaEspecifica = LocalDateTime.of(2025, 1, 15, 14, 30);
System.out.println("Fecha específica: " + fechaEspecifica);
}
}

Modificar fechas y horas

Aunque te dije que LocalDateTime es inmutable, recuerda que puedes crear nuevas instancias basadas en operaciones sobre la original:

public class ModificarFechas {
public static void main(String[] args) {
LocalDateTime fechaBase = LocalDateTime.of(2025, 1, 15, 14, 30);

// Sumar tiempo
LocalDateTime suma = fechaBase.plusDays(5).plusHours(2);
System.out.println("Fecha modificada (sumar): " + suma);

// Restar tiempo
LocalDateTime resta = fechaBase.minusWeeks(1).minusMinutes(30);
System.out.println("Fecha modificada (restar): " + resta);
}
}

Formatear fechas

En caso de que quieras o necesites mostrar la fecha en un formato legible, yo te aconsejo usar DateTimeFormatter:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class FormatearFechas {
public static void main(String[] args) {
LocalDateTime ahora = LocalDateTime.now();
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");

String fechaFormateada = ahora.format(formato);
System.out.println("Fecha formateada: " + fechaFormateada);
}
}

Parsear cadenas a fechas

Aquí te muestro que, si tienes una cadena y necesitas convertirla en un objeto LocalDateTime, usa el método parse:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class ParsearFechas {
public static void main(String[] args) {
String fechaTexto = "15/01/2025 14:30";
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");

LocalDateTime fecha = LocalDateTime.parse(fechaTexto, formato);
System.out.println("Fecha parseada: " + fecha);
}
}

Ejemplo práctico adicional: Aprende a programar recordatorios

Te dejo un ejemplo extra para que aprendas a programar recordatorios y lo vayas poniendo en práctica. Entonces, imagina que quieres crear una aplicación que programe recordatorios para eventos futuros.

Puedes hacer lo siguiente:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Recordatorios {
public static void main(String[] args) {
LocalDateTime evento = LocalDateTime.of(2025, 1, 20, 10, 0);
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");

System.out.println("El evento está programado para: " + evento.format(formato));
}
}

Como has visto, java.time.LocalDateTime es una herramienta grandiosa para trabajar con fechas y horas en Java. Gracias a que es inmutable y tiene métodos versátiles, puedes manejar fechas como todo un profesional y sin cometer errores.

Si te interesa profundizar en el manejo de fechas y horas o quieres convertirte en un desarrollador Java Full Stack, nuestro Bootcamp de Java en KeepCoding es justo lo que necesitas. Aprenderás a dominar todas las clases de Java y mucho más, acelerando tu entrada al sector IT. ¡Apúntate y lleva tu carrera al siguiente nivel!

Posts más leídos