Проверьте ChronoField или IsoFields для подходящего способа получить неделю для календарной системы, которую вы хотите использовать.LocalDate
объект, который используется в качестве «базового» значения, должен иметь недельное значение ожидаемого года.
int year = 2019;
int weekNumber = 1;
LocalDate localDate = LocalDate.of(year, 2, 1)
.with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, weekNumber)
.with(ChronoField.DAY_OF_WEEK, DayOfWeek.SUNDAY.getValue());
Выбор первой даты имеет смысл.Использование LocalDate.of(year, 1, 1)
даст день, который может принадлежать последней неделе предыдущего года, то же самое относится и к LocalDate.now()
, но только для данного периода времени.
LocalDate.of(2017, 1, 1)
.with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, 26)
.with(ChronoField.DAY_OF_WEEK, DayOfWeek.SUNDAY.getValue());
// 2016-07-03
LocalDate.of(2017, 1, 1).get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);
// 52
Таким образом, переход с 52 недели на 26даст дату 2016-07-03, потому что дата рассчитывается путем вычитания времени между неделями 52 и 26.
Также см. ответ здесь для получения дополнительной информации о withYear
: Неожиданный результат вычисления даты