Предположим, что в настоящее время дата 28 мая. Если я вызову следующие команды, чтобы вывод стал
cal.add(Calendar.DATE, 1); // Day = 29
cal.add(Calendar.DATE, 1); // Day = 30
cal.add(Calendar.DATE, 1); // Day = 31
cal.add(Calendar.DATE, 1); // Day = 31
cal.add(Calendar.DATE, -1); // Day = 29
Почему это не переносится на следующий месяц? И почему он застрял на 31-м (, но когда вы минус один, он прыгает на 29 )?