Trabalhando com datas e horas em Kotlin: do A ao Z — guia completo

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

Introdução ao trabalho com datas e horas em Kotlin



Trabalhar com datas e horas é uma das tarefas mais comuns no desenvolvimento moderno. Seja para registro de eventos, cálculo de prazos, planejamento de tarefas ou exibição de interface do usuário — não é possível prescindir de um bom trabalho com carimbos de data/hora. No Kotlin, que é totalmente compatível com Java, o padrão de facto é o pacote java.time, introduzido no Java 8. Este pacote substituiu os obsoletos java.util.Date e java.util.Calendar, oferecendo uma API thread-safe, imutável e intuitiva.



Neste artigo, abordaremos todos os aspectos essenciais do trabalho com datas e horas em Kotlin: desde a criação de objetos até sua formatação, parsing e realização de operações aritméticas. Você aprenderá a usar LocalDate, LocalTime, LocalDateTime, Instant, Duration e Period com exemplos práticos.



1. Classes principais para trabalhar com datas e horas



O pacote java.time contém várias classes-chave, cada uma resolvendo uma tarefa específica. Vamos analisá-las em detalhes.



1.1 LocalDate — trabalhando com data sem hora



A classe LocalDate representa uma data (ano, mês, dia) sem considerar hora e fuso horário. É ideal para aniversários, eventos de calendário e datas sem vínculo com um momento específico.



import java.time.LocalDate

fun main() { // Data atual val today = LocalDate.now() println("Hoje: $today") // 2025-04-05

// Data específica val newYear = LocalDate.of(2025, 1, 1) println("Ano Novo: $newYear")

// Parsing a partir de string val parsedDate = LocalDate.parse("2025-12-31") println("Data parseada: $parsedDate")}


1.2 LocalTime — trabalhando com hora sem data



LocalTime armazena apenas a hora (horas, minutos, segundos, nanossegundos). É útil para armazenar horário de início do dia de trabalho, agendas ou temporizadores.



import java.time.LocalTime

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

// Hora específica val meetingTime = LocalTime.of(14, 30, 0) println("Horário da reunião: $meetingTime")

// Parsing val parsedTime = LocalTime.parse("09:15:30") println("Hora parseada: $parsedTime")}


1.3 LocalDateTime — combinação de data e hora



LocalDateTime combina LocalDate e LocalTime. É a classe mais usada para armazenar um momento no tempo sem fuso horário.



import java.time.LocalDateTime

fun main() { // Data e hora atuais val current = LocalDateTime.now() println("Agora: $current")

// Criação a partir de componentes val specific = LocalDateTime.of(2025, 4, 5, 10, 30, 0) println("Momento específico: $specific")

// Combinação de data e hora val date = LocalDate.of(2025, 12, 25) val time = LocalTime.of(18, 0) val christmas = LocalDateTime.of(date, time) println("Natal: $christmas")}


1.4 Instant — momento no tempo em UTC



Instant representa um ponto na linha do tempo no formato Unix timestamp (quantidade de segundos e nanossegundos desde 1º de janeiro de 1970). É indispensável para armazenar logs, trabalhar com bancos de dados e trocar dados entre sistemas.



import java.time.Instant

fun main() { // Momento atual em UTC val now = Instant.now() println("Agora (UTC): $now")

// A partir de Unix timestamp val fromEpoch = Instant.ofEpochSecond(1_700_000_000) println("Do timestamp: $fromEpoch")

// Conversão para milissegundos val millis = now.toEpochMilli() println("Milissegundos: $millis")}


2. Formatação e parsing de datas e horas



Para converter datas em strings

Blogs

Book Recommendations