adding
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"""تبدیل تاریخ میلادی به شمسی برای نمایش تاریخ انتشار مقاله — بدون وابستگی
|
||||
به پکیج خارجی (همان الگوریتم استاندارد تبدیل جلالی)."""
|
||||
|
||||
_PERSIAN_MONTHS = [
|
||||
"فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور",
|
||||
"مهر", "آبان", "آذر", "دی", "بهمن", "اسفند",
|
||||
]
|
||||
_PERSIAN_DIGITS = str.maketrans("0123456789", "۰۱۲۳۴۵۶۷۸۹")
|
||||
|
||||
|
||||
def gregorian_to_jalali(date) -> tuple[int, int, int]:
|
||||
gy, gm, gd = date.year, date.month, date.day
|
||||
g_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
||||
gy2 = gy - 1600
|
||||
gm2 = gm - 1
|
||||
gd2 = gd - 1
|
||||
g_day_no = 365 * gy2 + (gy2 + 3) // 4 - (gy2 + 99) // 100 + (gy2 + 399) // 400
|
||||
for i in range(gm2):
|
||||
g_day_no += g_days_in_month[i]
|
||||
if gm2 > 1 and ((gy % 4 == 0 and gy % 100 != 0) or gy % 400 == 0):
|
||||
g_day_no += 1
|
||||
g_day_no += gd2
|
||||
|
||||
j_day_no = g_day_no - 79
|
||||
j_np = j_day_no // 12053
|
||||
j_day_no %= 12053
|
||||
jy = 979 + 33 * j_np + 4 * (j_day_no // 1461)
|
||||
j_day_no %= 1461
|
||||
if j_day_no >= 366:
|
||||
jy += (j_day_no - 1) // 365
|
||||
j_day_no = (j_day_no - 1) % 365
|
||||
|
||||
j_days_in_month = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
|
||||
jm = 0
|
||||
for i, days in enumerate(j_days_in_month):
|
||||
if j_day_no < days:
|
||||
jm = i
|
||||
break
|
||||
j_day_no -= days
|
||||
else:
|
||||
jm = 11
|
||||
jd = j_day_no + 1
|
||||
return jy, jm + 1, jd
|
||||
|
||||
|
||||
def format_jalali(date) -> str:
|
||||
jy, jm, jd = gregorian_to_jalali(date)
|
||||
text = f"{jd} {_PERSIAN_MONTHS[jm - 1]} {jy}"
|
||||
return text.translate(_PERSIAN_DIGITS)
|
||||
Reference in New Issue
Block a user