Hallo zuammen,
ich benutze einen PersianDatePicker nun möchte ich das ausgewählten Datum in Gregorianischen Datum umwandeln.
Ich hab im internet die Brechnung gefunden. Das Jahr wird richtig umgewandelt aber der Monat und Der Tag nicht.
Kennt sich da einer damit aus und kann mir dabei helfen?
Code
public static int g_days_in_month[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30,
31, 30, 31 };
public static int j_days_in_month[] = { 31, 31, 31, 31, 31, 31, 30, 30, 30,
30, 30, 29 };
/**
* Converts Persian date to gregorian date
* */
public static Calendar getGregorianCalendar(int year, int month, int day) {
int gy, gm, gd;
int jy, jm, jd;
long g_day_no, j_day_no;
boolean leap;
int i;
jy = year - 979;
jm = month - 1;
jd = day - 1;
j_day_no = 365 * jy + (jy / 33) * 8 + (jy % 33 + 3) / 4;
for (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 = (int) (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;
}
for (i = 0; g_day_no >= g_days_in_month[i]
+ parsBooleanToInt(i == 1 && leap); i++)
g_day_no -= g_days_in_month[i] + parsBooleanToInt(i == 1 && leap);
gm = i + 1;
gd = (int) (g_day_no + 1);
GregorianCalendar gregorian = new GregorianCalendar(gy, gm - 1, gd);
return gregorian;
}
private static int parsBooleanToInt(Boolean sample) {
if (sample)
return 1;
else
return 0;
}
Alles anzeigen