Принудительная установка 4-значного года в локализованных строках, сгенерированных из `DateTimeFormatter.ofLocalized…` в java.time
DateTimeFormatter
класс в java.time предлагает три ofLocalized…
методы генерации строк для представления значений, которые включают год. Например, ofLocalizedDate
,
Locale l = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ).withLocale( l );
LocalDate today = LocalDate.now( ZoneId.of( "America/Chicago" ) );
String output = today.format( f );
Для регионов, которые я видел, год - это всего две цифры FormatStyle
стили.
Как сделать так, чтобы java.time локализовался, но заставлял годы быть четырьмя цифрами, а не двумя?
Я подозреваю, что Ответ лежит в DateTimeFormatterBuilder
учебный класс. Но я не могу найти какую-либо особенность, изменяющую длину года. Я также изучил исходный код Java 9, но не могу написать этот код достаточно хорошо, чтобы найти ответ.
Этот вопрос похож на:
… Но эти Вопросы предназначены для более старых структур даты и времени, которые теперь заменены классами java.time.
1 ответ
Там нет встроенного метода для того, что вы хотите. Однако вы можете применить следующий обходной путь:
Locale locale = Locale.ENGLISH;
String shortPattern =
DateTimeFormatterBuilder.getLocalizedDateTimePattern(
FormatStyle.SHORT,
null,
IsoChronology.INSTANCE,
locale
);
System.out.println(shortPattern); // M/d/yy
if (shortPattern.contains("yy") && !shortPattern.contains("yyy")) {
shortPattern = shortPattern.replace("yy", "yyyy");
}
System.out.println(shortPattern); // M/d/yyyy
DateTimeFormatter shortStyleFormatter = DateTimeFormatter.ofPattern(shortPattern, locale);
LocalDate today = LocalDate.now(ZoneId.of("America/Chicago"));
String output = today.format(shortStyleFormatter);
System.out.println(output); // 11/29/2016