Skip to content

1 Introducción a las Fechas Java8

Introducción

A partir de Java 8, Java incorpora una nueva API para el manejo de fechas, pero hasta entonces el manejo de fechas era muy diferente.

Hoy en día la mayoría de aplicaciones Java usan está nueva API, pero aún hay aplicaciones que usan las versiones antiguas.

Las tres clases principales para el manejo de fechas en Java anterior a la 8 son:

  • Date: Almacena la fecha.
  • DateFormat y SimpleDateFormat: Aplica formatos a las fechas.
  • Calendar: Realizar cálculos sobre fechas.

Una de las desventajas que tiene está API es que no trabaja con la internacionalización.

La clase Date

La clase Date representa un tiempo específico con la precisión de los milisegundos.

Los constructores de esta clase son:

  • Date(): Crea un objeto Date con la fecha y hora actuales.
  • Date(int year, int month, int date): Crea un objeto Date con los datos del año, del mes (comienza en 0 y acaban en 11) y con el día.

Estos métodos también tienen una versión para recibir la hora y los minutos y la hora, los minutos y los segundos.

Otra versión del método es Date(long date) que crea un objeto de tipo Date a partir de los milisegundos especificados desde el tiempo base estándar conocido como epoch, es decir, desde el 1 de Enero de 1970, OO:OO:OO GTM.

¡CUIDADA!

Todos estos constructores están deprecated y la mayoría de métodos como por ejemplo getYear(), getMonth(), etc. también están deprecated.

Algunos métodos cómo after(Date when) o before(Date when) no están deprecated. Estos métodos sirven para comprobar si una fecha sucede después o antes que otra, respectivamente.

DateFormat y SimpleDateFormat

DateFormat es una clase abstracta hecha para subclases de formateo de fecha/tiempo.

SimpleDateFormat es una clase concreta para formatear y parsear fechas de manera sensible a la configuración regional.

El formato de fecha y hora se especifican con cadenas de patrón de fechas y horas:

|Letra |Componente de fecha u hora|Presentación |Ejemplo | |:-------:|:-----------M-------------:|:-------------:|:---------:| |G |Designador de era |Texto |AD | |y |Año |Año |1996;96 | |M |Mes del año |Mes |July;Jul;07| |d |Día del mes |Número |9;09 | |H |Hora del día(0-23) |Número |23 | |m |Minutos en una hora |Número |10 | |s |Segundo en un minuto |Número |2;02 |

Info

Para comprobar el resto de patrones puedes ir a la API y observar la tabla: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/text/SimpleDateFormat.html

Con el método format(Date date), formateamos la fecha indicada con el patrón indicado:

Date date = new Date(2022, 10, 10, 7, 2 ,5);
DateFormat format = new SimpleDateFormat("dd/M/yy");
System.out.println(format.format(date)); // 10/11/22

Con el método parse(String str) se parsea una cadena a la clase Date siempre y cuando cumpla el formato, por el contrario, lanzará una excepción ParseException:

Date newDate = format.parse("12/10/22");

Calendar

Una vez creada una fecha , esta simplemente almacena la información . Si queremos realizar operaciones sobre ella lo que tenemos que construir es un Calendar. Una vez construido el calendario le asignamos nuestra fecha con el método setTime(Date date)

Calendar es una clase abstracta que permite trabajar con fechas en un tipo de calendario. Existe diferentes tipos de subclases que funcionan como calendarios, como por ejemplo, GregorianCalendar() que permite crear un calendario gregoriano.

Calendar calendario = new GregorianCalendar();
calendario.setTime(date);

Para obtener el calendario de la zona actual y de la fecha actual se puede usar el método estático getInstance():

Calendar calendario = Calendar.getInstance();    

La clase Calendar tiene varios atributos estáticos para indicar meses, Calendar.FEBRUARY, días de la semana, Calendar.MONDAY, momentos del año, Calendar.DAY_OF_MONTH, Calendar.HOUR, etc.

Una vez establecido el calendario, se puede hacer diferentes operaciones sobre él:

  • add(int field, int amount), siendo el primer parámetro el atributo estático para indicar que es lo que vamos añadir, y el segundo parámetro la cantidad a añadir.
  • after(Object object), comprueba si el calendario representa un momento posterior a la hora indicada en el objeto especificado.
  • before(Object objet), comprueba si el calendario representa un momento anterior a la hora indicada en el objeto especificado.
Date date = new Date(2022, 10, 12); // 12/11/22
Calendar calendar = Calendar.getInstance(); // Se obtiene el calendario actual
calendar.setTime(date); // se le indica la fecha

calendar.add(Calendar.MONTH, 5); // Añadimos cinco meses 12/04/23

Nueva API de Java

A partir de Java 8, se creo una nueva API en Java para el manejo de fechas, con muchas ventajas sobre la API anterior, siendo una de ellas la internacionalización.