Номер года конвертировать из григорианского в хиджра ява time4j
Я беру год от пользователя. Как преобразовать его в номер года хиджры? Лучше использовать не jodatime, а time4j или java 8.
Пример: мне нужно с 2016 года иметь номер года хиджры.
Я нашел этот пост, есть ли какая-либо библиотека или алгоритм для персидского (Shamsi или Jalali) календаря в Android?
System.out.println(jalali.transform(PlainDate.class)); // 2015-03-25
Но метод преобразования не работает.
Также я нашел этот пост, чтобы преобразовать хиджры в григорианский: получить григорианскую дату из строк даты хиджры
Но мне нужно от григорианского до хиджры.
1 ответ
Предложение "Но метод преобразования не работает". Вероятно, следует читать "не компилируется".
Причина в том, что HijriCalendar
представляет семейство разных вариантов (например, Umalqura). Технический фон: этот класс наследует от CalendarVariant
вместо Calendrical
, Поэтому компилятор заставляет вас использовать transform()
метод с двумя аргументами. Второй аргумент указывает вариант HijriCalendar
, Пример:
PlainDate today = SystemClock.inLocalView().today();
HijriCalendar umalqura =
today.transform(HijriCalendar.class, HijriCalendar.VARIANT_UMALQURA);
HijriCalendar westIslamicCivil =
today.transform(HijriCalendar.class, HijriAlgorithm.WEST_ISLAMIC_CIVIL);
System.out.println(umalqura); // AH-1437-07-23[islamic-umalqura]
System.out.println(westIslamicCivil); // AH-1437-07-22[islamic-civil]
Этот пример также демонстрирует, почему важно указать вариант. Вы видите разницу в один день (для одной и той же григорианской даты)! На самом деле Time4J поддерживает 11 вариантов. Umalquara-вариант является официальным календарем Саудовской Аравии, в то время как 8 алгоритмических вариантов следует скорее интерпретировать как приближения и иметь более широкий диапазон действия.
Когда у вас есть экземпляр HijriCalendar
Вы можете легко получить год хиджры:
int hijriYear = umalqura.getYear();
System.out.println("Year (hirji-umalqura): " + hijriYear); // 1437