Trabalho com datas em Kotlin: visão geral de bibliotecas e ferramentas
Trabalhar com datas e horas é uma das tarefas principais na maioria das aplicações. Em Kotlin, como uma linguagem multiplataforma moderna, existem várias maneiras de trabalhar com datas. Neste artigo, vamos analisar as principais bibliotecas e ferramentas que ajudarão você a gerenciar eficientemente datas, horas, intervalos e fusos horários em projetos Kotlin.
1. Biblioteca padrão Java: java.time
Como Kotlin é totalmente compatível com Java, você pode usar a poderosa biblioteca java.time (JSR-310), que surgiu no Java 8. Esta é a forma recomendada para aplicações servidoras e Android (a partir da API 26+).
Classes principais:
LocalDate— data sem hora (ano, mês, dia).LocalTime— hora sem data.LocalDateTime— data e hora sem fuso horário.ZonedDateTime— data e hora com fuso horário.Instant— momento no tempo em UTC (tempo de máquina).DurationePeriod— intervalos de tempo.
Exemplo de uso:
import java.time.*
fun main() { // Data e hora atuais val now = LocalDateTime.now() println("Agora: $now")
// Criando uma data específica val birthDate = LocalDate.of(1990, Month.JUNE, 15) println("Data de nascimento: $birthDate")
// Trabalhando com fusos horários val zonedDateTime = ZonedDateTime.now(ZoneId.of("Europe/Moscow")) println("Hora em Moscou: $zonedDateTime")
// Diferença entre datas val from = LocalDate.of(2023, 1, 1) val to = LocalDate.now() val daysBetween = ChronoUnit.DAYS.between(from, to) println("Dias desde o Ano Novo: $daysBetween")
// Formatação val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") println("Data formatada: ${now.format(formatter)}")}Vantagens: integrada, confiável, suporte completo a todas as funções.
Desvantagens: não suportada em Android antigo (antes da API 26) sem dessugaring.
2. kotlinx-datetime (biblioteca multiplataforma da JetBrains)
Para projetos multiplataforma (KMP), a JetBrains criou a biblioteca kotlinx-datetime. Ela fornece uma API unificada para todas as plataformas (JVM, Native, JS).
Classes principais:
Instant— momento no tempo em UTC.LocalDateTime— data+hora sem fuso horário.LocalDateeLocalTime.DateTimePeriodeDatePeriod— intervalos.TimeZone— fuso horário.
Exemplo de uso:
import kotlinx.datetime.*
fun main() { // Momento atual val now = Clock.System.now() println("UTC atual: $now")
// Convertendo para hora local val localDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault()) println("Hora local: $localDateTime")
// Criando uma data val date = LocalDate(2024, 12, 25) println("Data: $date")
// Diferença entre datas val start = LocalDateTime(2024, 1, 1, 0, 0) val end = LocalDateTime(2024, 12, 31, 23, 59) val period = start.periodUntil(end, DateTimeUnit.DAY) println("Dias entre: $period")
// Formatação (requer biblioteca separada ou manual) println("Ano: ${localDateTime.year}, mês: ${localDateTime.monthNumber}")}Vantagens: multiplataforma, leve, suporte oficial.
Desvantagens: recursos limitados de formatação (sem DateTimeFormatter integrado).
Também na biblioteca
Tokens JWT em TypeScript: guia completo para trabalhar com JSON Web Tokens
CoreLocation para Swift: guia completo com exemplos
Parsing de HTML em C++: visão geral das bibliotecas e exemplos de código
Java para geolocalização e mapas: bibliotecas, API e exemplos