我正在尝试将 ISO(公历)日期转换为回历(伊斯兰)日期,并将第一个日期与回历日期进行比较。
我所做的和它不起作用的是:
Chronology iso = ISOChronology.getInstanceUTC();
Chronology hijri = IslamicChronology.getInstanceUTC();
DateTime dtISO = new DateTime("2015-03-12T10:04:43", iso);
System.out.println("dtISO: " + dtISO);
DateTime toHijri = new DateTime(dtISO, hijri);
System.out.println("toHijri: " + toHijri); // 1436-05-21T10:04:43.000Z
DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd HH-mm");
DateTime hijriDt = new DateTime(formatter.parseDateTime("1442-05-21 10-10"), iso);
if (hijriDt.isAfter(toHijri)) {
System.out.println("hijriDt date is after toHijri date");
}
if (hijriDt.isBefore(toHijri)) {
System.out.println("hijriDt date is before toHijri date");
}
if (hijriDt.isEqual(toHijri)) {
System.out.println("hijriDt date is equal toHijri date");
}
无论回历日期是什么,它总是返回"回历日期在回历日期之前"。
现在,当我进行实验时,我尝试了以下方法:
Chronology iso = ISOChronology.getInstanceUTC();
Chronology hijri = IslamicChronology.getInstanceUTC();
LocalDateTime toHijri = new LocalDateTime(new DateTime("2015-03-12T10:04:43", iso), hijri);
System.out.println("toHijri: " + toHijri); // 1436-05-21T10:04:43.000Z
DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd HH-mm");
LocalDateTime hijriDt = new LocalDateTime(formatter.parseDateTime("1442-05-21 10-10"), iso);
if (hijriDt.isAfter(toHijri)) {
System.out.println("hijriDt date is after toHijri date");
}
if (hijriDt.isBefore(toHijri)) {
System.out.println("hijriDt date is before toHijri date");
}
if (hijriDt.isEqual(toHijri)) {
System.out.println("hijriDt date is equal toHijri date");
}
这就像一个魅力。请注意回历日期是如何构造的: LocalDateTime toHijri = new LocalDateTime(new DateTime("2015-03-12T10:04:43", iso), hijri);
日期时间实例包装在本地日期时间中。
为什么会这样?为什么第一个块不起作用?
这不是你想要的:
DateTime hijriDt = new DateTime(formatter.parseDateTime("1442-05-21 10-10"), iso);
这在任何地方都没有使用回历:
- 您的格式化程序正在使用 ISO(默认情况下)
- 您正在解析 1442 ISO 中的日期,这不是您想要的
- 然后,您将其"转换"为ISO日历(它已经是)
- 您的变量名称表明您希望它出现在回历中,但事实并非如此
我怀疑你想要:
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH-mm")
.withChronology(hijri);
DateTime hijriDt = formatter.parseDateTime("1442-05-21 10-10");