Update hijri.py
هذا الالتزام موجود في:
57
hijri.py
57
hijri.py
@@ -1,55 +1,22 @@
|
|||||||
"""Hijri Calendar Library - مكتبة التقويم الهجري"""
|
from datetime import date
|
||||||
from datetime import date, timedelta
|
|
||||||
|
|
||||||
# أم القرى - أشهر التقويم الهجري
|
HIJRI=['Muharram','Safar','Rabi I','Rabi II','Jumada I','Jumada II','Rajab','Shaban','Ramadan','Shawwal','Dhul Qadah','Dhul Hijjah']
|
||||||
HIJRI_MONTHS = [
|
|
||||||
"محرم", "صفر", "ربيع الأول", "ربيع الثاني",
|
|
||||||
"جمادى الأولى", "جمادى الآخرة", "رجب",
|
|
||||||
"شعبان", "رمضان", "شوال", "ذو القعدة", "ذو الحجة"
|
|
||||||
]
|
|
||||||
|
|
||||||
GREGORIAN_MONTHS = [
|
|
||||||
"يناير", "فبراير", "مارس", "إبريل", "مايو", "يونيو",
|
|
||||||
"يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"
|
|
||||||
]
|
|
||||||
|
|
||||||
class HijriDate:
|
class HijriDate:
|
||||||
def __init__(self, year: int, month: int, day: int):
|
def __init__(self,y,m,d): self.y,self.m,self.d=y,m,d
|
||||||
self.year = year
|
def format(self): return f'{self.d} {HIJRI[self.m-1]} {self.y} AH'
|
||||||
self.month = month
|
|
||||||
self.day = day
|
|
||||||
|
|
||||||
def format(self, lang="ar"):
|
def to_hijri(gs):
|
||||||
if lang == "ar":
|
g=date.fromisoformat(gs)
|
||||||
return f"{self.day} {HIJRI_MONTHS[self.month-1]} {self.year} هـ"
|
jd=int(g.toordinal())+1721425
|
||||||
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
|
l=jd-1948440+10632
|
||||||
n=int((l-1)/10631)
|
n=int((l-1)/10631)
|
||||||
l=l-10631*n+354
|
l=l-10631*n+354
|
||||||
j=(int((10985-l)/5316))*(int((50*l)/17719))+(int(l/5670))*(int((43*l)/15238))
|
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
|
l=l-(int((30-j)/15))*(int((17719*j)/50))-(int(j/16))*(int((15238*j)/43))+29
|
||||||
month = int((24 * l) / 709)
|
m=int((24*l)/709)
|
||||||
day = l - int((709 * month) / 24)
|
d=l-int((709*m)/24)
|
||||||
year = 30 * n + j - 30
|
y=30*n+j-30
|
||||||
return HijriDate(year=year, month=month, day=day)
|
return HijriDate(y,m,d)
|
||||||
|
|
||||||
def to_gregorian(hijri_date: HijriDate) -> date:
|
if __name__=='__main__': print(to_hijri('2026-08-05').format())
|
||||||
"""تحويل تاريخ هجري إلى ميلادي (تقريبي)"""
|
|
||||||
# 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)}")
|
|
||||||
|
|||||||
المرجع في مشكلة جديدة
حظر مستخدم