Если используется Java 8 (или выше), не используйте Calendar
.Если вы используете Java 6 или 7, вы можете рассмотреть возможность использования ThreeTen Backport .В любом случае используйте API времени Java.
Использование времени Java
Так как ввод int year
и int month
, используйте YearMonth
.
Чтобы узнать номер последнего дня месяца, позвоните по номеру lengthOfMonth()
.
Чтобы узнать дату в конце месяца, позвоните по номеру atEndOfMonth()
.
Демо
int year = 2020;
int month = 2;
int lastDay = YearMonth.of(year, month).lengthOfMonth();
System.out.println(lastDay);
LocalDate date = YearMonth.of(year, month).atEndOfMonth();
System.out.println(date);
Выход
29
2020-02-29
Использование Joda-Time
Если у вас нет Java 8 и вы уже используете Joda-Time , сделайте это следующим образом:
Демо
int year = 2020;
int month = 2;
int lastDay = new LocalDate(year, month, 1).dayOfMonth().getMaximumValue();
System.out.println(lastDay);
LocalDate date = new LocalDate(year, month, 1).dayOfMonth().withMaximumValue();
System.out.println(date);
Вывод
29
2020-02-29
Использование календаря
Если вы настаиваете на использовании Calendar
, позвоните getActualMaximum(Calendar.DAY_OF_MONTH)
, а такжеупоминается в других ответах.
Поскольку входные данные int year
и int month
, не создавайте и не анализируйте строку, просто установите поля Calendar
напрямую.Обратите внимание, что «месяц» в Calendar
начинается с нуля.
Демонстрация
int year = 2020;
int month = 2;
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(year, month - 1, 1);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, lastDay);
Date date = calendar.getTime();
System.out.println(lastDay);
System.out.printf("%tF%n", date);
Выход
29
2020-02-29