Trabajo con fechas y horas en Java: métodos avanzados y API

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo avanzado con fechas y horas en Java: de lo básico al profesionalismo

\n\n

Trabajar con fechas y horas es una de las tareas clave de cualquier aplicación empresarial. En Java, durante mucho tiempo el estándar fue el engorroso java.util.Date y java.util.Calendar, pero con el lanzamiento de Java 8 la situación cambió drásticamente. La nueva API java.time (JSR-310) ofreció a los desarrolladores un conjunto de herramientas potente, seguro para subprocesos e intuitivo. En este artículo, analizaremos técnicas avanzadas para trabajar con fechas y horas que serán útiles para todo desarrollador Java.

\n\n

1. Fundamentos de la API java.time: LocalDate, LocalTime, LocalDateTime

\n\n

El primer paso hacia el trabajo profesional es comprender las tres clases básicas que reemplazaron a las antiguas equivalentes:

\n\n
    \n
  • LocalDate — fecha sin hora (año, mes, día).
  • \n
  • LocalTime — hora sin fecha (horas, minutos, segundos, nanosegundos).
  • \n
  • LocalDateTime — combinación de fecha y hora sin vinculación a una zona horaria.
  • \n
\n\n
// Obtener la fecha y hora actuales\nLocalDate today = LocalDate.now(); // 2025-03-21\nLocalTime now = LocalTime.now(); // 14:30:15.123\nLocalDateTime current = LocalDateTime.now(); // 2025-03-21T14:30:15.123\n\n// Crear una fecha específica\nLocalDate birthDate = LocalDate.of(1990, Month.JUNE, 15);\nLocalTime meetingTime = LocalTime.of(10, 30, 0);\n\n// Manipulaciones con fechas\nLocalDate nextWeek = today.plusWeeks(1);\nLocalDate lastMonth = today.minusMonths(1);
\n\n

Estas clases son inmutables — cualquier operación devuelve un nuevo objeto. Esto garantiza la seguridad para subprocesos y la previsibilidad del código.

\n\n

2. Trabajo con zonas horarias: ZonedDateTime y ZoneId

\n\n

Las aplicaciones globales no pueden ignorar las zonas horarias. Para esto, java.time proporciona la clase ZonedDateTime.

\n\n
// Hora actual en UTC\nZonedDateTime utcNow = ZonedDateTime.now(ZoneOffset.UTC);\n\n// Hora en una zona horaria específica\nZoneId moscowZone = ZoneId.of("Europe/Moscow");\nZonedDateTime moscowTime = ZonedDateTime.now(moscowZone);\n\n// Conversión entre zonas\nZonedDateTime nyTime = moscowTime.withZoneSameInstant(ZoneId.of("America/New_York"));\n\n// Obtener el desplazamiento\nZoneOffset offset = moscowTime.getOffset(); // +03:00
\n\n

Consejo profesional: siempre almacene las fechas en UTC en el servidor y conviértalas a la zona horaria local solo en la capa de presentación (UI). Esto evitará problemas con el cambio de horario de verano/invierno.

\n\n

3. Análisis y formato de fechas: DateTimeFormatter

\n\n

Una de las tareas más comunes es convertir una cadena en una fecha y viceversa. DateTimeFormatter ofrece capacidades flexibles.

\n\n

Formato básico

\n\n
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");\nLocalDateTime dateTime = LocalDateTime.parse("21.03.2025 14:30:00", formatter);\nString formatted = dateTime.format(formatter); // "21.03.2025 14:30:00"
\n\n

Patrones avanzados

\n\n
// ISO-8601\nDateTimeFormatter isoFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;\nString isoDate = dateTime.format(isoFormatter); // "2025-03-21T14:30:00"\n\n// Formato localizado\nDateTimeFormatter italianFormatter = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ITALY);\nString italianDate = dateTime.format(italianFormatter); // "21 marzo 2025"\n\n// Formato personalizado con campos de texto\nDateTimeFormatter customFormatter = new DateTimeFormatterBuilder()\n    .appendValue(ChronoField.YEAR)\n    .appendLiteral(" año, ")\n    .appendText(ChronoField.MONTH_OF_YEAR, TextStyle.FULL)\n    .appendLiteral(" ")\n    .appendValue(ChronoField.DAY_OF_MONTH)\n    .toFormatter();\nString custom = dateTime.format(customFormatter); // "2025 año, marzo 21"
\n\n

Es importante recordar: DateTimeFormatter también es

Blogs

Book Recommendations