安卓版埃塞俄比亚日历三十-额外

2022-09-01 23:45:02

我正在为一家埃塞俄比亚公司开发一个Android应用程序,必须处理日期。

埃塞俄比亚使用的日历与公历相似,但有两个主要区别:它大约在7年前设定,有13个月。在我发布这个问题时,公历的日期是13-09-2021,埃塞俄比亚的日期是03-01-2014。

我的问题是:

  • Android是否支持埃塞俄比亚日历,埃塞俄比亚人是否习惯于让他们的设备使用它?

  • 如果是这样,我是否必须获取默认格式化程序(使用默认日历:)才能正确格式化日期?Calendar.getInstance()

  • 相反,如果设备使用公历,Java如何支持翻译成埃塞俄比亚日期?

为了模拟整个场景,您将设备设置为正确的当前埃塞俄比亚日期(好像来自网络提供商)和区域设置,您有什么建议?


答案 1

虽然我对这些日历系统一无所知,但也许......

三十-额外

ThreeTen-Extra 库添加到您的项目中,以访问插入到与 Android 捆绑在一起的 java.time 框架中的 EthiopicChronology 类。

这个年表定义了埃塞俄比亚历法系统的规则。这种日历系统主要在埃塞俄比亚使用。日期对齐,使 0001-01-01(埃塞俄比亚语)为 0284-08-29 (ISO)。

你也可以在那里找到一个科普特年表课程。


答案 2

关于历法背景:

埃塞俄比亚日历是一种地方日历,在埃塞俄比亚本身也有一定的知名度。是的,这个国家甚至有一种特殊的计时模式,从早上6点开始。但是,我不确定日历是否也在手机上广泛传播,因为在Android,IOS或Windows等常见操作系统中缺乏足够的支持。在埃塞俄比亚以外,它可能只与散居海外的有宗教信仰的埃塞俄比亚人有关。

安卓系统支持:

您可以找到 IBM 提供的 EthiopicCalendar 类提供的一些支持。我强烈认为阿姆哈拉语数字是受支持的(但我并不完全确定)。我对支持早上6点作为一天的开始并计数为零(如果您要求当前日期相关)不太有信心。IBM表示(与标准用法相似但不完全相同):Calendar.getInstance()

EthiopicCalendar通常应该使用Calendar.getInstance(ULocale)实例化,该ULocale传递带有标签“@calendar=ethiopic”的ULocale。

IBM 的 API 通过自 1970-01-01T00:00Z 以来的计数毫秒数提供公历的转换,反之亦然。要格式化或解析,请使用 IBM 的专用格式化程序引擎。注意,它不是Android的标准格式化引擎。当然,您仍然需要担心奇怪的功能,例如将第一个月计为数字零(而不是一)。

备选库时间4A:

我的库Time4A也是为Android编写的,是主lib Time4J的姊妹项目。两个库都包含埃塞俄比亚日历埃塞俄比亚时间类。您将在javadoc中找到一些代码示例。对非十进制阿姆哈拉语数字的支持也存在。这些类也需要一个特殊的格式化引擎,称为ChronoFormatter。与IBM一样,埃塞俄比亚月份名称(甚至在阿姆哈拉语或其他语言中)也得到了很好的支持。Meskerem

可以通过表达式获得到公历的转换(反之亦然),其中参数表示目标日历(此处为公历类型)。ethiopianDate.transform(PlainDate.axis())PlainDate