Skip to content

Diyanet Variant Not Working in Android - Variant.DIYANET fails with ArithmeticException in time4j-hijri Android 4.8-2021a #994

@BordoBereli

Description

@BordoBereli

Description: The Variant.DIYANET in Time4A's Hijri calendar implementation consistently throws ArithmeticException when trying to convert Gregorian dates to Hijri dates, even for dates that should be within the supported range (post-1921/1340H). This makes it impossible to use the official Turkish Diyanet calendar calculations through Time4A.

Steps to Reproduce

Environment: Time4A Android 4.8-2021a

**Code to reproduce:**

import net.time4j.PlainDate
import net.time4j.calendar.HijriCalendar
import java.time.LocalDate

fun testDiyanetVariant() {
val today = LocalDate.now() // e.g., 2026-02-07
val todayDate = PlainDate.of(today.year, today.monthValue, today.dayOfMonth)

// This always fails:
val hijriDate = todayDate.transform(
    HijriCalendar::class.java, 
    HijriCalendar.Variant.DIYANET
)

}

**Result: Always throws:**

java.lang.ArithmeticException: Cannot transform <19759> to: net.time4j.calendar.HijriCalendar
at net.time4j.engine.Calendrical.transform(Calendrical.java:420)

Expected Behavior:

The Variant.DIYANET should:

Successfully convert Gregorian dates to Hijri dates according to Turkish Diyanet İşleri Başkanlığı's official calendar

Support dates from at least 1921 onwards (which marks 1340H, the typical start of modern calendar calculations)

Provide accurate results for important dates like Ramadan beginnings (e.g., 2026-02-16 should be Şaban 30, not Ramadan 1 as in UMMALQURA)

Actual Behavior:

Always fails with ArithmeticException for any date tested

No successful conversions observed, even for recent dates

No clear documentation on supported date ranges or limitations

Technical Details:

Time4A Version: 4.8-2021a (Android)

Dependencies:

    net.time4j:time4j-android:4.8-2021a

    net.time4j:time4j-hijri:4.8-2021a

Test Environment: Android API 30+, Kotlin 1.8+

Alternative Variants: Variant.UMMALQURA, Variant.ISLAMIC_CIVIL work correctly

Impact:

Turkish developers cannot use Time4A for official Diyanet calendar calculations

Religious applications in Turkey require manual workarounds

Inconsistency between Time4A variants (UMMALQURA works, Diyanet doesn't)

Lack of reliable Hijri calculations for Turkey's official calendar

Questions:

What is the intended date range for Variant.DIYANET?

Are there any known limitations or prerequisites for using this variant?

Is the Diyanet variant maintained and tested for recent/future dates?

Can you provide a working example of Variant.DIYANET usage?

Thanks in advance for your time and effort.

After checking Min&Max Values:
It seems that the problem Min&Max Values for the variants:
✓ MinHijri destekleniyor: AH-1300-01-01[islamic-umalqura]
✓ maxHijri destekleniyor: AH-1500-12-30[islamic-umalqura]
✓ minGregorian destekleniyor: 1882-11-12
✓ maxGregorian destekleniyor: 2077-11-16

✓ MinHijri destekleniyor: AH-1318-01-01[islamic-diyanet]
✓ maxHijri destekleniyor: AH-1444-05-29[islamic-diyanet]
✓ minGregorian destekleniyor: 1900-05-01
✓ maxGregorian destekleniyor: 2022-12-23

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions