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

标签 java date arabic

我有这个代码

frame.sigdate.setText(new SimpleDateFormat("yyyy/M/d").format(new Date()));

它从我的电脑上用英文数字读取日期。我想要做的是将日期转换为阿拉伯数字。 有没有类似 Local.ar 的东西? 感谢您的帮助。

最佳答案

java.time

    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));

输出:

١٥‏/٤‏/٢٠١٨

关键是withDecimalStyle。如果没有此调用,格式化程序仍将使用西方数字,如 15/4/2018 中所示。您可能希望使用更具体的语言标记,而不仅仅是针对阿拉伯语的 ar,例如针对巴林的 ar-BH 或针对也门的 ar-YE .有关可能性,请参阅底部的链接。您还应该在我放置 Asia/Muscat 的位置插入您想要的时区。

编辑: 以上内容已经在 J​​ava 9 中进行了测试。令人惊讶的是,在 Java 8 中它仍然使用西方(非本地化)数字。一个可能的解决方法(如果您愿意,也可以是解决方法)是明确指定零数字——它将从中获取其他数字。

    DecimalStyle arabicDecimalStyle
            = DecimalStyle.of(arabicLocale).withZeroDigit('٠');
    DateTimeFormatter arabicDateFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
                    .withLocale(arabicLocale)
                    .withDecimalStyle(arabicDecimalStyle);

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

١٥/٠٤/١٨

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

    DateTimeFormatter arabicDateFormatter
            = DateTimeFormatter.ofPattern("uuuu/MM/dd", arabicLocale)
                    .withDecimalStyle(arabicDecimalStyle);

输出:

٢٠١٨/٠٤/١٥

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

    System.setProperty("java.locale.providers", "CLDR,JRE,SPI");

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

١٥‏/٤‏/٢٠١٨

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

我正在使用并推荐 java.time,现代 Java 日期和时间 API。您在问题中使用的 SimpleDateFormat 类不仅早已过时,而且出了名的麻烦。恕我直言,你应该完全避免它。现代 API 更易于使用。

链接

关于java - 如何将日期从英语转换为阿拉伯语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49839150/

相关文章:

ruby - 有没有一种 ruby​​ 方法可以使日期和时间更具可读性?

wordpress - 在 Windows 中复制阿拉伯语文本

php - 通过表单向mysql提交阿拉伯语数据

java - 如何在子类型上使用为通用父类(super class)型声明的 Guava 函数?

java - BigDecimal ("0") 和 BigDecimal.ZERO 之间有区别吗?

java - 如何获取div标签的值

javascript - 如何计算点后面两位小数的小时差

mysql - SQL查询查找3个月的数据

Android将阿拉伯数字转换为英文数字

java - Spring-data-elasticsearch 元数据_score