import java.util.Date;
import java.time.ZoneId;
import java.time.LocalDate;
import java.time.Month;
public class CompararMeses {
public static void main(String[] args) {
Date dataHoraInicio = new Date(); // Exemplo: agora
Date dataHoraFim = new Date(); // Exemplo: agora também, modifique para testar
// Convertemos para LocalDate
LocalDate inicio = dataHoraInicio.toInstant(). atZone(ZoneId.systemDefault()) .toLocalDate();
LocalDate fim = dataHoraFim.toInstant(). atZone(ZoneId.systemDefault()) .toLocalDate();
boolean mesesDiferentes = inicio.getMonthValue() != fim.getMonthValue() || inicio.getYear() != fim.getYear();
if (mesesDiferentes) {
System.out.println("Os meses são diferentes.");
} else {
System.out.println("Os meses são iguais.");
}
}
}
Alternativa com
import java.time.Month;
public class CompararMeses {
public static void main(String[] args) {
Date dataHoraInicio = new Date(); // Exemplo: agora
Date dataHoraFim = new Date(); // Exemplo: agora também, modifique para testar
// Convertemos para LocalDate
LocalDate inicio = dataHoraInicio.toInstant().
LocalDate fim = dataHoraFim.toInstant().
boolean mesesDiferentes = inicio.getMonthValue() != fim.getMonthValue() || inicio.getYear() != fim.getYear();
if (mesesDiferentes) {
System.out.println("Os meses são diferentes.");
} else {
System.out.println("Os meses são iguais.");
}
}
}
Explicação:
.toInstant().atZone(...).
converte otoLocalDate() Date
paraLocalDate
, preservando o fuso horário..getMonthValue()
pega o valor numérico do mês (1 a 12).É importante também verificar o ano, porque janeiro de 2024 e janeiro de 2025 têm o mesmo mês, mas são diferentes no tempo.
Alternativa com YearMonth
:
Se quiser deixar ainda mais claro que está comparando "mês + ano":
import java.time.YearMonth;
YearMonth ymInicio = YearMonth.from(dataHoraInicio. toInstant().atZone(ZoneId. systemDefault()));
YearMonth ymFim = YearMonth.from(dataHoraFim. toInstant().atZone(ZoneId. systemDefault()));
boolean mesesDiferentes = !ymInicio.equals(ymFim);
Essa abordagem é mais semântica e segura, pois o
YearMonth ymInicio = YearMonth.from(dataHoraInicio.
YearMonth ymFim = YearMonth.from(dataHoraFim.
boolean mesesDiferentes = !ymInicio.equals(ymFim);
Essa abordagem é mais semântica e segura, pois o
YearMonth
encapsula exatamente o que você precisa.
Nenhum comentário:
Postar um comentário