Android 中的埃塞俄比亚日历

Ethiopian calendar in Android

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

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

我的问题是:

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

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

三十加

添加插入 java.time 框架的 ThreeTen-Extra library to your project to access the EthiopicChronology class Android.

This chronology defines the rules of the Ethiopic calendar system. This calendar system is primarily used in Ethiopia. Dates are aligned such that 0001-01-01 (Ethiopic) is 0284-08-29 (ISO).

您也可以在那里找到 CopticChronology class。

关于日历背景:

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

支持Android:

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

EthiopicCalendar usually should be instantiated using Calendar.getInstance(ULocale) passing in a ULocale with the tag "@calendar=ethiopic".

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

备选库Time4A:

我的库 Time4A 也是为 Android 编写的,是主库 Time4J 的姊妹项目。两个库都包含 classes EthiopianCalendar and EthiopianTime. You will find some code examples in the javadoc. Support for non-decimal Amharic numbers exists, too. These classes require a special formatting engine, too, called ChronoFormatter。与 IBM 一样,埃塞俄比亚月份名称 Meskerem(即使是阿姆哈拉语或其他语言)也得到很好的支持。

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