我正在尝试使用DateTimeFormatter API在TextView中显示特定时间,但是每当我将设备设置为阿拉伯语或孟加拉语时运行我的应用程序时,由于某种原因,时间似乎总是显示西方数字。这是故意的,还是我需要解决此问题?
Kotlin

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val localizedTimeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)

        val timeOpen = LocalTime.of(9, 30)
        val timeClose = LocalTime.of(17, 15)

        tv_time.text = (timeOpen.format(localizedTimeFormatter) +
                "\n\n" + timeClose.format(localizedTimeFormatter))
    }
}
时钟应用程序(阿拉伯语)
java - DateTimeFormatter不在阿拉伯语或孟加拉语中使用 native 数字-LMLPHP
我的应用程序(阿拉伯语)
java - DateTimeFormatter不在阿拉伯语或孟加拉语中使用 native 数字-LMLPHP
时钟应用程序(孟加拉)
java - DateTimeFormatter不在阿拉伯语或孟加拉语中使用 native 数字-LMLPHP
我的应用程序(孟加拉)
java - DateTimeFormatter不在阿拉伯语或孟加拉语中使用 native 数字-LMLPHP

最佳答案

这是按设计的。除非另有明确指示,否则DateTimeFormatter的实例(即使是本地化的实例)也使用Western / ASCII数字。当您知道如何时,说明并不难:

    DateTimeFormatter localizedTimeFormatter = DateTimeFormatter
            .ofLocalizedTime(FormatStyle.SHORT)
            .withDecimalStyle(DecimalStyle.ofDefaultLocale());

    LocalTime timeOpen = LocalTime.of(9, 30);
    LocalTime timeClose = LocalTime.of(17, 15);

    String text = timeOpen.format(localizedTimeFormatter)
            + '\n' + timeClose.format(localizedTimeFormatter);
    System.out.println(text);
孟加拉语言环境(bn-BD)中的输出:

并以阿拉伯语(ar):

希望您可以自己从Java代码进行翻译。我相信这应该不难。

07-24 20:46