Ваша настоящая проблема не в том, чтобы подумать о том, какой вариант исламского календаря вам нужен.
Ожидание того, что во втором месяце хиджры 1440 года 30 дней, верно только для календаря Umalqura в Саудовской Аравии, но не для варианта, используемого Joda-Time. Эта библиотека поддерживает только четыре алгоритмических варианта, см. Определение IslamicChronology.LeapYearPatternType
-констант в API . Ваш код неявно использует LEAP_YEAR_16_BASED
-вариант. Вы можете попробовать другие три варианта, если они соответствуют вашим ожиданиям (не проверено мной), но в результате также может оказаться, что ни один из вариантов Joda-Time не будет соответствовать. Если это так, то вам не повезло с Joda-Time, и вам, вероятно, придется использовать другую библиотеку.
Поскольку вы пометили свой вопрос как "android-jodatime", я предполагаю и предполагаю, что вам нужна поддержка календаря umalqura на Android. Если это так, то вы можете рассмотреть сторонние библиотеки типа msarhan или Time4A (моя библиотека). Пример в Time4A:
static final ChronoFormatter<HijriCalendar> HIJRI_FORMAT =
ChronoFormatter
.ofPattern("yyyy-MM-dd", PatternType.CLDR, Locale.ROOT, HijriCalendar.family())
.withCalendarVariant(HijriCalendar.VARIANT_UMALQURA);
public String addDays(String date, int days) throws ParseException {
HijriCalendar hcal = HIJRI_FORMAT.parse(date).plus(CalendarDays.of(days));
return HIJRI_FORMAT.format(hcal);
}
Если вы используете только API-уровень Android 26 или выше, вы также можете попробовать новый java.time.chrono.HijrahDate
-класс, который также поддерживает umalqura-calendar, но я предполагаю, что этот API-уровень все еще исключает слишком много пользователей Android , А бэкпорт threeten (например, библиотека ThreetenABP Джейка Уортона), к сожалению, НЕ поддерживает календарь umalqura).