Как локализовать числа с помощью DateTimeFormatter? - PullRequest
0 голосов
/ 18 июня 2020

Класс java.time.format.DateTimeFormatter неправильно работает для языков, в которых для представления чисел используются разные символы.

В таких языках, как персидский (также называемый фарси), для представления чисел используются разные символы и символы Unicode:
Персидские цифры: ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹
Западные цифры: 0 1 2 3 4 5 6 7 8 9

Например:

Locale myLocale = Locale.forLanguageTag("fa");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy", myLocale);
formatter.format(LocalDate.now()); // should return "۲۰۲۰" but returns "2020"

Я бы сказал что класс DateFormat, который используется для форматирования Java legacy Date s, работает должным образом.

1 Ответ

1 голос
/ 18 июня 2020

Это будет исправлено в JDK 15 (достаточно использовать formatter.localizedBy(myLocale)).

До тех пор форматируйте следующим образом:

formatter
    .localizedBy(myLcoale)
    .withDecimalStyle(DecimalStyle.of(myLocale))
    .format(...)
...