首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将日期从英文转换为阿拉伯文

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

Stack Overflow用户
提问于 2018-04-15 06:36:17
回答 4查看 3K关注 0票数 3

我有这个密码

代码语言:javascript
运行
复制
frame.sigdate.setText(new SimpleDateFormat("yyyy/M/d").format(new Date()));

它用英文号码从我的电脑上读取日期。我要做的是把日期转换成阿拉伯数字。有类似Local.ar的东西吗?我很感谢你的帮助。

EN

Stack Overflow用户

回答已采纳

发布于 2018-04-15 07:20:06

java.time

代码语言:javascript
运行
复制
    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。有关可能性,请参见底部的链接。你也应该插入你想要的时区,我把亚洲/马斯喀特。

编辑:上面的内容已经在Java9中进行了测试。令人惊讶的是,在Java8中,它仍然使用西方(未本地化)数字。一个可能的解决方法(如果您愿意的话)是显式地指定零位数-它将从零位数中提取其他数字。

代码语言:javascript
运行
复制
    DecimalStyle arabicDecimalStyle
            = DecimalStyle.of(arabicLocale).withZeroDigit('٠');
    DateTimeFormatter arabicDateFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
                    .withLocale(arabicLocale)
                    .withDecimalStyle(arabicDecimalStyle);

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

١٥/٠٤/١٨

使用内置的特定于地区的格式通常是个好主意,就像我在上面的两个片段中使用ofLocalizedDate一样。如果您需要对格式进行更精细的控制,请使用ofPattern。例如,要获得yyyy/mm/dd格式:

代码语言:javascript
运行
复制
    DateTimeFormatter arabicDateFormatter
            = DateTimeFormatter.ofPattern("uuuu/MM/dd", arabicLocale)
                    .withDecimalStyle(arabicDecimalStyle);

输出:

٢٠١٨/٠٤/١٥

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

代码语言:javascript
运行
复制
    System.setProperty("java.locale.providers", "CLDR,JRE,SPI");

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

١٥‏/٤‏/٢٠١٨

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

我正在使用和推荐java.time,这是一个现代的Java和time。您在这个问题中使用的SimpleDateFormat类不仅很久以前就过时了,而且也是出了名的麻烦。你应该完全避免。使用现代API要好得多。

链接

票数 7
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49839150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档