класс.

евожу свое приложение из Joda-Time на Java 8java.time.

Одна из вещей, с которыми я столкнулся, - это печать недельного года с использованием шаблона вDateTimeFormatter.

ПРИМЕЧАНИЕ: я видел этот вопрос:Синтаксический анализ шаблона времени недели в году в Java Time с DateTimeFormatter

Согласно документации

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

Тем не менее, когда я пытаюсь эти два, кажется,Y всегда возвращает так же, какy.

Мой тестовый код:

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));
}

Выход:

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

Глядя на годы, когда это имеет значение (например, 2000, 2005, 2009 и 2016), результат.appendValue(IsoFields.WEEK_BASED_YEAR) а также.ofPattern("YYYY") разные.

ВСинтаксический анализ шаблона времени недели в году в Java Time с DateTimeFormatter указано, что это связано с локализацией (что можно ясно увидеть как разницу вtoString() изDateTimeFormatter).

Теперь есть несколько вещей, которые я не понимаю / нуждаюсь:

Так что «недельный год» зависит от локали, хорошо. Тем не менее, я не понимаю, что, по-видимому, в некоторых регионах базовый год недели всегда идентичен «нормальному» году. Почему это?

Почему не разборYYYY был сопоставлен с определением ISO-8601 вместо (ужасно запутанной!) локализованной формы.

Где я могу найти соответствующую документацию этого? Кажущаяся «официальная» документация от Oracle неопределенна, если не сказать больше.Ответ: Я нашел гораздо более обширную документацию сDateTimeFormatterBuilder.

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

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