Trabajo con fechas y horas en Kotlin: guía completa

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

Introducción al trabajo con fechas y horas en Kotlin

Trabajar con fechas y horas es una de las tareas clave en el desarrollo de cualquier aplicación. Ya sea para el registro de eventos, el cálculo de plazos, la visualización de un calendario o el trabajo con marcas de tiempo, no se puede prescindir de un conjunto de herramientas fiable. En el ecosistema de Kotlin, para estos fines se utiliza la potente biblioteca java.time, que reemplazó a las obsoletas java.util.Date y java.util.Calendar. Gracias a la compatibilidad total con Java, Kotlin permite usar todas las funcionalidades de java.time directamente, además de añadir extensiones convenientes y azúcar sintáctico.

En este artículo, analizaremos en detalle cómo crear, formatear, analizar (parsear) y convertir fechas y horas en Kotlin. Conocerás las clases clave, como LocalDate, LocalTime, LocalDateTime, ZonedDateTime e Instant, y también aprenderás a trabajar con periodos y duraciones. Todos los ejemplos de código están escritos en Kotlin puro y listos para usar.

Clases principales para trabajar con fechas y horas

La biblioteca java.time ofrece varias clases clave, cada una de las cuales resuelve una tarea específica. Veámoslas en detalle.

LocalDate — trabajar con fecha sin hora

La clase LocalDate representa una fecha (año, mes, día) sin tener en cuenta la hora ni la zona horaria. Es ideal para cumpleaños, eventos de calendario y tareas donde la hora no importa.

import java.time.LocalDate

fun main() {
    // Fecha actual
    val today = LocalDate.now()
    println("Hoy: $today")

    // Fecha específica
    val specificDate = LocalDate.of(2024, 12, 25)
    println("Navidad: $specificDate")

    // Parseo desde cadena
    val parsedDate = LocalDate.parse("2024-12-25")
    println("Parseado: $parsedDate")
}

LocalTime — trabajar con hora sin fecha

LocalTime almacena solo la hora (horas, minutos, segundos, nanosegundos). Se utiliza para horarios, temporizadores y marcas de tiempo sin vinculación a una fecha.

import java.time.LocalTime

fun main() {
    // Hora actual
    val now = LocalTime.now()
    println("Ahora: $now")

    // Hora específica
    val lunchTime = LocalTime.of(13, 30)
    println("Almuerzo a las: $lunchTime")

    // Parseo
    val parsedTime = LocalTime.parse("15:45:30")
    println("Parseado: $parsedTime")
}

LocalDateTime — combinación de fecha y hora

LocalDateTime combina LocalDate y LocalTime. Es la clase más utilizada para almacenar un instante de tiempo sin considerar la zona horaria.

import java.time.LocalDateTime
import java.time.LocalDate
import java.time.LocalTime

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

    // A partir de componentes individuales
    val date = LocalDate.of(2024, 12, 25)
    val time = LocalTime.of(10, 0)
    val christmasMorning = LocalDateTime.of(date, time)
    println("Mañana de Navidad: $christmasMorning")

    // Método combinado
    val newYear = LocalDateTime.of(2025, 1, 1, 0, 0)
    println("Año Nuevo: $newYear")
}

Formateo y parseo de fechas

Para convertir fechas a cadenas y viceversa se utiliza la clase DateTimeFormatter. Admite muchos formatos predefinidos y también permite crear patrones personalizados.

Formateo de fecha a cadena

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

fun main() {
    val now = LocalDateTime.now()

    // Formato ISO estándar
    val isoFormat = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
    println("ISO: $isoFormat")

    // Formato personalizado
    val customFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss")
    val
```                

Blogs

Book Recommendations