56 أسطر
2.3 KiB
Python
56 أسطر
2.3 KiB
Python
"""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)}")
|