java .time
Я рекомендую использовать java .time, современную Java дату и время, для вашей даты работы.
LocalDate today = LocalDate.now(ZoneId.systemDefault());
LocalDate firstDayOfTheWeek = today.with(DayOfWeek.MONDAY);
LocalDate lastDayOfTheWeek = today.with(DayOfWeek.SUNDAY);
System.out.println("The week is from " + firstDayOfTheWeek + " through " + lastDayOfTheWeek);
Когда я запустить код сегодня, вывод:
Неделя с 2020-04-27 по 2020-05-03
Что пошло не так в вашем коде?
Вы использовали класс Calendar
1990-х годов. Этот класс плохо спроектирован и, к счастью, давно устарел. Одна из многих запутанных черт заключается в том, что он не устанавливает поля сразу, когда вы устанавливаете поле. Как сказано в документации:
Любые значения полей, установленные в Calendar
, не будут интерпретироваться до тех пор, пока не потребуется рассчитать его значение времени (миллисекунды из эпохи) или значения полей календаря. Вызов get
, getTimeInMillis
, getTime
, add
и roll
включает такие вычисления.
Так что, если вы установите одно или несколько полей и посмотрите на Calendar
в Отладчик или распечатайте его, используя toString()
, вы увидите промежуточное состояние, в котором он еще не определил значения своего поля, поэтому значения, которые вы видите, могут быть непоследовательными и не такими, как ожидалось.
Ссылка
Oracle учебник: Дата и время объяснение, как использовать java .time.