我正在开发一个需要Hijri Date的应用程序,我使用了这里发布的内容将gregorian转换为Hijri Date。
它对我有用,但它给出了错误的日期,例如,当公历是2016年9月20日时,它在Hijri变成了1437年12月17日,这是错误的,它应该是1437年12月19日。
问题出在哪里?
关于您的转换示例,在我看来,您正在寻找回历的Umalqura变体,这是沙特阿拉伯的官方日历。
你发布的SO链接指的是Joda Time。该库不支持umalqura,但支持Hijri日历的四种算法变体(仅适用于近似值)。我已经测试了所有四种受支持的变体。没有一个是给你的。
Chronology iso = ISOChronology.getInstanceUTC();
Chronology hijri =
IslamicChronology.getInstance(DateTimeZone.UTC, IslamicChronology.LEAP_YEAR_INDIAN);
LocalDate todayIso = new LocalDate(2016, 9, 20, iso);
LocalDate todayHijri = new LocalDate(todayIso.toDateTimeAtStartOfDay(), hijri);
System.out.println("joda=" + todayHijri);
// LEAP_YEAR_15_BASED => 1437-12-16
// LEAP_YEAR_16_BASED => 1437-12-16
// LEAP_YEAR_HABASH_AL_HASIB => 1437-12-17
// LEAP_YEAR_INDIAN => 1437-12-17
如果您在Java-8平台上操作,那么您可以使用以下解决方案。但是,如果您在Android上并尝试使用backport ThreetenABP,那么这将失败,因为它的实现偏离Java-8:
HijrahDate hd = HijrahDate.from(LocalDate.of(2016, 9, 20));
System.out.println("java.time=" + hd); // Hijrah-umalqura AH 1437-12-19
如果您想要更多日历功能,比如其他版本或可变的一天开始时间(伊斯兰日从日落开始!)或者,如果你在Android系统上操作,那么你可以使用我的Time4J/A库。Time4J(或Android系统上的Time4A)的HijriCalendar可以提供你想要的:
System.out.println(
PlainDate.of(2016, 9, 20)
.transform(HijriCalendar.class, HijriCalendar.VARIANT_UMALQURA));
// AH-1437-12-19[islamic-umalqura]
请注意,最后一个示例是中午有效的转换。当使用晚上作为一天的开始时,请咨询javadoc如何做到这一点。
2016-09-07更新:
其他可能在Android上使用截然不同API的umalqura解决方案包括
周日->明谷-0 周一->赛宁-1 周二->Selasa-2 帮我谢谢
问题内容: 我正在使用需要json日期格式的API。 我需要转换我的JavaScript日期 1970年1月17日星期六格林尼治标准时间+0100(浪漫标准时间) 以json日期格式 /日期(1405699200)/ 问题答案: 列各项可以吗?
问题内容: 我有一个输出数据数组的PHP脚本。然后将其转换为使用函数。 我的问题是我的数组中有一个日期,但日期格式不正确。 我怎样才能在PHP中转换它呢? 代替上面的日期,我需要等效的JavaScript函数 新的Date() 当我输出上述内容时,我得到以下内容:“ Fri Jun 01 2012 11:08:48 GMT + 0100(GMT Daylight Time)”但是,如果我将PHP日
问题内容: 我的json 响应 包含一个 CreatedOn 日期: 我需要将 CreatedOn 转换为简单的日期格式,并 计算从CreatedOn日期到当前日期的差异天数。 当我调试下面的代码字符串 CreatedOn时 显示一个空值。怎么会? 问题答案: 要么 考虑使用JSON方法而不是包含。JSON具有“ has()”,用于验证密钥是否存在。 您还应该确保首先尝试{}捕获{}字符串,以确保
问题内容: 是否有一个内置的转换方法为在Python,例如获得在指定日期的午夜?相反的转换很容易:有一个方法。 我真的必须手动打电话吗? 问题答案: 您可以使用;现在,您创建一个初始化为午夜的对象。