Trabalho com datas em Kotlin: visão geral de bibliotecas e ferramentas
O processamento de datas e horas é uma das tarefas principais em qualquer aplicação: desde o registro de eventos até o cálculo de prazos e exibição de calendários. Em Kotlin, como uma linguagem que roda sobre a JVM (e também suporta projetos multiplataforma), o desenvolvedor tem acesso a várias bibliotecas poderosas. Neste artigo, veremos três abordagens principais: kotlinx-datetime (recomendada para multiplataforma), java.time (para JVM/Android) e Joda-Time (biblioteca lendária, relevante para projetos antigos).
1. kotlinx-datetime — biblioteca oficial multiplataforma
kotlinx-datetime é uma biblioteca moderna da JetBrains, criada especificamente para Kotlin Multiplatform. Ela fornece uma API unificada para trabalhar com datas, horas, fusos horários e durações em todas as plataformas (JVM, JS, Native).
Instalação (Gradle)
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1")}Classes principais e exemplos
Instant— momento no tempo (UTC).LocalDateTime— data+hora sem fuso horário.LocalDate— apenas data.LocalTime— apenas hora.TimeZone— fuso horário.
import kotlinx.datetime.*
fun main() { // Momento atual em UTC val now: Instant = Clock.System.now() println("Now UTC: $now")
// Conversão para hora local (fuso horário do sistema) val localDateTime: LocalDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault()) println("Local: $localDateTime")
// Trabalho com datas val today: LocalDate = localDateTime.date val tomorrow: LocalDate = today.plus(1, DateTimeUnit.DAY) println("Tomorrow: $tomorrow")
// Diferença entre datas val daysBetween = tomorrow.daysUntil(today) println("Days between: $daysBetween") // -1
// Parsing de string val parsedDate = LocalDate.parse("2025-03-15") println("Parsed: $parsedDate")}2. java.time (ThreeTen-Backport) — padrão para JVM e Android
A partir do Java 8, o pacote java.time (JSR-310) foi incorporado à biblioteca padrão. Para Android API < 26, usa-se ThreeTen-Backport (ou ThreeTenABP para Android). Kotlin é totalmente compatível com esta API.
Instalação (para Android com minSdk < 26)
dependencies { implementation("org.threeten:threetenbp:1.6.9")}Exemplos
import java.time.*
fun main() { // Data e hora atuais val now = LocalDateTime.now() println("Now: $now")
// Criação de uma data específica val date = LocalDate.of(2025, Month.DECEMBER, 25) println("Christmas: $date")
// Formatação val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") val formatted = now.format(formatter) println("Formatted: $formatted")
// Diferença entre datas 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 testada pelo tempo
Joda-Time foi o padrão de facto antes do surgimento do java.time. Hoje é usada principalmente em projetos legados. A biblioteca oferece funcionalidades ricas, mas é considerada obsoleta — recomenda-se migrar para java.time ou kotlinx-datetime.
Instalação
dependencies { implementation("joda-time:joda-time:2.12.7")}Exemplo
import org.joda.time.*import org.joda.time.format.DateTimeFormat
fun main() { val now = DateTime.now() println("Now: $now")
// Adi