Herramientas de usuario

Herramientas del sitio


bloque4:fechas

¡Esta es una revisión vieja del documento!


Fechas y horas

paquete java.time

Con la versión 8 de Java (2014) se incluyó un nuevo paquete con un conjunto de clases que facilitan el trabajo con fechas y horas.

Estas nuevas clases sustituyen a las viejas clases Date, Calendar, Gregorian Calendar, etc.

Las nuevas clases LocalDate, LocalTime y LocalDateTime tienen métodos comunes que funcionan del mismo modo.

Clase LocalDate

Se usa para almacenar fechas sin atender a la zona horaria. Se compone de 3 enteros: días, meses y años. Tiene una gran cantidad de métodos estáticos.

Hay que tener en cuenta que estas clases almacenan un elemento inmutable (una fecha fija). Si quiero modificar su valor, debo cambiarlo a través de sus métodos y guardar el nuevo objeto.

Instanciar LocalDate

Para crear un objeto de tipo LocalDate puedo utilizar alguno de sus método estáticos. LocalDate no tiene constructor, y solo se pueden crear objetos a través de sus métodos estáticos.

//Obtener la fecha de hoy (basada en el reloj del Sistema)
 
LocalDate fechaActual = LocalDate.now();
 
//Obtener una fecha cualquiera
LocalDate fecha = LocalDate.of(2018, 3, 23); 
//Almacena la fecha de 23-3-2018
 
//Para obtener una fecha a partir de un String
LocalDate fecha = LocalDate.parse("2007-12-03");

Métodos de instancia

LocalDate fechaActual = LocalDate.now();

  • fechaActual.toString() : Obtengo un String con la fecha
  • fechaActual.compareTo(fecha) : Compara 2 fechas: devuelve int negativo si fechaActual es anterior, positivo si es posterior, 0 si es igual
  • fechaActual.isBefore(fecha) : Indica si una fecha es anterior a otra. true si fechaActual es anterior a fecha
  • fechaActual.isAfter(fecha) : Indica si una fecha es posterior a otra. true si fechaActual es posterior a fecha
  • fechaActual.getYear() : Devuelve un int con el año
  • fechaActual.getMonthValue() : Devuelve un int con el mes (1-12)
  • fechaActual.getDayOfMonth() : Devuelve un int con el día del mes
  • fechaActual.getDayOfWeek() : Devuelve un int con el día de la semana (1-7)
  • fechaActual = fechaActual.minusDays(30) : Devuelve la fecha contenida restándole 30 días
  • fechaActual.minusMonths(4) : Devuelve la fecha contenida restándole 4 meses.
  • fechaActual.minusYears(5) : Devuelve la fecha contenida restándole 5 años.
  • fechaActual.plusDays(30) : Devuelve la fecha contenida sumándole 30 días.
  • fechaActual.plusMonths(4) : Devuelve la fecha contenida sumándole 4 meses.
  • fechaActual.plusYears(5) : Devuelve la fecha contenida sumándole 5 años.
  • fechaActual.withDayOfMonth(7) : Devuelve la fecha contenida, cambiando el día a 7
  • fechaActual.withMonth(3) : Devuelve la fecha contenida, cambiando el mes a 3
  • fechaActual.withYear(2015) : Devuelve la fecha contenida, cambiando el año a 2015

Recordar que el objeto LocalDate no cambia nunca, por lo que el nuevo objeto generado hay que guardarlo en una variable:

fechaActual = fechaActual.plusDays(234);

Clase Period

Podemos usar esta clase simplemente para calcular el tiempo que pasa entre 2 fechas LocalDate. Es útil para calcular edades de forma correcta.

LocalDate fecha1 = LocalDate.now();
LocalDate fecha2 = LocalDate.Parse("2000-04-01");
 
Period diferencia = Period.between(fecha2, fecha1);
 
//Muestra los días de diferencia
System.out.println(diferencia.getDays());
 
 
//Muestra los meses de diferencia
System.out.println(diferencia.getMonths());
 
//Muestra los años de diferencia
System.out.println(diferencia.getYears());

Clase LocalDateTime

Esta clase funciona igual que la clase LocalDate. La diferencia es que guarda una fecha y una hora.

  • Obtener fecha y hora actual:

LocalDateTime fechaHora = LocalDateTime.now()

  • Crear una fecha con hora concreta (25-7-2016 22:11:30)

LocalDateTime dateTime = LocalDateTime.of(2016, 7, 25, 22, 11, 30)

  • Modificar una fecha
LocalDateTime dateTime = LocalDateTime.of(2016, 7, 25, 22, 11, 30);
LocalDateTime dateTime1 = dateTime.withYear(2017);
LocalDateTime dateTime2 = dateTime.withMonth(8);
LocalDateTime dateTime3 = dateTime.withDayOfMonth(27);
LocalDateTime dateTime4 = dateTime.withHour(20);
LocalDateTime dateTime5 = dateTime.withMinute(25);
LocalDateTime dateTime6 = dateTime.withSecond(23);
LocalDateTime dateTime7 = dateTime.withNano(24);

Clase LocalTime

Funciona igual que las anteriores pero solo almacena una hora.

//Hora actual
LocalTime horaActual = LocalTime.now();
 
//Almacenar una hora cualquiera (15:45:59)
LocalTime hora = LocalTime.of(15, 45, 59);
 
//Almacenar una hora a partir de un String
LocalTime hora = LocalTime.parse("23:12:59");
 
//Siempre en formato hh-mm-ss

Métodos de instancia

getMinute(), getSecond(), getHour(), minusHours(), plusHours(), minusMinutes(), plusMinutes(), minusSeconds(), plusSeconds(), withHour(), withMinute(), etc.

LocalTime time = LocalTime.of(14, 30, 35); //14:30:35
LocalTime time1 = time.withHour(20); //20:30:35
LocalTime time2 = time.withMinute(25); //14:25:35
LocalTime time3 = time.withSecond(23); //14:30:23
LocalTime time4 = time.withNano(24); //14:30:35.000000024
LocalTime time5 = time.with(ChronoField.HOUR_OF_DAY, 23); //23:30:35

Clase DateTimeFormatter

Mediante esta clase podemos mostrar o leer fechas y horas en el formato que deseamos. Por ejemplo, 23/07/2017 para una fecha o 01-27-45 para una hora.

Para dar formato a las fechas tenemos algunos comodines para representar cada valor (dias, meses, años, etc. Veamos cuales son los más importantes.

CaracterRepresenta

y, u, nos permite acceder al año en formato de cuatro o dos dígitos (2014 o 14).

D, nos permite obtener el número de día del año (225).

d, al contrario del anterior nos devuelve el número del día del mes en cuestión (27).

M, nos ayuda a obtener el mes del año en forma numérica, L nos da el mes en texto.

H, nos da la hora.

s, nos da los segundos.

m, nos permite obtener los minutos.

a, nos da el am o pm de la hora.

En la API de Java de la clase DateTimeFormatter se pueden ver todos los formatos.

Uso de DateTimeFormatter

Crear un DateTimeFormatter, aplicádole un patrón distinto:

DateTimeFormatter formateador = DateTimeFormatter.ofPattern("dd/MM/yyyy");

Obtener la fecha de hoy:

LocalDate fecha = LocalDate.now()

Mostrar la fecha de hoy, con el formato establecido en el DateTimeFormatter:

//Muestra la fecha en formato dd/mm/aaaa
System.out.println(fecha.format(formateador));
System.out.println(formateador.format(fecha));

Muestrar o almacenar una fecha obtenida en un formato distinto:

System.out.println(LocalDate.parse("13/12/2015", formateador));
 
fecha = fecha.parse(13/12/2015”, formateador); 

© 2025 Fernando Valdeón

bloque4/fechas.1520164088.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)