Java time package y clases fundamentales

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? .

Java Time Package

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.

Java Time Package Instant

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:

JavaTimePackageCode

 

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.

Java Time Package LocalDate

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());
}

}

El resultado es:
JavaTimePackageLocalDateCodigo

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.

JavaTimePackageLocalDateTime

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

It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

7 Responses to Java time package y clases fundamentales

  1. jose 8 Septiembre, 2016 at 8:56 #

    ¿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?

    • Cecilio Álvarez Caules 8 Septiembre, 2016 at 19:13 #

      hay que usar un atribute converter 🙂 , jpa 2.1 es previo a java 8

  2. Gabriel 15 Septiembre, 2016 at 12:38 #

    Y lo más importante: las clases de esta API sí que son inmutables.

    • Cecilio Álvarez Caules 16 Septiembre, 2016 at 11:43 #

      gracias por el aporte 🙂

  3. Cristian 22 Septiembre, 2016 at 18:31 #

    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 pueda instruirme con esto. Gracias

    • Cecilio Álvarez Caules 26 Septiembre, 2016 at 13:33 #

      La verdad es que no se me ocurre nada , me parece extraño 🙁

      • Cristian 27 Septiembre, 2016 at 0:08 #

        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

Deja un comentario