Código acima:
public static void main(String[] args) throws Exception{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
Calendar calendar = Calendar.getInstance();
calendar.setTime(simpleDateFormat.parse("2021-08"));
calendar.roll(Calendar.MONTH, -5);
String date = simpleDateFormat.format(calendar.getTime());
System.out.println("-------------" + date + "-------------");
}
resultado da operação
-------------2021-03-------------
Percebe-se que a data obtida subtraindo 5 meses não tem problema, mas há problema ao subtrair mais de um ano e depois tentar subtrair 20 meses
public static void main(String[] args) throws Exception{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
Calendar calendar = Calendar.getInstance();
calendar.setTime(simpleDateFormat.parse("2021-08"));
calendar.roll(Calendar.MONTH, -20);
String date = simpleDateFormat.format(calendar.getTime());
System.out.println("-------------" + date + "-------------");
}
resultado da operação
-------------2021-12-------------
A data está errada, a data correta deveria ser: 2019-12
Solução: substitua o método roll por add, o método roll só pode ser calculado no ano atual e o método add pode ser calculado ao longo dos anos
public static void main(String[] args) throws Exception {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
Calendar calendar = Calendar.getInstance();
calendar.setTime(simpleDateFormat.parse("2021-08"));
calendar.add(Calendar.MONTH, -20);
String date = simpleDateFormat.format(calendar.getTime());
System.out.println("-------------" + date + "-------------");
}
resultado da operação
-------------2019-12-------------