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).DurationyPeriod— 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.LocalDateyLocalTime.DateTimePeriodyDatePeriod— 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).
También en la biblioteca
GraphQL en PHP: Guía completa de la biblioteca webonyx/graphql-php
Geolocalización y mapas en Swift: CoreLocation y MapKit para iOS/macOS
Generación de Swagger/OpenAPI para Swift: herramientas y bibliotecas