如何将日期从英语转换为阿拉伯语

San*_*a'a 3 java date arabic

我有这个代码

frame.sigdate.setText(new SimpleDateFormat("yyyy/M/d").format(new Date()));
Run Code Online (Sandbox Code Playgroud)

它从我的电脑上用英文数字读取日期。我想要做的是将日期转换为阿拉伯数字。有什么类似的Local.ar吗?我很感激任何帮助。

Ole*_*.V. 6

时间

    Locale arabicLocale = Locale.forLanguageTag("ar");
    DateTimeFormatter arabicDateFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
                    .withLocale(arabicLocale)
                    .withDecimalStyle(DecimalStyle.of(arabicLocale));
    LocalDate today = LocalDate.now(ZoneId.of("Asia/Muscat"));
    System.out.println(today.format(arabicDateFormatter));
Run Code Online (Sandbox Code Playgroud)

输出:

???/??/????

关键是withDecimalStyle。如果没有这个调用,格式化程序仍将使用西方数字,如15?/4?/2018. 您可能想要使用比ar阿拉伯语更具体的语言标签,例如ar-BH巴林或ar-YE也门。有关可能性,请参阅底部的链接。你还应该在我放置亚洲/马斯喀特的地方插入你想要的时区。

编辑:上面已经在 J​​ava 9 中测试过。令人惊讶的是,在 Java 8 中它仍然使用西方(未本地化)数字。一个可能的解决方法(或您喜欢的解决方法)是明确指定零位 - 它会从中获取其他数字。

    DecimalStyle arabicDecimalStyle
            = DecimalStyle.of(arabicLocale).withZeroDigit('?');
    DateTimeFormatter arabicDateFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
                    .withLocale(arabicLocale)
                    .withDecimalStyle(arabicDecimalStyle);
Run Code Online (Sandbox Code Playgroud)

它是 的参数中两个撇号之间的阿拉伯语零withZeroDigit。现在我在 Java 8 上得到这个输出:

??/??/??

像我ofLocalizedDate在上面的两个片段中所做的那样,使用内置的特定于语言环境的格式通常是一个好主意。如果您需要更好地控制格式,请ofPattern改用。例如,要获得 yyyy/mm/dd 格式:

    DateTimeFormatter arabicDateFormatter
            = DateTimeFormatter.ofPattern("uuuu/MM/dd", arabicLocale)
                    .withDecimalStyle(arabicDecimalStyle);
Run Code Online (Sandbox Code Playgroud)

输出:

????/??/??

格式从 Java 8 更改为 Java 9 的原因是 Java 更改了区域设置数据来源的默认值,包括内置的本地化日期和时间格式。您可以通过设置系统属性来获取 Java 8 中已有的 Java 9 格式,例如:

    System.setProperty("java.locale.providers", "CLDR,JRE,SPI");
Run Code Online (Sandbox Code Playgroud)

通过此更改,上面的第一个代码片段在 Java 8 上提供与在 Java 9 上相同的输出:

???/??/????

这里的重要细节是CLDR属性字符串中的第一个。优点是您不需要指定自己的格式模式字符串,本地化到其他语言环境很简单,一旦您切换到 Java 9 或更高版本,用户就不会对行为的变化感到惊讶。

我正在使用和推荐java.time现代 Java 日期和时间 API。SimpleDateFormat你在问题中使用的类不仅已经过时了,而且也是出了名的麻烦。恕我直言,你应该完全避免它。现代 API 使用起来要好得多。

链接