Я пытаюсь преобразовать дату ISO (григорианский) в дату хиджри (исламский) и сравнить первое с датой хиджри.Почему для сравнения hijri с датами iso вам нужно обернуть DateTime в LocalDateTime? (Joda)
Что я делаю, и он не работает пока:
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");
}
Независимо от того, что дата хиджры он всегда возвращает «Дата hijriDt раньше даты toHijri».
Теперь, когда я экспериментировал, я попытался это:
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");
}
, который работает как шарм. Обратите внимание, как построена дата toHijri: LocalDateTime toHijri = new LocalDateTime (новый DateTime («2015-03-12T10: 04: 43», iso), hijri);
Экземпляр DateTime завернут внутри LocalDateTime.
Почему это происходит? Почему первый блок не работает?
Спасибо за быстрый ответ. Вы знаете, почему работает второй блок? Является ли «LocalDateTime toHijri» обработанным как iso, хотя он был преобразован в хиджри? – ampofila
@ampofila: Я подозреваю, что это не * действительно * работает - это просто дает вам сравнительный ответ, который вы ожидали. У меня нет времени, чтобы проверить, почему на данный момент, но это определенно не дата Hijri ... –
Нашел. То, как сравниваются экземпляры LocalDateTime, отличается от экземпляров DateTime. Первое просто сравнивает каждое поле по порядку, от самого большого до самого маленького (из документов), а второе сравнивает миллисекунды. – ampofila