Mik*_*ker 2 android calendar gregorian-calendar datepickerdialog
我正在创建一个DatePickerDialogFragment用户选择出生日期的地方.我想确保我能处理非格里高利的日期.我无法更改要在我的设备上使用的日历类型.Android是否为用户提供了切换日历类型的功能?如果是这样,步骤是什么?到目前为止,我在设置方面没有成功.
关于非格里历日历的选择器对话框的图形用户界面,您必须自己从头开始实现它.以下说明是关于其他日历的一般可用性.
那么,我们在这里看到(再次)Oracle和Android之间的区别.如果您查看较旧的Android代码的来源,那么您只会看到实例化的格里高利历:
991 public static synchronized Calendar getInstance() {
992 return new GregorianCalendar();
993 }
Run Code Online (Sandbox Code Playgroud)
这与Oracle-Java所做的相反,其中基于java.util.Calendar(可通过locale或unicode-ca-extension选择)描述两个替代日历:ThaiBuddhist(仅在1940年之后正确)和JapaneseImperial(自Meji时代以来).
然而,从API级别24(Android-N)开始,谷歌推出了新的日历,从ICU4J项目中取代.这些日历可以在android.icu.util包中找到:
实际上,主要有三个第三方图书馆承诺提供替代日历.
=> Threeten-ABP
这是围绕Java-8内置的新时间库的后端的薄包装,它引入了4个部分新的日历:伊斯兰 - 乌玛古拉(沙特阿拉伯),民国(台湾),泰国佛教(仅在1940年之后正确)和日本(从那以后)只有明治时代).
一般来说,Android已宣布推出java.time具有Android-O(API级别25)的Java-8类(包).如果Android开发者只接受这个级别,那么Threeten-ABP显然是不必要的.除此以外...
日语日历已在版本v1.0.5中修复.但伊斯兰历法仍然是一个负的惊喜,因为它不是Umalqura变,而是堪比微软科威特变种,只允许通过一个文件一个尴尬的配置(在Android访问???).所有日历的另一个大问题是缺乏任何本地化支持,例如:
HijrahDate hd = HijrahDate.now();
System.out.println(DateTimeFormatter.ofPattern("yyyy-MMMM-dd").format(hd)); // 1437-Juli-13
Run Code Online (Sandbox Code Playgroud)
第7个伊斯兰月被正确地称为"Rajab",而不是"7月"(我们现在在写这篇文章的时候是4月!).如前所述,伊斯兰日可能因伊斯兰日历的变体而异,因此计算通常是错误的,这使得该库的整个伊斯兰日历无法使用.
这是Joda-Time的包装.它正式提供8个可插拔日历.术语"可插入"意味着,您可以选择"年表"并LocalDate使用此年表配置类型对象.
如果您仔细研究提供的日历,那么您将看到真正的非等值日历(非格里高利)是:
为了完整性,还有一个桥版本(在格里高利和朱利安日历规则之间建模一个简单的切换).
但同样,本地化支持完全缺失,请参阅此旧问题.由于Joda-Time正式处于维护模式,我们无法合理地期待任何进一步的发展:
请注意,Joda-Time被认为是一个很大程度上"完成"的项目.没有计划重大改进.如果使用Java SE 8,请迁移到java.time(JSR-310).
=>我的图书馆Time4A
这是最大的图书馆(Proguard可以帮助缩小它).它提供以下日历:
所有日历都基于CLDR数据提供广泛的i18n支持.
| 归档时间: |
|
| 查看次数: |
2141 次 |
| 最近记录: |