Работа с датами, вывод всех выходных дней за определенный месяц и год

Не понимаю как получить из определенного месяца в опр. году список всех суббот и воскресений Вот пример моего кода, но он в консоль выводит не правильный день недели

      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
→ Ссылка