Fechas
La clase LocalDate en Java forma parte del paquete java.time y representa una fecha sin componente de tiempo ni zona horaria, incluyendo solo año, mes y día. Es ideal para trabajar con fechas sin necesidad de gestionar horas, minutos o segundos.
Los objetos de esta clase se crean utilizando el método estático of() de esa clase. Los objetos de LocalDate son inmutables, por lo que cualquier operación que realices sobre ellos devolverá un nuevo objeto en lugar de modificar el original.
Por ejemplo, si queremos un objeto con fecha 12 de febrero de 2016:
LocalDate fecha1 = LocalDate.of(2016, 2, 12); // Parámetros en orden: año, mes, día
Si queremos obtener la fecha actual, podemos utilizar el método estático now():
LocalDate ahora = LocalDate.now();
En lugar del mes como número, podemos utilizar un valor del enumerado Month.
LocalDate fecha1 = LocalDate.of(2016, Month.FEBRUARY, 12); // Parámetros en orden: año, mes, día
Obtención de componentes de fecha
Aquí tienes un ejemplo de cómo obtener el año, mes y día de la clase LocalDate:
int año = fechaActual.getYear();
int mes = fechaActual.getMonthValue();
int dia = fechaActual.getDayOfMonth();
También existe un enumerado para los días de la semana, DayOfWeek.
DayOfWeek diaSemana = fechaActual.getDayOfWeek(); // Ejemplo: MONDAY
Incrementar y decrementar fechas
Para incrementar fechas podemos utilizar el método plus().
LocalDate fecha2 = fecha1.plus(3, ChronoUnit.DAYS);
El segundo argumento es del tipo enumerado ChronoUnit que tiene valores distintos para las diferentes unidades de tiempo. Para decrementar utilizaremos el método minus().
Comparación de fechas
LocalDate también tiene métodos para comparar fechas:
boolean esAntes = fechaEspecifica.isBefore(fechaActual);
boolean esDespues = fechaEspecifica.isAfter(fechaActual);
boolean esIgual = fechaEspecifica.isEqual(fechaActual);
Diferencia entre dos fechas
Para calcular la diferencia entre dos fechas podemos utilizar el método:
long until(LocalDate endExclusive, ChronoUnit unit)
// Tomamos el día de hoy y una fecha
LocalDate hoy = LocalDate.of(2025, Month.FEBRUARY, 11);
LocalDate fecha = LocalDate.of(2030, Month.FEBRUARY, 25);
// Miramos el tiempo que falta
long dias = hoy.until(fecha, ChronoUnit.DAYS); // Devuelve 1840 días
Si fecha es anterior a hoy, los valores que devolverá serán negativos.