تبدیل تاریخ میلادی به شمسی در اندروید
کد زیر تبدیل تاریخ میلادی به شمسی را به خوبی انجام می دهد، من برای منظور خاصی خروجی تابع را به صورتی که در زیر مشاهده می کنید طراحی کردهام، شما می توانید خروجی های دیگری از تابع برای خود بگیرید:
public String gregorian_to_jalali(Integer ret_val)
{
Calendar c = Calendar.getInstance();
Integer y = c.get(Calendar.YEAR);
Integer m = c.get(Calendar.MONTH);
Integer d = c.get(Calendar.DAY_OF_MONTH);
Integer h = c.get(Calendar.HOUR_OF_DAY);
Integer min = c.get(Calendar.MINUTE);
Integer[] g_days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
Integer[] j_days_in_month = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};
Integer gy = y - 1600;
Integer gm = m;
Integer gd = d - 1;
Integer g_day_no = 365 * gy + ((gy + 3) / 4) - ((gy+99) / 100)+ ((gy+399) / 400);
for (Integer 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)))
/* leap and after Feb */
++g_day_no;
g_day_no += gd;
Integer j_day_no = g_day_no-79;
Integer j_np = (j_day_no / 12053);
j_day_no %= 12053;
Integer 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;
}
Integer i = 0;
for (i = 0; i < 11 && j_day_no >= j_days_in_month[i]; ++i) {
j_day_no -= j_days_in_month[i];
}
Integer jm = i + 1;
Integer jd = j_day_no + 1;
String ret = "";
switch (ret_val) {
case 1: //sal
ret = jy.toString();
break;
case 2: //mah
ret = jm.toString();
break;
case 3: //ruz
ret = jd.toString();
break;
case 4: //saat
//Integer h = dt1.getHours();
ret = h.toString();
break;
case 5: //daghighe
//Integer min = dt1.getMinutes();
ret = min.toString();
break;
default:
break;
}
return ret;
}