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.
¿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
- Usa objetos inmutables: Cada operación devuelve un nuevo objeto, lo que evita errores.
- Cuidado con las cadenas: Verifica que el formato de las cadenas coincida con el esperado en parse().
- 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!