java - 如何从回历日期转换为格鲁吉亚日期,反之亦然
问题描述
我正在寻找一种方法来计算例如从现在到特定日期的天数,并且我可以用它来确定我是否处于特定时间段(例如穆哈拉姆 +- 5 天)
我一直在寻找超过 10 个小时,我发现最好的东西是“HijrahDate”库“java.time.chrono.HijrahDate”和一个叫做“Joda Date”的东西,我很难使用。
解决方案
您想使用哪种回历变体?
如果您选择沙特阿拉伯的官方日历,那么基于java.time.HijrahDate的解决方案将起作用。但是这个类在 Android 上至少需要 API 级别 26。例子:
HijrahDate hd1 = HijrahDate.now();
HijrahDate hd2 = HijrahDate.from(LocalDate.of(2020, 5, 1));
long days = ChronoUnit.DAYS.between(hd1, hd2);
还有一些比较方法,例如isAfter()
或isBefore()
继承自接口ChronoLocalDate
和标准 plus() 方法,以确定您的日期是否在特定时间段内。
向后移植java.time
:
对于较低的 Android 版本,还有一个名为ThreetenABP的反向移植。但请注意其实施HijrahDate
方式不同且不使用沙特阿拉伯日历的陷阱(因此您必须容忍日期转换的差异)。
关于乔达时间:
如果您选择那个(相当过时的)库,那么您应该选择适用于 android的库版本。但是,它也不支持沙特阿拉伯的日历,但提供了四种不同的其他变体。您需要指定算法闰年模式。
ICU4J(嵌入安卓):
它的伊斯兰日历类提供类似于旧日历类的样式java.util.Calendar
以及包括沙特阿拉伯在内的多种变体。最低要求的 API 级别为 24。
时间4A:
那是我自己编写的一个库(作为Time4J for Android 的改编)。它为HijriCalendar类提供了多种变体,包括 Joda 变体,但也包括沙特阿拉伯的日历(变体 ummalqura)。它提供了所有需要的功能,如日期算术(通过 plus()- 或 minus()- 方法)、日期比较(通过 isAfter() 等)。例子:
String variant = HijriCalendar.VARIANT_UMALQURA;
StartOfDay startOfDay = StartOfDay.definedBy(SolarTime.ofMecca().sunset());
HijriCalendar today = HijriCalendar.nowInSystemTime(variant, startOfDay);
HijriCalendar hcal = // gregorian to Hijri conversion
PlainDate.of(2020, 5, 1).transform(HijriCalendar.class, variant);
long days = CalendarDays.between(today, hcal).getAmount();
其他库不支持日落作为一天的开始等功能。您的 Muharram +- 5days-request 示例可能如下所示:
CalendarDays tolerance = CalendarDays.of(5);
HijriCalendar htemp = today.with(HijriCalendar.MONTH_OF_YEAR, HijriMonth.MUHARRAM);
HijriCalendar h1 = htemp.with(HijriCalendar.DAY_OF_MONTH.minimized()).minus(tolerance);
HijriCalendar h2 = htemp.with(HijriCalendar.DAY_OF_MONTH.maximized()).plus(tolerance);
boolean inTimePeriod = !(today.isBefore(h1) || today.isAfter(h2));
推荐阅读
- javascript - Uncaught SyntaxError: Unexpected token { 导入数组时
- mamp-pro - Windows 10 上的 MAMP PRO 4 无法启动
- python - python,从目录中读取文件名,使用bash脚本中的字符串
- ios - Swift4:“MessageKind”没有成员“url”
- json - 使用 jq 将布尔值添加到 csv 数组
- python - 使用 json_to_record() 向表 PostgresSQL 添加新行
- pdf - 坏:将pdf转换为图像
- python - 返回列表中相似值的 len
- ruby-on-rails - Ruby on rails CSRF 保护表单
- php - 将 div 均匀地放置在五个垂直列中