Trabalho com datas em Kotlin: visão geral das bibliotecas e ferramentas
Trabalhar com datas e horas é uma das tarefas essenciais no desenvolvimento moderno. Kotlin, sendo uma linguagem moderna, oferece várias maneiras poderosas de gerenciar datas. Neste artigo, vamos explorar as principais bibliotecas e abordagens que ajudarão você a trabalhar eficientemente com datas em projetos Kotlin, incluindo desenvolvimento Android e aplicações servidoras.
1. Biblioteca padrão java.time (Java 8+)
A partir do Java 8, os desenvolvedores tiveram acesso a uma API completamente reformulada para trabalhar com datas — java.time. Como Kotlin é totalmente compatível com Java, você pode usar esta ferramenta poderosa diretamente. Esta é a forma mais comum para aplicações servidoras em Kotlin.
Classes principais:
LocalDate— data sem hora (ano, mês, dia)LocalTime— hora sem dataLocalDateTime— data e hora sem fuso horárioZonedDateTime— data e hora com fuso horárioInstant— momento no tempo em UTCDurationePeriod— para trabalhar com intervalos
import java.time.LocalDateimport java.time.LocalDateTimeimport java.time.format.DateTimeFormatter
fun main() { // Data atual val today = LocalDate.now() println("Hoje: $today")
// Criando uma data específica val birthDate = LocalDate.of(1990, 5, 15) println("Data de nascimento: $birthDate")
// Formatação val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy") val formatted = today.format(formatter) println("Data formatada: $formatted")
// Parsing de string val parsedDate = LocalDate.parse("2024-01-01") println("Data parseada: $parsedDate")
// Trabalhando com data e hora val now = LocalDateTime.now() println("Agora: $now")}2. kotlinx-datetime — biblioteca oficial da JetBrains
Para projetos que utilizam Kotlin Multiplatform, a biblioteca padrão kotlinx-datetime é a melhor escolha. Ela fornece uma API unificada para todas as plataformas (JVM, JS, Native, Android).
Adicionando dependência (build.gradle.kts):
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1")}Principais recursos:
Instant— momento no tempoLocalDateTime— data e hora localLocalDate— data localLocalTime— hora localTimeZone— fusos horáriosDateTimePeriod— período de tempo
import kotlinx.datetime.*
fun main() { // Data e hora atuais val now = Clock.System.now() println("Momento atual: $now")
// Convertendo para componentes locais val localDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault()) println("Hora local: $localDateTime")
// Criando uma data val date = LocalDate(2024, 12, 25) println("Data: $date")
// Formatação val formatted = localDateTime.toString() println("Representação em string: $formatted")
// Parsing val parsed = Instant.parse("2024-01-01T12:00:00Z") println("Instant parseado: $parsed")
// Trabalhando com fusos horários val moscowTime = now.toLocalDateTime(TimeZone.of("Europe/Moscow")) println("Horário de Moscou: $moscowTime")}3. ThreeTenABP — para compatibilidade reversa no Android
Se sua aplicação suporta Android API abaixo de 26 (Android 8.0), você não pode usar java.time diretamente. Neste caso, a biblioteca ThreeTenABP<