Сила 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.

3
задан Basil Bourque 26 нояб. '16 в 2:36
источник поделиться

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
3
ответ дан Meno Hochschild 29 нояб. '16 в 19:31
источник поделиться

Другие вопросы по меткам