Вы можете использовать метод Calendar.getActualMaximum:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month-1);
int numDays = calendar.getActualMaximum(Calendar.DATE);
И month-1 равен Из-за того, что месяц принимает свое первоначальное число месяц, а в методе принимает аргумент, как показано ниже в Calendar.class
public int getActualMaximum(int field) {
throw new RuntimeException("Stub!");
}
А (поле int) выглядит так, как показано ниже.
public static final int JANUARY = 0;
public static final int NOVEMBER = 10;
public static final int DECEMBER = 11;