Olá pessoal! Hoje vou dar uma dica rápida que ajuda quando precisamos realizar filtros por mês naquele estilo lançamentos do mês ou aniversariantes. Se você tiver alguma dúvida sobre converter strings para objeto java.util.Date sinta-se a vontade de consultar nosso post Manipulando Datas em Java.

Parando com a enrolação vamos ao código:

Calendar cal = GregorianCalendar.getInstance();
cal.setTime( new Date() );
         
int dia = cal.getActualMaximum( Calendar.DAY_OF_MONTH );
int mes = (cal.get(Calendar.MONDAY)+1);
int ano = cal.get(Calendar.YEAR);
         
System.out.println( dia+"/"+mes+"/"+ano );
         
try {
    Date data = (new SimpleDateFormat("dd/MM/yyyy")).parse( dia+"/"+mes+"/"+ano );
} catch (ParseException e) {
    e.printStackTrace();
}

Para pegarmos o último dia do mês será necessário utilizar a classe GregorianCalendar, como vemos na linha 1. Na linha 2 configuramos no objeto Calendar um objeto Date representado a data atual ou uma data qualquer de um determinado mês que desejamos saber qual é o último dia.

Na linha 4 é o que realmente queremos, o método getActualMaximum(int) retorna o maior valor possível para o campo passado por parâmetro levando em conta a data atualmente definida na classe Calendar, então se passarmos por parâmetro a constante Calendar.DAY_OF_MONTH será retornado o maior dia do mês levando em consideração quantos dias o mês tem, inclusive os anos bissextos para o mês de fevereiro. Também é possível passar várias outras constantes da class Calendar embora não tenha grande serventia.

Na linha 5 pegamos o número do mês chamando a o método get(int) passando a constante de mês e somamos +1 pois em java o mês é representado de 0 até 11, então se o método nos retornar 1 ele representa o mês de fevereiro.

Na linha 6 pegamos o ano, sem mais.

A partir dai podemos concatenar para o formato desejado de data e pronto.