"""Hijri Calendar Library - مكتبة التقويم الهجري""" from datetime import date, timedelta # أم القرى - أشهر التقويم الهجري HIJRI_MONTHS = [ "محرم", "صفر", "ربيع الأول", "ربيع الثاني", "جمادى الأولى", "جمادى الآخرة", "رجب", "شعبان", "رمضان", "شوال", "ذو القعدة", "ذو الحجة" ] GREGORIAN_MONTHS = [ "يناير", "فبراير", "مارس", "إبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر" ] class HijriDate: def __init__(self, year: int, month: int, day: int): self.year = year self.month = month self.day = day def format(self, lang="ar"): if lang == "ar": return f"{self.day} {HIJRI_MONTHS[self.month-1]} {self.year} هـ" return f"{self.year}-{self.month:02d}-{self.day:02d} AH" def __repr__(self): return self.format() # Simplified conversion (accurate approximation using Kuwaiti algorithm) def to_hijri(gregorian_str: str) -> HijriDate: """تحويل تاريخ ميلادي إلى هجري""" g_date = date.fromisoformat(gregorian_str) jd = int(g_date.toordinal()) + 1721425 # Julian Day l = jd - 1948440 + 10632 n = int((l - 1) / 10631) l = l - 10631 * n + 354 j = (int((10985 - l) / 5316)) * (int((50 * l) / 17719)) + (int(l / 5670)) * (int((43 * l) / 15238)) l = l - (int((30 - j) / 15)) * (int((17719 * j) / 50)) - (int(j / 16)) * (int((15238 * j) / 43)) + 29 month = int((24 * l) / 709) day = l - int((709 * month) / 24) year = 30 * n + j - 30 return HijriDate(year=year, month=month, day=day) def to_gregorian(hijri_date: HijriDate) -> date: """تحويل تاريخ هجري إلى ميلادي (تقريبي)""" # Placeholder - would use hijri-converter library in production base = date(622, 7, 16) # 1 محرم 1 هـ days = (hijri_date.year - 1) * 354 + (hijri_date.month - 1) * 29 + hijri_date.day return base + timedelta(days=int(days * 0.97)) if __name__ == "__main__": today_hijri = to_hijri("2026-08-05") print(f"اليوم: {today_hijri.format()}") print(f"الأشهر الهجرية: {', '.join(HIJRI_MONTHS)}")