Trabajo con fechas en Kotlin: bibliotecas y herramientas (Kotlinx-datetime, Joda-Time, java.time)

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 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

Recommendations