Trabajo con fechas en Kotlin: revisión de bibliotecas y herramientas

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 con fechas en Kotlin: revisión de bibliotecas y herramientas



El trabajo con fechas y horas es una de las tareas clave en la mayoría de las aplicaciones. En Kotlin, como lenguaje multiplataforma moderno, existen varias formas de trabajar con fechas. En este artículo, revisaremos las principales bibliotecas y herramientas que te ayudarán a gestionar eficientemente fechas, horas, intervalos y zonas horarias en proyectos Kotlin.



1. Biblioteca estándar de Java: java.time



Dado que Kotlin es completamente compatible con Java, puedes usar la potente biblioteca java.time (JSR-310), que apareció en Java 8. Esta es la forma recomendada para aplicaciones de servidor y Android (a partir de API 26+).



Clases principales:

  • LocalDate — fecha sin hora (año, mes, día).
  • LocalTime — hora sin fecha.
  • LocalDateTime — fecha y hora sin zona horaria.
  • ZonedDateTime — fecha y hora con zona horaria.
  • Instant — momento en el tiempo en UTC (tiempo de máquina).
  • Duration y Period — intervalos de tiempo.


Ejemplo de uso:

import java.time.*

fun main() { // Fecha y hora actual val now = LocalDateTime.now() println("Ahora: $now")

// Creación de una fecha específica val birthDate = LocalDate.of(1990, Month.JUNE, 15) println("Fecha de nacimiento: $birthDate")

// Trabajo con zonas horarias val zonedDateTime = ZonedDateTime.now(ZoneId.of("Europe/Moscow")) println("Hora en Moscú: $zonedDateTime")

// Diferencia entre fechas val from = LocalDate.of(2023, 1, 1) val to = LocalDate.now() val daysBetween = ChronoUnit.DAYS.between(from, to) println("Días desde Año Nuevo: $daysBetween")

// Formateo val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") println("Fecha formateada: ${now.format(formatter)}")}


Ventajas: integrada, confiable, soporte completo de todas las funciones.

Desventajas: no compatible en Android antiguo (antes de API 26) sin desugaring.



2. kotlinx-datetime (biblioteca multiplataforma de JetBrains)



Para proyectos multiplataforma (KMP), JetBrains creó la biblioteca kotlinx-datetime. Proporciona una API unificada para todas las plataformas (JVM, Native, JS).



Clases principales:

  • Instant — momento en el tiempo en UTC.
  • LocalDateTime — fecha+hora sin zona horaria.
  • LocalDate y LocalTime.
  • DateTimePeriod y DatePeriod — intervalos.
  • TimeZone — zona horaria.


Ejemplo de uso:

import kotlinx.datetime.*

fun main() { // Momento actual val now = Clock.System.now() println("UTC actual: $now")

// Conversión a hora local val localDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault()) println("Hora local: $localDateTime")

// Creación de fecha val date = LocalDate(2024, 12, 25) println("Fecha: $date")

// Diferencia entre fechas val start = LocalDateTime(2024, 1, 1, 0, 0) val end = LocalDateTime(2024, 12, 31, 23, 59) val period = start.periodUntil(end, DateTimeUnit.DAY) println("Días entre: $period")

// Formateo (requiere biblioteca separada o manual) println("Año: ${localDateTime.year}, mes: ${localDateTime.monthNumber}")}


Ventajas: multiplataforma, ligera, soporte oficial.

Desventajas: capacidades de formateo limitadas (sin DateTimeFormatter integrado).

Recommendations