Работа с датами, вывод всех выходных дней за определенный месяц и год
Не понимаю как получить из определенного месяца в опр. году список всех суббот и воскресений Вот пример моего кода, но он в консоль выводит не правильный день недели
public class TestApplication {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2022, 1, 1);
int day = date.lengthOfMonth();
Calendar calendar = GregorianCalendar.getInstance();
int startDay = 1;
int count = 0;
for (int i = 0; i < day; i++) {
LocalDate newdate = LocalDate.of(2022, 1, startDay);
calendar.set(newdate.getYear(), newdate.getMonthValue(), startDay);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
count++;
System.out.println(newdate);
}
startDay++;
}
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Одновременное применение Java 8 Date/Time API LocalDate и давно устаревшего GregorianCalendar выглядит достаточно противоестественным, достаточно упомянуть, что в Calendar/GregorianCalendar месяцы начинаются c 0, а дни недели идут от 1 (воскресенье) до 7 (суббота). поэтому при установке месяца следует хотя бы вычесть 1 для коррекции.
Впрочем, имеет смысл полностью выбросить GregorianCalendar, а в качестве переменных цикла использовать экземпляр LocalDate:
int count = 0;
boolean found = false;
for (LocalDate d = date; d.getMonth() == date.getMonth(); d = d.plusDays(found ? 7 : 1)) {
if (DayOfWeek.SUNDAY == d.getDayOfWeek()) {
count++;
found = true;
System.out.println(d);
}
}
System.out.println("Sundays: " + count);
Вывод:
2022-01-02
2022-01-09
2022-01-16
2022-01-23
2022-01-30
Sundays: 5