使用 ICU4j 格式化内容时如何不使用语言环境数字

How to not use locales digits when formatting something with ICU4j

我最近升级到 Java 8,运行 升级到 "issue",并设置了日期格式。 JDK 8 允许提供程序用于某些 g11n/i18n 函数,如果你在类路径上有 ICU,它应该选择它。这并不是一个真正的问题,而是一个意外的曲线,因为我的大部分功能都像以前一样工作。

我想显示今天的日期,但使用语言环境的日期格式、小数点分隔符等。这很好,但是当我使用具有不同数字集的某些语言环境时,例如 ar_OM,它使用 Hindu-Arabic Numeral System,我得到格式化的日期,但也使用这个数字系统中的数字。

代码:

    Locale arOmLocale = new Locale("ar", "OM");
    DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT, arOmLocale);
    System.out.println(df.format(new Date()));

我希望看到它打印出 2015/04/11,但它打印出 ١١ /٠٤ /٢٠١٥

有没有办法让它不更改数字 system/symbols,但仍然提供特定于区域设置的格式?

有一个特定于 ICU4j 的修复程序,即在语言环境中使用 @numbers=latn 作为 variant/script。

这里列出了一些细节:Formatting for a Locale