Trabalho com datas e horas em Java: do A ao Z para iniciantes

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 Java



Trabalhar com datas e horas é uma das tarefas essenciais no desenvolvimento de qualquer aplicação. Seja para registro de eventos, cálculo de prazos de entrega, gerenciamento de horários ou análise de dados — é fundamental entender como o Java gerencia objetos temporais. Neste artigo, abordaremos todos os aspectos principais: desde a API antiga (Date e Calendar) até o pacote moderno java.time (Java 8+). Você aprenderá a criar, formatar, comparar e calcular a diferença entre datas.



1. API antiga: Date e Calendar



Antes do Java 8, as principais classes para trabalhar com datas eram java.util.Date e java.util.Calendar. Elas ainda são encontradas em código legado, por isso é importante entender suas funcionalidades básicas e limitações.



1.1 Classe Date

Date representa um momento específico no tempo com precisão de milissegundos. No entanto, possui muitas desvantagens: é mutável (inseguro em aplicações multithread) e tem suporte limitado à internacionalização.



import java.util.Date;

public class DateExample { public static void main(String[] args) { // Data e hora atuais Date now = new Date(); System.out.println("Data atual: " + now);

// Forma obsoleta de obter o ano (1900 + ...) int year = now.getYear() + 1900; System.out.println("Ano: " + year); }}


1.2 Classe Calendar

Calendar é uma classe mais flexível, porém complexa. Permite manipular componentes individuais da data (ano, mês, dia).



import java.util.Calendar;

public class CalendarExample { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); System.out.println("Hora atual: " + cal.getTime());

// Definir uma data específica cal.set(2025, Calendar.MARCH, 15); System.out.println("Data definida: " + cal.getTime());

// Adicionar 7 dias cal.add(Calendar.DAY_OF_MONTH, 7); System.out.println("Daqui a uma semana: " + cal.getTime()); }}


Desvantagens: numeração dos meses começando em 0 (janeiro = 0), mutabilidade, falta de formatação simples.



2. Nova API: java.time (Java 8+)



A partir do Java 8, o pacote java.time foi adicionado à biblioteca padrão, baseado nas ideias da biblioteca Joda-Time. Ele consiste em classes imutáveis, tornando o código seguro e previsível.



2.1 LocalDate — apenas data

LocalDate representa uma data sem hora (ano, mês, dia). Ideal para aniversários, calendários.



import java.time.LocalDate;import java.time.Month;

public class LocalDateExample { public static void main(String[] args) { // Data atual LocalDate today = LocalDate.now(); System.out.println("Hoje: " + today);

// Data específica LocalDate specificDate = LocalDate.of(2025, Month.DECEMBER, 31); System.out.println("Ano Novo: " + specificDate);

// Adicionar/subtrair dias LocalDate nextWeek = today.plusDays(7); System.out.println("Daqui a uma semana: " + nextWeek); }}


2.2 LocalTime — apenas hora

LocalTime armazena a hora (horas, minutos, segundos, nanossegundos) sem vínculo com a data.



import java.time.LocalTime;

public class LocalTimeExample { public static void main(String[] args) { LocalTime now = LocalTime.now(); System.out.println("Hora atual: " + now);

LocalTime meeting = LocalTime.of(14, 30); System.out.println("Reunião às: " + meeting);

// Comparação de horas if (now.isAfter(meeting)) { System.out.println("A reunião já passou"); } }}<

Blogs

Book Recommendations