Cuanta falta hacía un Java time package en Java8. Hemos vivido muchos años utilizando las clases de Date, Calendar y SimpleDateFormat. Era más que evidente que se necesitaba una solución mas potente tipo JodaTime dentro del propio API de Java. Con la llegada de Java 8 es una de las cosas que se ha conseguido. Vamos a ver una introducción a este API tan interesante.
Java Time Package
Existen tres clases que podríamos decir son las más importantes de este nuevo package: Instant , LocalDate y LocalTime. Ahora bien ¿Para qué sirve cada una de ellas? .
Instant: Esta clase define un instante concreto en una linea de tiempo y sirve habitualmente para calcular los tiempos que han sucedido entre dos instantes concretos.
Veamos un ejemplo en código:
package com.arquitecturajava.time; import java.time.Duration; import java.time.Instant; public class Principal000Instante { public static void main(String[] args) { Instant instante= Instant.now(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Instant instante2= Instant.now(); System.out.println(Duration.between(instante, instante2).toMillis()); System.out.println(Duration.between(instante, instante2).toMinutes()); } }
El resultado es:
LocalDate: Este clase se encarga de instanciar una fecha concreta en el calendario con día , mes y año para que podamos trabajar con ella.
Veamos un ejemplo en código:
package com.arquitecturajava.time; import java.time.Duration; import java.time.Instant; import java.time.LocalDate; import java.time.Month; import java.time.Period; public class Principal001Instante { public static void main(String[] args) { LocalDate dia= LocalDate.of(2016, 8, 31); LocalDate dia2= LocalDate.of(2016, Month.SEPTEMBER, 30); Period periodo=Period.between(dia, dia2); System.out.println(periodo.getDays()); } }
LocalDateTime: Este clase se encarga de instanciar una fecha concreta en el calendario. En ese aspecto es similar a LocalDate pero en este caso incluye también la hora y los minutos.
Vamos a verlo en código:
package com.arquitecturajava.time; import java.time.LocalDateTime; public class Principal002LocalDateTime { public static void main(String[] args) { LocalDateTime fechaConHoraMinutos = LocalDateTime.of(2016, 8, 31, 8, 2); LocalDateTime nuevaFecha=fechaConHoraMinutos.plusMinutes(25); System.out.println(nuevaFecha.getMinute()); } }
Hemos creado una fecha y la hemos añadido 25 minutos si consultamos la nueva y la imprimimos por pantalla obtendremos 27 minutos. Estas son las clases principales de Java Time package .
Otros artículos relacionados: Java Lambdas , Java Streams , Java references methods
Muy interesante, ya que estoy desarrollando un aplicaion con Spring MVC y tengo algunos inconvenientes con el formateo de fechas, en el formulario agrego la fecha correcta, pero al momento de visualizarlo en la base de datos siempre me resta un dia menos(ejemplo: form cliente 16-02-1998. base de datos: 1998-02-15) en la clase de mapeo uso ejemplo: @Temporal(TemporalType.DATE) @DateTimeFormat(iso = ISO.DATE) @Column(name=”usufecnac”, nullable=false, length=13) public Date getUsufecnac() { return this.usufecnac; } Asi como Jose tengo la misma pregunta… Pero lo que dices, no sabria como implementarlo. Seria de gran ayuda si me podrias dar un ejemplo o algun articulo donde… Read more »
La verdad es que no se me ocurre nada , me parece extraño 🙁
Quiza estoy poniendo mal las anotaciones, o no se… pero persiste ese problemita… Alguna recomendacion que me puedas brindar… o algun otro metodo para probar. Gracias
Y lo más importante: las clases de esta API sí que son inmutables.
gracias por el aporte 🙂
¿Y se pueden utilizar implícitamente en JAVA EE para los mapeos en JPA por ejemplo, o hay que realizar nuestra propia implementación con un converter por ejemplo?
hay que usar un atribute converter 🙂 , jpa 2.1 es previo a java 8