پاسخ داده شد
java تبدیل تاریخ شمسی به میلادی convertPersianToGregorian تبدیل تاریخ در جاوا convert date in java آموزش جاوا
- فرشته حقیقی 2 سال قبل سوال کرد
- آخرین ویرایش 2 سال قبل
- شما باید برای ارسال دیدگاه وارد شوید
پاسخ عالی
برای تبدیل تاریخ شمسی به میلادی متدی بصورت زیر تعریف میکنیم که ورودی های آن سال و ماه و روز شمسی می باشد.
public static int[] convertPersianToGregorian(int jalaly_year, int jalaly_month, int jalaly_day) {
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, jy, temp, jm, jd;
boolean leap;
jy = jalaly_year - 979;
jm = jalaly_month - 1;
jd = jalaly_day - 1;
j_day_no = 365 * jy + (jy / 33) * 8 + ((jy % 33 + 3) / 4);
for (int i = 0; i < jm; ++i)
j_day_no += j_days_in_month[i];
j_day_no += jd;
g_day_no = j_day_no + 79;
gy = 1600 + 400 * (g_day_no / 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
g_day_no = g_day_no % 146097;
leap = true;
if (g_day_no >= 36525) { /* 36525 = 365*100 + 100/4 */
g_day_no--;
gy += 100 * (g_day_no / 36524); /* 36524 = 365*100 + 100/4 - 100/100 */
g_day_no = g_day_no % 36524;
if (g_day_no >= 365)
g_day_no++;
else
leap = false;
}
gy += 4 * (g_day_no / 1461); /* 1461 = 365*4 + 4/4 */
g_day_no %= 1461;
if (g_day_no >= 366) {
leap = false;
g_day_no--;
gy += (g_day_no / 365);
g_day_no = g_day_no % 365;
}
temp = 0;
for (int i = 0; g_day_no >= g_days_in_month[i] + ((i == 1 && leap) ? 1 : 0); i++, temp = i)
g_day_no -= g_days_in_month[i] + ((i == 1 && leap) ? 1 : 0);
gm = temp + 1;
gd = g_day_no + 1;
GregorianCalendar gregorianDate = new GregorianCalendar(gy, gm - 1, gd);
int dayInWeek = gregorianDate.get(7);
dayInWeek += 1;
if (dayInWeek == 8) dayInWeek = 1;
return new int[]{gy, gm, gd, dayInWeek};
}
- فرشته حقیقی 2 سال قبل پاسخ داد
- آخرین ویرایش 2 سال قبل
- شما باید برای ارسال دیدگاه وارد شوید
پاسخ شما