DayOfWeek реализует TemporalAdjuster
Я думаю, что ваш код пытается установить объект Calendar
в понедельник той же недели ISO, то есть понедельник, предшествующий сегодня, если сегодня еще не понедельник (это будет не всегда будет результат во всех локалях, хотя). Это действительно просто, когда вы знаете, как.
LocalDate today = LocalDate.of(2020, Month.FEBRUARY, 2);
LocalDate monday = today.with(DayOfWeek.MONDAY);
System.out.println("Monday of the same week is " + monday + ", a " + monday.getDayOfWeek());
Вывод этого фрагмента:
Понедельник той же недели 2020-01-27, ПОНЕДЕЛЬНИК
LocalDate
всегда использует календарь ISO, в котором понедельник является первым днем недели, поэтому today.with(DayOfWeek.MONDAY)
дает вам понедельник той же недели, другими словами, предыдущий понедельник сегодня еще не понедельник. GregorianCalendar
использовал определение недели для локали по умолчанию, что немного усложнило код, чтобы убедиться, что он также будет работать правильно в локалях, где воскресенье - первый день недели. LocalDate
ведет себя одинаково во всех локалях, что является одной из причин, по которой код, использующий LocalDate
, проще.