Manejo de Fechas en Java Con LocalDate y ChronoUnit
Manejo de Fechas en Java Con LocalDate y ChronoUnit
Introducción
Trabajar con fechas en Java no es algo del otro mundo ni tiene demasiadas complicaciones, pero la cantidad de formas
que hay para hacerlo puede confundirnos, o peor aún, puede que sólo conozcamos la más mala para hacerlo.
En este manual trabajaremos con la clase LocalDate, esta clase permite trabajar de forma mucho más directa que otras
clases como ser Date y Calendar.
Para poder trabajar con la clase LocalDate debemos importar el paquete java.time.LocalDate;
LocalDate es una clase inmutable de fecha-tiempo que representa una fecha y es visto como año, mes, dia (yyyy/M/dd).
Representa una fecha sin tener en cuenta el tiempo o zona horaria. Haciendo uso del método now(); se puede crear
un LocalDate con la fecha actual del sistema.
Salida:
run:
Fecha: 2019-04-23
BUILD SUCCESSFUL (total time: 1 second)
1
{Fechas;}
Las dos formas de crear objetos de tipo LocalDate representan la fecha del 16-01-1989.
Salida:
1989-01-16
1989-01-17
Como vemos a la fecha inicial se le sumó 1 día y el mes se actualizó de forma automática, esto nos permite evitar
considerar el número de días en un mes, el horario de verano, etc.
De igual forma podemos hacerlo con los meses y LocalDate resolverá si es necesario cambiar de año.
Salida:
1989-01-16
1989-04-16
Para poder restar días, meses, años se usan los métodos minusDays(int); minusMonths(int); minusYears(int);
Recordemos que cuando hacemos operaciones sobre las fechas debemos asignar la respuesta a una nueva
referencia ya que el objeto original no se modificará puesto que los objetos LocalDate son immutables.
2
{Fechas;}
Así como podemos realizar operaciones entre las fechas podemos hacer comparaciones entre ellas, veamos algunos
ejemplos:
System.out.println(LocalDate.parse("1989-01-16").isBefore(LocalDate.parse("1989-01-17")));
Salida:
true
System.out.println(LocalDate.parse("1989-01-16").isAfter(LocalDate.parse("1989-01-17")));
Salida:
false
System.out.println(LocalDate.parse("1989-01-16").isEqual(LocalDate.parse("1989-01-16")));
Salida:
true
System.out.println(LocalDate.parse("1989-01-16").isLeapYear());
Salida:
false
Podemos realizar validaciones muy simples sin necesidad de escribir código complejo.
Si lo único que necesitamos de una fecha es el día de la semana podemos fácilmente extraerlo.
System.out.println(LocalDate.parse("1989-01-16").getDayOfWeek());
Salida:
MONDAY
Otros métodos
System.out.println(LocalDate.parse("1989-01-16").getMonth());//JANUARY
System.out.println(LocalDate.parse("1989-01-16").getYear());//1989
System.out.println(LocalDate.parse("1989-01-16").getDayOfMonth());//16
System.out.println(LocalDate.parse("1989-02-16").getDayOfYear());//47
System.out.println(LocalDate.parse("1989-01-16").getDayOfMonthValue());//1
3
{Fechas;}
Con todo lo visto hasta ahora podemos resolver el siguiente ejercicio:
A partir de 3 objetos de tipo fecha nombrados “desde”, “hoy” y “hasta”, muestre por pantalla si la fecha actual (hoy)
corresponde al rango de valores de fechas entre 1989-01-16 (desde) y 2099-09-09 (hasta).
Otra clase importante para el manejo de fechas es la clase ChronoUnit que maneja la diferencia en días, meses, años
entre dos fechas.
Para poder trabajar con esta clase es necesario importar el paquete java.time.temporal.ChronoUnit;
Salida:
run:
Pasaron: 2 días
BUILD SUCCESSFUL (total time: 1 second)
Esta clase tiene varios métodos pero los más interesantes son: