Ajuda com Data!

Eu preciso receber uma data qualquer e armazená-la. Além disso, também preciso pegar um mês anterior a essa data. A entrada seria o ano, mês e dia. Tentei fazer ao menos a parte de pegar a data através desse código:

    		Calendar calendar = new GregorianCalendar(anoQualquer, mesQualquer, diaQualquer);
    		
    		int ano = calendar.get(Calendar.YEAR);
    		int mes = calendar.get(Calendar.MONTH); 
    		int dia = calendar.get(Calendar.DAY_OF_MONTH);
    		
    		System.out.println("ano: " + ano);
    		System.out.println("mês: " + mes);
    		System.out.println("dia: " + dia);

Digamos que o anoQualquer = 2016, o mesQualquer = 10 e o diaQualquer = 31. Como modifico esse código para obter essa data corretamente? Eu sei que não mostra bonitinho porque a contagem dos meses se inicia em 0, mas ainda assim, gostaria de saber se há algum jeito de fazer isso.

Precisa ser com Java antigo? Nao pode ser o Java 8?

Exemplo com Java 8:

import java.time.LocalDate;
import java.time.LocalDateTime;

public class App {

    public static void main(String[] args) {

         LocalDate ultimoDiaDoAno = LocalDate.of(2016, 12, 31);

         System.out.println("Dia anterior ao ultimo dia do ano: " + ultimoDiaDoAno.minusDays(1).toString());
         System.out.println("Dia posterior ao ultimo dia do ano: " + ultimoDiaDoAno.plusDays(1).toString());

         System.out.println("Mes anterior ao ultimo dia do ano: " + ultimoDiaDoAno.minusMonths(1).toString());
         System.out.println("Mes posterior ao ultimo dia do ano: " + ultimoDiaDoAno.plusMonths(1).toString());

    }
}

Saida:
Dia anterior ao ultimo dia do ano: 2016-12-30
Dia posterior ao ultimo dia do ano: 2017-01-01
Mes anterior ao ultimo dia do ano: 2016-11-30
Mes posterior ao ultimo dia do ano: 2017-02-28

1 curtida

Era exatamente disso que eu precisava! :blush: Muuuuito obrigada Igor! Resolveu meu problema. Não sabia desse LocalDate… :sweat:

Igor…só uma pergunta… E se eu quiser que uma variável receba o mês anterior ao mês que passei por parâmetro?

LocalDate ultimoDiaDoAno = LocalDate.of(2016, 1, 31);`

No caso o mês anterior seria 12… Eu teria que pegar a data anterior através do minusMonths, converter para String e “cortar”?

é só guardar numa variável

LocalDate mesAnterior = ultimoDiaDoAno.minusMonths(1);

e depois pegar o mes, o dia, o ano… o que desejar

mesAnterior.getMonthValue()

1 curtida