Llevamos mas de de una década trabajando con la clase Date y la clase Calendar en Java . Mucha gente cuando empieza se ha encontrado con verdaderos problemas a la hora de gestionar estas clases unidas a la clase DateFormat. A partir de Java 8 las cosas se van a simplificar ya que tenemos un nuevo API de DateTime mucho más intuitivo. Una de las clases fundamentales a la hora de trabajar con Java 8 es la clase Instant que define un instante en el tiempo.
Vamos a ver como funciona en el código :
package com.arquitecturajava.fechas; import java.time.Duration; import java.time.Instant; public class PrincipalInstante { public static void main(String[] args) { Instant instanteA=Instant.now(); try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Instant instanteB= Instant.now(); System.out.println(Duration.between(instanteA, instanteB)); } }Su funcionamiento es trivial ya que especifica un punto concreto en la linea de tiempo concreto con el cual podemos trabajar. En este caso nos imprimirá "PT3.011S" que es el tiempo transcurrido entre ambos instantes.
Java 8 Date Time y LocalTime
La otra clase importante y que viene a substituir al Calendario es LocalDate que nos permite definir fechas y trabajar con ellas de una forma bastante más directa que el Calendario.
package com.arquitecturajava.fechas; import java.time.LocalDate; import java.time.temporal.ChronoField; public class PrincipalLocalDate { public static void main(String[] args) { LocalDate finAño=LocalDate.of(214, 12, 31); LocalDate navidad=finAño.minusDays(6); System.out.println(navidad.get(ChronoField.DAY_OF_MONTH)); } }
El programa imprimirá 25 por pantalla. Por último otra de las clases que me ha parecido que aporta es la clase Period que define un intervalo de tiempo entre dos fechas y nos permite trabajar con el de forma sencilla.
Vamos a verla en código:
package com.arquitecturajava.fechas; import java.time.LocalDate; import java.time.Period; public class PrincipalPeriodo { public static void main (String[] args) { LocalDate fechaA = LocalDate.of(1978, 8, 26); LocalDate fechaB = LocalDate.of(1988, 9, 28); Period period = Period.between(fechaA, fechaB); System.out.printf("Periodo %s y %s" + "hay %d años, %d meses" + " y %d dias%n", fechaA, fechaB, period.getYears(), period.getMonths(), period.getDays()); } }
Esto nos imprimirá el siguiente mensaje por pantalla :
Periodo 1978-08-26 y 1988-09-28hay 10 años, 1 meses y 2 dias
Estos cambios los pedíamos todos los desarrolladores hace tiempo y por fin han llegado. Esperemos que este API ayude a todo el mundo a trabajar con las fechas de una forma más natural.
[…] Otros artículos relacionados: Introducción a Java Lambda , Java Lambda forEach ,Java 8 Date Time […]
[…] 8 Lambda , Java 8 Date Time , Java 8 […]
hola mi consulta es la siguiente, tengo un programa por el cual ingreso una fecha tipo string en este formao dd/mm/yyyy, pero quiero saber un metodo para que se guarde en mysql como date, he vito mucho metodos, pero la verdad nose como aplicarlo, nose i me podrias ayudar
echa un vistazo a esto yo creo que te puede ayudar http://stackoverflow.com/questions/22463062/how-to-parse-format-dates-with-localdatetime-java-8
Excelente articulo, gracias Cecilio. Solo hay una duda que me queda con la forma que hicieron el objeto Period. Segun observo el método between, recibe 2 objetos LocalDate. Que pasa si por ejemplo quiero generar un período entre 2 fechas que llevan horas, minutos y segundos específicos? He buscado un poco y veo que la gente genera objetos LocalDateTime (que si llevan fechas) y para usar el objeto Period hacen uso del método toLocalDate para convertir los objetos LocalDateTime a LocalDate. Pero si esto pasa, yo entiendo que se pierde la parte de horas, minutos, segundos, milisegundos. Entonces, no entiendo… Read more »
[…] Otros artículos relacionados:Java BigInteger ,Java Equals and HashCode , Java8 Date Time API […]