¿Cómo crear y manipular fechas con java.time.LocalDate en Java?

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

Recuerdo muy bien que, antes era una completa locura manejar fechas en Java, porque solo existía la clase Date y el formato SimpleDateFormat, así que se presentaban muchos problemas de sincronización. Lo bueno fue que, desde que apareció java.time.LocalDate, las cosas cambiaron drásticamente, porque se volvió más fácil crear, manipular y formatear fechas. Como no quiero que te compliques la vida ni que te frustres aprendiendo a programar con Java, te mostraré cómo usar adecuadamente esta clase.

java.time.LocalDate en Java qué es

¿Qué es java.time.LocalDate en Java?

java.time.LocalDate es una clase de la API de fecha y tiempo introducida en Java 8, diseñada para representar exclusivamente una fecha en términos de año, mes y día, sin incluir información sobre la hora (como horas, minutos o segundos) ni asociarse a ninguna zona horaria.

Por ejemplo, una fecha como 2025-01-02 será la misma independientemente del lugar del mundo donde se utilice, ya que no considera ajustes relacionados con zonas horarias ni horarios de verano.

Entonces, te servirá bastante para esas aplicaciones donde solo es necesario trabajar con fechas puras, como calendarios, registros históricos, vencimientos o sistemas de planificación, porque ya no existirá esa complejidad y esos errores que surgen al manejar horarios o conversiones entre zonas horarias.

Características

  • Representa una fecha (año, mes, día) sin hora ni zona horaria.
  • Es inmutable y segura para múltiples hilos.
  • Ofrece métodos para realizar cálculos con fechas, como sumar o restar días, meses y años.

Cómo crear fechas con java.time.LocalDate

Crear la fecha actual

En este primer ejemplo quiero mostrarte que el método now() te proporciona la fecha actual:

import java.time.LocalDate;

public class FechaActual {
public static void main(String[] args) {
LocalDate hoy = LocalDate.now();
System.out.println("Fecha actual: " + hoy);
}
}

Mira la salida:

Fecha actual: 2025-01-02

Crear una fecha específica

Ahora, cuando vayas a trabajar con una fecha específica, lo que yo te aconsejo es usar el método of():

LocalDate fechaEspecifica = LocalDate.of(2023, 12, 25);
System.out.println("Fecha específica: " + fechaEspecifica);

Crear una fecha desde una cadena

Mira cómo puedes usar el método parse() para convertir una cadena en un objeto LocalDate:

LocalDate fechaDesdeCadena = LocalDate.parse("2024-06-15");
System.out.println("Fecha desde cadena: " + fechaDesdeCadena);

Cómo manipular fechas con java.time.LocalDate

Sumar y restar días, meses y años

Quiero mostrarte que los métodos plus y minus te dejan realizar cálculos con fechas, de una forma muy fácil:

LocalDate hoy = LocalDate.now();
LocalDate mañana = hoy.plusDays(1);
LocalDate mesPasado = hoy.minusMonths(1);

System.out.println("Mañana: " + mañana);
System.out.println("Hace un mes: " + mesPasado);

Comparar fechas

Con isBefore, isAfter e isEqual, puedes comparar dos fechas:

LocalDate fecha1 = LocalDate.of(2025, 1, 1);
LocalDate fecha2 = LocalDate.of(2025, 1, 2);

System.out.println("Fecha1 es anterior a Fecha2: " + fecha1.isBefore(fecha2));
System.out.println("Fecha1 es igual a Fecha2: " + fecha1.isEqual(fecha2));

Extraer partes de una fecha

Lo bueno es que java.time.LocalDate te ofrece métodos para obtener el día, mes o año:

LocalDate hoy = LocalDate.now();

int dia = hoy.getDayOfMonth();
int mes = hoy.getMonthValue();
int año = hoy.getYear();

System.out.println("Día: " + dia + ", Mes: " + mes + ", Año: " + año);

Verificar años bisiestos

Gracias al método isLeapYear puedes determinar si un año es bisiesto:

LocalDate fecha = LocalDate.of(2024, 1, 1);
System.out.println("2024 es bisiesto: " + fecha.isLeapYear());

Cómo formatear fechas con DateTimeFormatter

También quiero explicarte que la clase DateTimeFormatter te permite mostrar fechas en diferentes formatos:

import java.time.format.DateTimeFormatter;

LocalDate hoy = LocalDate.now();
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");

System.out.println("Fecha formateada: " + hoy.format(formato));

Observa la salida:

Fecha formateada: 02/01/2025

Ejemplo práctico: Agenda de eventos

Te dejo un ejemplo más avanzado donde te muestro cómo crear una aplicación que gestione una agenda de eventos.

Así es como podrías trabajar fácilmente con fechas:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class AgendaEventos {
public static void main(String[] args) {
LocalDate evento = LocalDate.of(2025, 5, 20);
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");

LocalDate hoy = LocalDate.now();
long diasRestantes = hoy.until(evento).getDays();

System.out.println("Evento programado para: " + evento.format(formato));
System.out.println("Faltan " + diasRestantes + " días para el evento.");
}
}

Como ves, este ejemplo calcula cuántos días faltan para un evento específico.

Consejos para trabajar con java.time.LocalDate

  1. Usa objetos inmutables: Cada operación devuelve un nuevo objeto, lo que evita errores.
  2. Cuidado con las cadenas: Verifica que el formato de las cadenas coincida con el esperado en parse().
  3. Aprovecha la API: Métodos como isLeapYear y plusDays simplifican tareas comunes.

Ya sabes que java.time.LocalDate es excelente para trabajar con fechas en Java. Como es simple y versátil, te será muy útil para manejar eventos, registros y cualquier funcionalidad relacionada con fechas.

¿Quedaste con ganas de aprender más sobre Java? Únete al Bootcamp de Java Full Stack de KeepCoding y lleva tus habilidades al siguiente nivel. Aprende a crear aplicaciones completas y da un giro a tu carrera en tecnología. ¡Inscríbete hoy mismo y comienza a transformar tu futuro!

Posts más leídos