Trabajar con fechas y la API java.time

Capítulo 147

Tiempo estimado de lectura: 6 minutos

+ Ejercicio
Audio Icon

Escuchar en audio

0:00 / 0:00

36. Trabajar con fechas y la API java.time

La manipulación de fechas y horas es una necesidad común en muchas aplicaciones Java. Desde el lanzamiento de Java 8, la API java.time se ha convertido en la opción estándar para trabajar con fechas y horas de una manera más sencilla y menos propensa a errores. Esta API se inspiró en la biblioteca Joda-Time y es conocida por su diseño fluido e inmutable. Exploremos los aspectos principales de esta API y cómo puede usarla para realizar operaciones de fechas complejas.

Introducción a la API java.time

La API java.time incluye una serie de clases diseñadas para tratar conceptos de tiempo como instantes, duraciones, fechas, horas, zonas horarias y períodos. Las clases son inmutables y seguras para subprocesos, lo que significa que puedes usarlas sin preocupaciones en entornos de subprocesos múltiples.

Clases Fundamentales

  • LocalDate: representa una fecha sin hora ni zona horaria (por ejemplo, 2023-03-15).
  • Hora local: representa una hora sin fecha ni zona horaria (por ejemplo, 10:15:30).
  • LocalDateTime: combina LocalDate y LocalTime, lo que representa una fecha y hora sin zona horaria.
  • ZonedDateTime: Representa una fecha y hora completa con zona horaria.
  • Instantáneo: Representa un momento específico, generalmente utilizado para marcar eventos en las aplicaciones.
  • Duración: Representa una cantidad de tiempo en términos de segundos y nanosegundos.
  • Período: Representa una cantidad de tiempo en términos de años, meses y días.

Manipulación de fechas

La manipulación de la fecha se ve facilitada por las clases LocalDate, LocalTime y LocalDateTime. Puede crear instancias de estas clases utilizando sus métodos de fábrica estáticos, como now(), of() y parse(). Una vez que tenga una instancia, puede modificar sus propiedades usando métodos como plusDays(), minusWeeks(), withYear(), etc. .


Fecha LocalDate = LocalDate.now();
LocalDate mañana = date.plusDays(1);
LocalDate últimoMesSameDía = fecha.minusMeses(1);
Fechalocal en 2025 = fecha.conAño(2025);

Formato y análisis de fechas

El formateo y análisis de fechas los realiza principalmente la clase DateTimeFormatter. Puedes utilizar formateadores predefinidos o crear los tuyos propios para representar fechas y horas según tus necesidades.


Formateador DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/aaaa");
Cadena formattedDate = fecha.formato(formateador); // "15/03/2023"
LocalDate dateFromString = LocalDate.parse("15/03/2023", formateador);

Trabajar con zonas horarias

La clase ZonedDateTime se utiliza para manejar fechas y horas en diferentes zonas horarias. Puede convertir un LocalDateTime en un ZonedDateTime aplicando una zona horaria específica utilizando el método atZone(). También es posible ajustar un ZonedDateTime a otra zona horaria con el método withZoneSameInstant().

Continúa en nuestra aplicación.
  • Escuche el audio con la pantalla apagada.
  • Obtenga un certificado al finalizar.
  • ¡Más de 5000 cursos para que explores!
O continúa leyendo más abajo...
Download App

Descargar la aplicación


ZoneId newYorkZoneId = ZoneId.of("América/Nueva_York");
ZonedDateTime zonaDateTime = LocalDateTime.now().atZone(newYorkZoneId);
ZonedDateTime ZonedDateTimeInTokyo = ZonedDateTime.withZoneSameInstant(ZoneId.of("Asia/Tokio"));

Comparación de fechas y horas

Comparar fechas y horas es una operación común, y la API java.time ofrece métodos como isBefore(), isAfter() y isEqual() para facilitar estas comparaciones.


booleano esDespués = mañana.isDespués(fecha);
booleano isBefore = últimoMesSameDía.isBefore(fecha);
booleano esEqual = in2025.isEqual(fecha.conAño(2025));

Intervalos de tiempo

Las clases Duración y Period le permiten representar y manipular intervalos de tiempo. Duración se usa para cantidades de tiempo en horas, minutos, segundos y nanosegundos, mientras que Period se usa para días, meses y años.


Duración duración = Duración.entre(Horalocal.MEDIODIA,Horalocal.MIDNIGHT);
Periodo periodo = Periodo.entre(FechaLocal.de(2023, Mes.ENERO, 1), FechaLocal.de(2023, Mes.DICIEMBRE, 31));

API de ajuste temporal

La API java.time también incluye ajustadores temporales que le permiten realizar operaciones complejas de forma concisa. Por ejemplo, puede encontrar el primer día del mes siguiente, el siguiente día hábil o el último día del año utilizando ajustadores temporales.


LocalDate primerDíaDeNextMes = fecha.con(TemporalAdjusters.firstDíaDelSiguienteMes());
LocalDate nextWednesday = date.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
LocalDate último día del año = fecha.with(TemporalAdjusters.lastDayOfYear());

Conclusión

La API java.time es una herramienta potente y flexible para trabajar con fechas y horas en Java. Con su diseño inmutable y seguro para subprocesos, proporciona una manera confiable y eficiente de manejar conceptos temporales complejos en sus aplicaciones. Al dominar esta API, podrá manejar cualquier desafío relacionado con la fecha y la hora con facilidad.

Ahora responde el ejercicio sobre el contenido:

¿Cuál de las siguientes afirmaciones sobre la API `java.time` es cierta?

¡Tienes razón! Felicitaciones, ahora pasa a la página siguiente.

¡Tú error! Inténtalo de nuevo.

Siguiente capítulo

Internacionalización y localización en Java.

Arrow Right Icon
Portada de libro electrónico gratuitaAprende a programar en Java completo, desde programación lógica hasta avanzada
62%

Aprende a programar en Java completo, desde programación lógica hasta avanzada

5

(3)

238 páginas

Descarga la aplicación para obtener una certificación gratuita y escuchar cursos en segundo plano, incluso con la pantalla apagada.