Trabalho com datas em Kotlin: bibliotecas e ferramentas (Kotlinx-datetime, Joda-Time, java.time)

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations