DEBUG # 26
1405-04-18 00:01
تاریخ شمسی بلاخره درست شد فک کنم
ینی تاریخ شمسی و ai من رو چند ساعت پاره پوره کردن اخرش هم یه تابع برای تبدیل ساختم 😑هنوزم تازه به مرحله چک کردن نرسیده ولی فعلا تابعه اینه
fn gregorian_to_jalali(gy: i32, gm: i32, gd: i32) -> (i32, i32, i32) {
// محاسبه تعداد روزهای سال میلادی
let mut days_in_month = vec![31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (gy % 4 == 0 && gy % 100 != 0) || (gy % 400 == 0) {
days_in_month[1] = 29;
}
// محاسبه تعداد روزهای گذشته از ابتدای سال میلادی
let mut day_of_year = 0;
for i in 0..(gm - 1) as usize {
day_of_year += days_in_month[i];
}
day_of_year += gd - 1;
// محاسبه سال جلالی
let mut jy = gy - 621;
// محاسبه روزهای ابتدای سال جلالی نسبت به سال میلادی
let mut jalali_days = 0;
let mut temp_year = gy;
let mut is_leap = false;
// محاسبه روزهای کبیسه
for y in 0..jy {
let greg_year = y + 621;
let is_greg_leap = (greg_year % 4 == 0 && greg_year % 100 != 0) || (greg_year % 400 == 0);
let is_jalali_leap = (y % 4 == 0) || (y % 4 == 3);
if is_greg_leap {
jalali_days += 366;
} else {
jalali_days += 365;
}
if is_jalali_leap {
jalali_days -= 1;
}
}
// تنظیم سال جلالی
let mut remaining_days = day_of_year;
if remaining_days >= jalali_days % 365 {
remaining_days -= jalali_days % 365;
} else {
jy -= 1;
let prev_year = jy;
let is_prev_jalali_leap = (prev_year % 4 == 0) || (prev_year % 4 == 3);
remaining_days += if is_prev_jalali_leap { 366 } else { 365 };
remaining_days -= jalali_days % 365;
}
// ماههای جلالی
let month_days = vec![31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29];
let is_jalali_leap = (jy % 4 == 0) || (jy % 4 == 3);
let mut jm = 1;
let mut jd = remaining_days + 1;
for (i, &days) in month_days.iter().enumerate() {
if i == 11 && !is_jalali_leap {
if jd <= 29 {
jm = (i + 1) as i32;
break;
}
jd -= 29;
} else {
if jd <= days {
jm = (i + 1) as i32;
break;
}
jd -= days;
}
}
(jy as i32, jm, jd)
}