使用 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
我最近升级到 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