Синтаксический анализ шаблона времени недели в году в Java Time с DateTimeFormatter

Мне нужно вывести текущую дату в форматеweek-based-year-week-of-week-based-yearто есть используяДата недели ISO где неделя всегда начинается в понедельник, а первая неделя года - первая, в которой не менее четырех дней в январе (таким образом, неделя с первым четвергом в январе).

Поскольку 31 декабря 2015 года был четверг, с пятницы по воскресенье, то есть с 1 по 3 января 2016 года, все они относятся к 53-й неделе 2015 года («длинный год»), а первая неделя 2016 года начинается в понедельник, 4 января.

ОтDateTimeFormatter specЯ бы ожидал, что я могу просто использовать шаблонYYYY-ww сделать это (Y являетсяweek-based-year а такжеw являетсяweek-of-week-based-year).

Тем не менее, когда я пытаюсь что-то вроде следующего упрощенного теста:

String dateString = "2016-01-03";
LocalDate date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String expectedOutput = "2015-53";
String actualOutput = date.format(DateTimeFormatter.ofPattern("YYYY-ww"));
System.out.println("Parsing " + dateString + ", expected "
        + expectedOutput + " but got " + actualOutput);
System.out.println(dateString + " as ISO week date: "
        + date.format(DateTimeFormatter.ISO_WEEK_DATE));

Я получаю это:

Parsing 2016-01-03, expected 2015-53 but got 2016-02

2016-01-03 as ISO week date: 2015-W53-7

Так что с помощью встроенногоISO_WEEK_DATE форматтер делает то, что я ожидал, но с использованием шаблонаYYYY-ww кажется, дает мнекалендарь год и неделю.

Неужели я что-то неправильно понял о датах недели ISO, или в моем коде есть ошибка, или ... осмелюсь это сказать ... это ошибка вjava.time библиотека (как было в случае сэтот вопрос)?

Я знаю, что могу обойти это, используя пользовательский форматер, как показано ниже, но в моем случае мне действительно нужно это для работы с использованием шаблона.

new DateTimeFormatterBuilder()
    .parseCaseInsensitive()
    .appendValue(IsoFields.WEEK_BASED_YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
    .appendLiteral("-")
    .appendValue(IsoFields.WEEK_OF_WEEK_BASED_YEAR, 2)
    .toFormatter();

Ответы на вопрос(1)

Ваш ответ на вопрос