Manipulação de Datas em Java com a Classe LocalDate
Introduzida no Java 8, a API java.time
foi criada para substituir as antigas e complexas classes java.util.Date
e Calendar
. Dentro desta API moderna, a classe LocalDate
é a escolha ideal para representar uma data (ano, mês e dia), sem informações de hora ou fuso horário.
Ela oferece uma interface clara e poderosa para criar datas, acessar seus componentes e realizar operações como adicionar ou subtrair dias, meses e anos.
Criação de Datas
Existem duas formas principais de criar um objeto LocalDate
.
Obter a data atual: O método estático
now()
retorna um objetoLocalDate
com a data atual do relógio do sistema.LocalDate dataAtual = LocalDate.now(); System.out.println(dataAtual); // Exibe a data atual no formato AAAA-MM-DD
Criar uma data específica: O método estático
of()
permite criar uma data fornecendo o ano, mês e dia.LocalDate dataEspecifica = LocalDate.of(2025, 9, 17); System.out.println(dataEspecifica); // Exibe 2025-09-17
Acesso a Informações da Data
Após criar um objeto LocalDate
, é possível extrair suas partes individuais com diversos métodos get
.
getYear()
: Retorna o ano.getMonthValue()
: Retorna o mês como um número (1 para Janeiro, 12 para Dezembro).getDayOfMonth()
: Retorna o dia do mês (1-31).getDayOfWeek()
: Retorna o dia da semana (um objeto do tipoDayOfWeek
, comoWEDNESDAY
).getDayOfYear()
: Retorna o dia do ano (1-366).
import java.time.DayOfWeek;
import java.time.LocalDate;
public class Program {
public static void main(String[] args) {
LocalDate hoje = LocalDate.now();
int ano = hoje.getYear();
int mes = hoje.getMonthValue();
int dia = hoje.getDayOfMonth();
DayOfWeek diaDaSemana = hoje.getDayOfWeek();
System.out.println("Data completa: " + hoje);
System.out.println("Dia da semana: " + diaDaSemana);
System.out.printf("Data formatada: %02d/%02d/%d \n", dia, mes, ano);
}
}
Manipulação de Datas e Imutabilidade
A característica mais importante da classe LocalDate
é a imutabilidade. Isso significa que um objeto LocalDate
, uma vez criado, não pode ser alterado. Métodos como plusYears
ou minusDays
não modificam a data original; em vez disso, eles retornam um novo objeto LocalDate
com o resultado da operação.
Por isso, é essencial reatribuir o resultado da operação a uma variável.
plusDays(n)
,plusWeeks(n)
,plusMonths(n)
,plusYears(n)
: Adicionam um período.minusDays(n)
,minusWeeks(n)
,minusMonths(n)
,minusYears(n)
: Subtraem um período.
O exemplo abaixo demonstra como realizar várias operações em sequência.
import java.time.LocalDate;
public class Program {
public static void main(String[] args) {
LocalDate data = LocalDate.of(1914, 7, 28);
System.out.println("Data inicial: " + data); // 1914-07-28
// As operações retornam um novo objeto, que precisa ser reatribuído
data = data.plusYears(4);
data = data.plusMonths(3);
data = data.plusDays(14);
System.out.println("Após adição: " + data); // 1918-11-11
}
}
Como cada método retorna um novo objeto, as chamadas podem ser encadeadas para um código mais fluente e conciso:
import java.time.LocalDate;
public class Program {
public static void main(String[] args) {
LocalDate data = LocalDate.of(1914, 7, 28);
// Encadeando as chamadas de método
LocalDate dataModificada = data.plusYears(4)
.plusMonths(3)
.plusDays(14);
System.out.println("Data modificada: " + dataModificada); // 1918-11-11
}
}
Resumo
LocalDate
: Parte da moderna APIjava.time
, representa uma data (ano, mês, dia) sem hora ou fuso horário.- Criação: Use
LocalDate.now()
para a data atual ouLocalDate.of(ano, mes, dia)
para uma data específica. - Acesso: Métodos como
getYear()
egetDayOfWeek()
extraem componentes individuais de uma data. - Imutabilidade:
LocalDate
é imutável. Métodos de manipulação (plusDays
,minusMonths
) retornam um novo objeto, exigindo que o resultado seja atribuído a uma variável. - Encadeamento: As chamadas de manipulação podem ser encadeadas (
data.plusYears(1).plusMonths(2)
) para um código mais limpo.