java. Время форматирования даты в зависимости от локали с 2 цифрами день / месяц и 4 цифры год - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно показать дату с 2-значным днем, 2-значным месяцем, 4-значным годом в соответствии с местным порядком. Поэтому для April 10th 2020 я хочу показать

  1. для локали США: MM/DD/YYYY -> 04/10/2020
  2. для локали Великобритании: DD/MM/YYYY -> 10/04/2020
  3. для локали DE (Германия): DD.MM.YYYY -> 10.04.2020

Я безуспешно попробовал следующее:

// this one already fails for DE, because it gives 10.04.20 (only 2 digit years)
myDate?.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT))

// works for DE (gives 10.04.2020), fails for UK as is gives 10 Apr 2020 instead of 10/04/2020
myDate?.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM))

Итак, как мне получить локально адаптированный формат даты только с 2 цифрами день / месяц и 4 цифры год? Обратите внимание, что я ищу общее решение, 3 языка, явно указанные здесь, являются лишь примерами.

Я на самом деле использую порт java.time для Android (ThreeTenABP), хотя это не должно быть актуальным.

1 Ответ

0 голосов
/ 11 апреля 2020

Боюсь, что потребуется ручная работа. Например, в Java, потому что это то, что я могу написать:

    Locale formattingLocale = Locale.getDefault(Locale.Category.FORMAT);
    String builtInPattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
            FormatStyle.SHORT, null, IsoChronology.INSTANCE,
            formattingLocale);
    String modifiedPattern = builtInPattern.replaceFirst("y+", "yyyy")
            .replaceFirst("M+", "MM")
            .replaceFirst("d+", "dd");
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(modifiedPattern, formattingLocale);

    LocalDate myDate = LocalDate.of(2020, Month.APRIL, 10);
    System.out.println(myDate.format(dateFormatter));

Пример выходных данных в разных локалях:

  • US: 04/10/2020
  • Великобритания: 10/04/2020
  • Германия: 10.04.2020
  • Шведский / sv: 2020-04-10
  • Гонконг / zh-HK: 2020 年 04 月 10 日 (я не знаю, правильно ли это)
...