Obter o último dia do mês ou do ano em Java

Veja neste post como obter o último dia do Mês em java e de bonús como obter a última data do ano

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Java - TUTORIAL

Última atualização em: | 16486 Visualizações

Apesar de ser relativamente simples, esta é uma dúvida frequênte. Para resolver, vou mostrar uma solução usando o Calendar para quem usa java 6 e usando o LocalDate ou LocalDateTime para quem estiver usando java 8 ou superior.

Última data do mês com Calendar

Para obter a última data do mês em java usando o Calendar, use:

Calendar instance = Calendar.getInstance();
instance.set(Calendar.MONTH, 8);
instance.set(Calendar.DAY_OF_MONTH, instance.getActualMaximum(Calendar.DAY_OF_MONTH));

System.out.println( new SimpleDateFormat("dd/MM/yyyy").format(instance.getTime()));

A saída será 30/09/2018, considenrando que o ano será sempre o ano corrente.

Note que criamos uma instância de Calendar, setamos o mês 9 na instância, usando o método getActualMaximum( [...] ) obtemos o último dia do mês para adicionar a instância e por fim, imprimimos o resultado.

Última data do ano com Calendar

Para a última data do ano basta adicionar o mês 12 ao setar o mês na instância do Calendar, veja:

instance.set(Calendar.MONTH, 11);

Com isso obteremos a última data do ano.

Veja o código completo:

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Main {

    public static void main(String[] args) {
        Calendar instance = Calendar.getInstance();
        instance.set(Calendar.MONTH, 8);
        instance.set(Calendar.DAY_OF_MONTH, instance.getActualMaximum(Calendar.DAY_OF_MONTH));

        System.out.println( "Última data do mês: "+ new SimpleDateFormat("dd/MM/yyyy").format(instance.getTime()));

        instance.set(Calendar.YEAR, 2018);
        instance.set(Calendar.MONTH, 11);
        instance.set(Calendar.DAY_OF_MONTH, instance.getActualMaximum(Calendar.DAY_OF_MONTH));

        System.out.println( "Última data do ano: "+ new SimpleDateFormat("dd/MM/yyyy").format(instance.getTime()));
    }
}

A saída será a seguinte:

Última data do mês: 30/09/2018
Última data do ano: 31/12/2018


Última data do mês com LocalDate ou LocalDateTime

Para obter a última data do mês em java 8 ou superior usando o LocalDate ou LocalDateTime, use:

LocalDate localDate = LocalDate.now().withMonth(9).with(TemporalAdjusters.lastDayOfMonth());
System.out.println( localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));

A saída será 30/09/2018, considenrando que o ano será sempre o ano corrente.

Note que a data corrente usando LocalDate.now(), setamos o mês 9 e usando o TemporalAdjusters.lastDayOfMonth() obtemos o último dia do mês para adicionar a instância e por fim, imprimimos o resultado usando DateTimeFormatter.

Última data do ano com LocalDate ou LocalDateTime

Para a última data do ano basta adicionar o mês 12 ao setar o mês na instância, veja:

LocalDate.now().withMonth(12);

Com isso obteremos a última data do ano.

Veja o código completo:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;

public class Main {

    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now().withMonth(9).with(TemporalAdjusters.lastDayOfMonth());
        System.out.println( "Última data do mês: "+ localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));

        localDate = LocalDate.now().withMonth(12).with(TemporalAdjusters.lastDayOfMonth());
        System.out.println( "Última data do ano: "+ localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
    }
}

A saída será a seguinte:

Última data do mês: 30/09/2018
Última data do ano: 31/12/2018

Note que para usar LocalDateTime basta alterar o LocalDate para LocalDateTime. Todo o código permanece o mesmo.

Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.


Apoiadores

Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!