android - 使用 SimpleDateFormat 和 UmmalquraCalendar 以阿拉伯语显示日期名称时获取空字符串
问题描述
SimpleDateFormat
我想使用和 UmmalquraCalendar
应用模式从日期中获取阿拉伯语中的日期名称。
Locale ar = new Locale("ar");
SimpleDateFormat dateFormat = new SimpleDateFormat("", ar );
Calendar hjCalender = new UmmalquraCalendar(ar);
dateFormat.setCalendar(hjCalender);
dateFormat.applyPattern("EEEE");
String day = dateFormat.format(hjCalender.getTime());
Log.v("MainActivity", "aa " + day);
它显示aa
所以得到空字符串
[更新]
dateFormat = new SimpleDateFormat( "MMMM", new Locale("ar")) ;
dateFormat.setCalendar(hjCalender);
Log.v("MainActivity" ," month ar " +
dateFormat.format(hjCalender.getTime()));
我得到了 V/MainActivity: month ar ٠٠١ (不显示月份的名称)。
解决方案
编辑:不建议对较旧的 Android(低于 API 级别 26)使用此答案。虽然我希望它始终为您提供正确的星期几,但它只会在 Java 8 及更高版本以及 Android API 级别 26 及更高版本上提供正确的 um Al-Qura 日历。
默认设置为您提供 umm Al-QuraHijrahDate
日历:java.time
Locale ar = new Locale("ar");
DateTimeFormatter dayOfWeekFormatter = DateTimeFormatter.ofPattern("EEEE", ar);
HijrahDate today = HijrahDate.now(ZoneId.of("Asia/Riyadh"));
System.out.println("Chronology: " + today.getChronology());
String day = today.format(dayOfWeekFormatter);
System.out.println("aa " + day + " length " + day.length());
今天运行这个片段(Hijrah-umalqura AH 1439-10-26)给出:
Chronology: Hijrah-umalqura
aa الثلاثاء length 8
我不知道为什么你的代码不起作用。正如我在评论中所说,我无法重现您的错误。但是,SimpleDateFormat
您使用的类已被证明很麻烦并且已经过时了。所以我们的想法是,如果您正在为 Android API 级别 26 或更高级别进行编程,您可以扔掉SimpleDateFormat
并使用内置java.time
的现代 Java 日期和时间 API 及其HijrahDate
.
我首先建议,对于低于 26 的 API 级别,您可以使用 ThreeTenABP,这是 ThreeTen Backport 的 Android 改编版本,java.time
Java 6 和 7 的向后移植。但是,在评论中 Meno Hochschild 告诉我们这并不可靠:
即使您偶然发现了三个 backport 似乎返回预期结果的示例,它也不会是 umalqura 日历。许多日期相差一天。不幸的是,backport 没有复制 Hijri 日历的最新状态,
java.time
但仍然使用旧的三个开发状态,其中选择了 Hijri 日历的算法版本。如果您查看这两个库的 javadoc,您也会发现很大的不同。在这里,反向端口根本不是反向端口。
(由于 Stack Overflow 上的评论有时会被删除,我在此完整引用此评论。)
Android 上的另一个选择是研究同一个 Meno Hochschild 的库 Time4A 是否会给你想要的东西。它在下面的第三个链接中。不幸的是,我自己没有这方面的经验。
链接
- Oracle 教程:日期时间解释如何使用
java.time
. - Java 规范请求 (JSR) 310,
java.time
第一次描述的地方。 - Time4A:适用于 Android 的高级日期和时间库
- ThreeTen Backport 项目,
java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。 - ThreeTenABP , ThreeTen Backport 的 Android 版
- 问题:如何在Android项目中使用ThreeTenABP,有非常详尽的解释。
推荐阅读
- android - Android Studio 冻结,工具栏分离
- git - 获取关联的 JIRA 状态关闭的分支名称
- c# - 我应该为批量异步 GET 请求使用多个 HttpClients 吗?
- android - 在智能手机上离线使用自定义谷歌操作
- ruby-on-rails - Postgres 连接失败,使用系统用户而不是 database.yml 中提供的用户
- assembly - mov r64, m64 是一个周期还是两个周期的延迟?
- docker - 如何使用 CondaDependencies 更改 Azure 机器学习 sdk ContainerImage 中的 Python 版本
- ruby - 当页眉在页面上不可见时,Ruby 单击表头
- javascript - 如何在Javascript中匹配相同的字符串?
- go - Golang 中的取消模式