پاسخ داده شد
چگونه می توانیم در جاوا تاریخ میلادی را به شمسی تبدیل کنیم؟
- فرشته حقیقی 1 سال قبل سوال کرد
- شما باید برای ارسال دیدگاه وارد شوید
پاسخ عالی
برای تبدیل میلادی به شمسی از متد زیر استفاده می کنیم.
public static int[] gregorian_to_jalali(int g_y, int g_m, int g_d) {
GregorianCalendar gregorianDate = new GregorianCalendar(g_y, g_m - 1, g_d);
int[] g_days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int[] j_days_in_month = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};
int gy, gm, gd, g_day_no, j_day_no, j_np, jy, temp, jm, jd;
gy = g_y - 1600;
gm = g_m - 1;
gd = g_d - 1;
g_day_no = 365 * gy + ((gy + 3) / 4) - ((gy + 99) / 100) + ((gy + 399) / 400);
for (int i = 0; i < gm; ++i)
g_day_no += g_days_in_month[i];
if (gm > 1 && ((gy % 4 == 0 && gy % 100 != 0) || (gy % 400 == 0)))
g_day_no++; /* leap and after Feb */
g_day_no += gd;
j_day_no = g_day_no - 79;
j_np = (j_day_no / 12053); /* 12053 = 365*33 + 32/4 */
j_day_no = j_day_no % 12053;
jy = 979 + 33 * j_np + 4 * (j_day_no / 1461); /* 1461 = 365*4 + 4/4 */
j_day_no %= 1461;
if (j_day_no >= 366) {
jy += ((j_day_no - 1) / 365);
j_day_no = (j_day_no - 1) % 365;
}
temp = 0;
for (int i = 0; i < 11 && j_day_no >= j_days_in_month[i]; ++i, temp = i) {
j_day_no -= j_days_in_month[i];
}
jm = temp + 1;
jd = j_day_no + 1;
int dayInWeek = gregorianDate.get(GregorianCalendar.DAY_OF_WEEK);
dayInWeek += 1;
if (dayInWeek == 8) dayInWeek = 1;
int[] back = {jy, jm, jd, dayInWeek};
return back;
}
- فرشته حقیقی 1 سال قبل پاسخ داد
- شما باید برای ارسال دیدگاه وارد شوید
پاسخ شما