Trabajo con fechas en Kotlin: revisión de bibliotecas y herramientas
El manejo de fechas y horas es una de las tareas clave en cualquier aplicación: desde el registro de eventos hasta el cálculo de plazos y la visualización de calendarios. En Kotlin, como lenguaje que funciona sobre JVM (y también admite proyectos multiplataforma), el desarrollador tiene acceso a varias bibliotecas potentes. En este artículo, analizaremos tres enfoques principales: kotlinx-datetime (recomendado para multiplataforma), java.time (para JVM/Android) y Joda-Time (biblioteca legendaria, relevante para proyectos antiguos).
1. kotlinx-datetime — biblioteca multiplataforma oficial
kotlinx-datetime es una biblioteca moderna de JetBrains, creada específicamente para Kotlin Multiplatform. Proporciona una API unificada para trabajar con fechas, horas, zonas horarias y duraciones en todas las plataformas (JVM, JS, Native).
Instalación (Gradle)
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1")}Clases principales y ejemplos
Instant— momento en el tiempo (UTC).LocalDateTime— fecha+hora sin zona horaria.LocalDate— solo fecha.LocalTime— solo hora.TimeZone— zona horaria.
import kotlinx.datetime.*
fun main() { // Momento actual en UTC val now: Instant = Clock.System.now() println("Now UTC: $now")
// Conversión a hora local (zona horaria del sistema) val localDateTime: LocalDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault()) println("Local: $localDateTime")
// Trabajo con fechas val today: LocalDate = localDateTime.date val tomorrow: LocalDate = today.plus(1, DateTimeUnit.DAY) println("Tomorrow: $tomorrow")
// Diferencia entre fechas val daysBetween = tomorrow.daysUntil(today) println("Days between: $daysBetween") // -1
// Análisis de cadena val parsedDate = LocalDate.parse("2025-03-15") println("Parsed: $parsedDate")}2. java.time (ThreeTen-Backport) — estándar para JVM y Android
A partir de Java 8, el paquete java.time (JSR-310) se incluyó en la biblioteca estándar. Para Android API < 26 se utiliza ThreeTen-Backport (o ThreeTenABP para Android). Kotlin es completamente compatible con esta API.
Instalación (para Android con minSdk < 26)
dependencies { implementation("org.threeten:threetenbp:1.6.9")}Ejemplos
import java.time.*
fun main() { // Fecha y hora actuales val now = LocalDateTime.now() println("Now: $now")
// Creación de una fecha específica val date = LocalDate.of(2025, Month.DECEMBER, 25) println("Christmas: $date")
// Formateo val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") val formatted = now.format(formatter) println("Formatted: $formatted")
// Diferencia entre fechas val start = LocalDate.of(2025, 1, 1) val end = LocalDate.of(2025, 12, 31) val days = ChronoUnit.DAYS.between(start, end) println("Days in 2025: $days") // 364}3. Joda-Time — biblioteca probada por el tiempo
Joda-Time fue el estándar de facto antes de la aparición de java.time. Hoy en día se utiliza principalmente en proyectos legacy. La biblioteca ofrece una funcionalidad rica, pero se considera obsoleta: se recomienda migrar a java.time o kotlinx-datetime.
Instalación
dependencies { implementation("joda-time:joda-time:2.12.7")}Ejemplo
import org.joda.time.*import org.joda.time.format.DateTimeFormat
fun main() { val now = DateTime.now() println("Now: $now")
// Agreg