Java 8 manejo de fechas y tiempo : LocalDate, LocalTime y LocalDateTime


localdatesUno de los problemas más comunes a los que se enfrentan los desarrolladores es el manejo de fechas, tiempo y zonas horarias, para resolver este problema se solían utilizar api’s como Joda Time, Java 8 incluyó un conjunto de apis que nos ayudan a resolverlo sin incluir dependencias adicionales.

LocalDate, LocalTime y LocalDateTime

Las clases más comunes para el manejo de fechas con java 8 son LocalDate, LocalTime y LocalDateTime, se utilizan cuando la zona horaria no es requerida.

LocalDate

Un LocalDate representa una fecha en formato ISO (yyyy-MM-dd) sin tiempo. Veamos algunos ejemplos:

LocalDate date = LocalDate.now();
System.out.println(date);

El código anterior tendrá la siguiente salida(Entendiendo que el post se escribió el 30-10-2018):

2018-10-30

Como vemos es una fecha sin tiempo y sin zona horaria. Veamos algunas otras formas de crear un LocalDate:

LocalDate date2 = LocalDate.of(2018, 10, 30);
LocalDate date3 = LocalDate.parse("2018-10-30");

Las 2 expresiones crearán objetos de tipo LocalDate con la fecha del 30-10-2018.

Operaciones que se pueden realizar con LocalDate

Una vez que sabemos como construir un LocalDate el siguiente paso será conocer el tipo de operaciones que se pueden realizar con el.

  • Manipulación de fechas (Sumar o restar días, meses, años, etc ):
LocalDate date = LocalDate.parse("2018-10-30");
LocalDate newDate = date.plusDays(10);
System.out.println(date);
System.out.println(newDate);

Salida:

2018-10-30
2018-11-09

Como vemos a la fecha inicial se le sumaron 10 días 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.

LocalDate date = LocalDate.parse("2018-10-30");
LocalDate newDate = date.plusMonths(3);
System.out.println(date);
System.out.println(newDate);

Salida:

2018-10-30
2019-01-30

De igual forma podemos hacerlo con los meses y LocalDate resolverá si es necesario cambiar de año.

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.

  • Comparación entre fechas

Así como podemos realizar operaciones entre las fechas podemos hacer comparaciones entre ellas, veamos algunos ejemplos:

Valida si una fecha es antes que otra:

System.out.println(LocalDate.parse("2018-10-30").isBefore(LocalDate.parse("2018-10-31")));

Salida

true

Valida si un año es bisiesto:

System.out.println(LocalDate.parse("2018-10-30").isLeapYear());

Salida:

false

Podemos realizar validaciones muy simples sin necesidad de escribir código complejo.

  • Obtener información sobre alguna fecha

El siguiente paso será obtener información sobre alguna fecha en específico veamos algunos ejemplos:

Obtener el día de la semana de mi cumpleaños:

System.out.println(LocalDate.parse("2019-08-19").getDayOfWeek());

Salida:

MONDAY

Extraer información de una fecha:

System.out.println(LocalDate.parse("2019-08-19").getDayOfWeek());

Salida:

19

Si lo único que necesitamos de una fecha es el mes podemos fácilmente extraerlo .

Podemos ver el detalle de todos los métodos disponibles de la clase LocalDate en el siguiente link.

LocalTime

LocalTime representa una hora sin la fecha, del mismo modo que con LocalDate podemos crearlo haciendo uso de los métodos now(), parse(..) y of(..), veamos algunos ejemplos:

LocalTime time = LocalTime.now();
LocalTime time2 = LocalTime.parse("11:00:59.759");
LocalTime time3 = LocalTime.of(11, 00, 59);
System.out.println(time);
System.out.println(time2);
System.out.println(time3);

Salida:

11:02:06.198
11:00:59.759
11:00:59

Las 3 anteriores son formas válidas de crear un objeto LocalTime. Veamos algunas de las operaciones que podemos realizar.

  • Modificar un LocalTime

La primera operación que veremos es como modificar un LocalTime:

LocalTime time = LocalTime.parse("11:00:59.759");
LocalTime time2 = time.plusHours(1);
System.out.println(time2);

Salida:

12:00:59.759

Con el método plusHours crearemos un nuevo LocalTime con la nueva hora calculada.

  • Validar un LocalTime

El siguiente punto será hacer validaciones sobre un LocalTime:

LocalTime time = LocalTime.parse("11:00:59.759");
LocalTime time2 = LocalTime.parse("12:00:59.759");
System.out.println(time.isBefore(time2));

Salida:

true

Usando métodos como isBefore podremos saber si una hora es mayor a otra.

  • Extraer información de una hora:

El siguiente paso será extraer solo una parte del objeto LocalTime:

LocalTime time = LocalTime.parse("11:00:59.759");
System.out.println(time.getHour());

Salida:

 11 

Esto lo utilizaremos en caso de que nuestra aplicación utilice solo la hora para realizar algún proceso.

LocalDateTime

La siguiente clase a analizar será LocalDateTime la cual representa una combinación entre LocalDate y LocalTime, veamos como crearlo:

LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime dateTime1=LocalDateTime.of(2018, 10, 10, 11, 25);
LocalDateTime dateTime2=LocalDateTime.parse("2018-10-10T11:25");

System.out.println(dateTime);
System.out.println(dateTime1);
System.out.println(dateTime2);

Salida:

2018-10-30T11:46:58.274
2018-10-10T11:25
2018-10-10T11:25

En la salida anterior podemos ver como la salida incluye fecha y hora por cada objeto. Veamos algunas de las operaciones que podemos realizar con estos objetos.

  • Manipular un LocalDateTime:

De igual forma que con los anteriores podemos realzar manipulaciones sobre el LocalDateTime:

LocalDateTime dateTime=LocalDateTime.parse("2018-10-10T11:25");
LocalDateTime newDateTime = dateTime.plusDays(1).plusHours(2);

System.out.println(newDateTime);

Lo anterior creará un objeto LocalDateTime le agregará 1 día y después 2 horas, recordemos que debemos asignar el resultado a una nueva referencia ya que el objeto original no se modificará sino que se devolverá uno nuevo.

  • Realizar validaciones sobre un LocalDateTime

Como lo vimos en los ejemplos anteriores podemos realizar validaciones sobre el LocalDateTime:

LocalDateTime dateTime=LocalDateTime.parse("2018-10-10T11:25");
LocalDateTime dateTime2=LocalDateTime.parse("2019-10-10T11:25");

System.out.println(dateTime.isBefore(dateTime2));

Salida:

true

Se realizará del mismo modo que en los casos anteriores solo que ahora considerará tanto la fecha como la hora.

Esta es una guía rápida sobre como utilizar algunas clases del api de fechas y tiempo de java, en futuros posts hablaremos sobre como trabajar con zonas horarias, periodos e instantes. Para estar al pendiente sobre nuestro contenido nuevo síguenos en nuestras redes sociales  https://www.facebook.com/devs4j/ y https://twitter.com/devs4j.

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

Anuncios

1 comentario »

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s