DateTimeFormatter diff com base em semana e ano

Estou migrando meu aplicativo do Joda-Time para o Java 8java.time.

Uma das coisas que encontrei é a impressão de um ano baseado em uma semana usando um padrão noDateTimeFormatter.

NOTA: Vi esta pergunta:Padrão de semana com base em semana do Java Time, analisando com DateTimeFormatter

De acordo com a documentação

y       year-of-era                 year              2004; 04
Y       week-based-year             year              1996; 96

No entanto, quando eu tento esses dois, parece que oY está sempre retornando o mesmo quey.

Meu código de teste:

DateTimeFormatter yearF = DateTimeFormatter.ofPattern("yyyy").withZone(ZoneOffset.UTC);
DateTimeFormatter weekYearF = DateTimeFormatter.ofPattern("YYYY").withZone(ZoneOffset.UTC);

DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
    .appendValue(ChronoField.YEAR_OF_ERA)   .appendLiteral(" ") .append(yearF)
    .appendLiteral(" -- ")
    .appendValue(IsoFields.WEEK_BASED_YEAR) .appendLiteral(" ") .append(weekYearF)
    .toFormatter()
    .withZone(ZoneOffset.UTC);

System.out.println(dateTimeFormatter.toString());

ZonedDateTime dateTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(946778645000L), ZoneOffset.UTC);
for (int i = 2000 ; i < 2020; i ++ ) {
    System.out.println(dateTime.withYear(i).format(dateTimeFormatter));
}

A saída:

Value(YearOfEra)' '(Value(YearOfEra,4,19,EXCEEDS_PAD))' -- 'Value(WeekBasedYear)' '(Localized(WeekBasedYear,4,19,EXCEEDS_PAD))
2000 2000 -- 1999 2000
2001 2001 -- 2001 2001
2002 2002 -- 2002 2002
2003 2003 -- 2003 2003
2004 2004 -- 2004 2004
2005 2005 -- 2004 2005
2006 2006 -- 2006 2006
2007 2007 -- 2007 2007
2008 2008 -- 2008 2008
2009 2009 -- 2009 2009
2010 2010 -- 2009 2010
2011 2011 -- 2010 2011
2012 2012 -- 2012 2012
2013 2013 -- 2013 2013
2014 2014 -- 2014 2014
2015 2015 -- 2015 2015
2016 2016 -- 2015 2016
2017 2017 -- 2017 2017
2018 2018 -- 2018 2018
2019 2019 -- 2019 2019

Observando os anos em que isso é importante (como 2000, 2005, 2009 e 2016), a produção de.appendValue(IsoFields.WEEK_BASED_YEAR) e.ofPattern("YYYY") são diferentes.

NoPadrão de semana com base em semana do Java Time, analisando com DateTimeFormatter afirma-se que isso tem a ver com a localização (como pode ser visto claramente como uma diferença natoString() doDateTimeFormatter)

Agora, existem poucas coisas que eu não entendo / preciso:

Portanto, o "ano com base na semana" varia de acordo com a localidade, tudo bem. No entanto, o que eu não entendo é que, aparentemente, em algumas localidades, o ano base da semana é sempre idêntico ao ano 'normal'. Por que é que?

Por que a análise doYYYY foi mapeado para a definição ISO-8601 em vez do formulário localizado (terrivelmente confuso!)

Onde posso encontrar a documentação adequada disso? A aparente documentação "oficial" da Oracle é vaga, para dizer o mínimo.Responda: Encontrei documentação muito mais extensa com oDateTimeFormatterBuilder.

questionAnswers(1)

yourAnswerToTheQuestion