PDA

View Full Version : تبدیل تاریخ میلادی به شمسی



behrooz&emad
دوشنبه 28 خرداد 1386, 15:05 عصر
سلام .
تبدیل تاریخ میلادی به شمسی در جاوا را می خواستم.

azmoodeh
دوشنبه 28 خرداد 1386, 15:53 عصر
سلام

دوست عزیز ، بنده هم زمانی در یک پروژه دانشجویی چنین مشکلی داشتم که نهایتا یک تابع تبدیل به زبان C++ پیدا کردم و با کمی تغییر به جاوا تبدیل شد.متاسفانه الان کدش رو ندارم که تقدیم کنم ولی راه حل بنده این بود

fdehghani
سه شنبه 16 مرداد 1386, 13:09 عصر
public static String gregorian_to_jalali(int gy1,int gm1,int gd1 ){
int g_days_in_month[]=new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int j_days_in_month[]=new int[]{31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};
int gy=gy1-1600;
int gm=gm1-1;
int gd=gd1-1;
int g_day_no = 365*gy+doubleToInt((gy+3)/4)-doubleToInt((gy+99)/100)+doubleToInt((gy+399)/400);
int i;
for (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++;
g_day_no += gd;
int j_day_no = g_day_no-79;
int j_np = doubleToInt(j_day_no/12053); /* 12053 = 365*33 + 32/4 */
j_day_no = j_day_no % 12053;
int jy = 979+33*j_np+4*doubleToInt(j_day_no/1461); /* 1461 = 365*4 + 4/4 */
j_day_no %= 1461;
if (j_day_no >= 366)
{
jy += doubleToInt((j_day_no-1)/365);
j_day_no = (j_day_no-1)%365;
}
for (i = 0; i < 11 && j_day_no >= j_days_in_month[i]; ++i)
j_day_no -= j_days_in_month[i];
int jm = i+1;
// int day=j_day_no+1;
// int month=jm;
// int year=jy;
// this.jd =j_day_no+1;
// this.jm =jm;
// this.jy =jy;
return jy+"/"+jm+"/"+(j_day_no+1);
}

private static int doubleToInt(double f){
Double fint=new Double(f);
return fint.intValue();
}

kashani
پنج شنبه 25 مرداد 1386, 15:22 عصر
این کدها هم که با زبان c نوشته شده امیدوارم کمکتون بکنه ، کار منو که راه انداخت
publicstructSHAMSIDATE
{
publicint iYear;
publicint iMonth;
publicint iDay;
}
publicSHAMSIDATE SHAMSIDATEMiladiToShamsi(int iMiladiMonth, int iMiladiDay, int iMiladiYear)
{
int shamsiDay, shamsiMonth, shamsiYear;
int dayCount, farvardinDayDiff, deyDayDiff;
int[] sumDayMiladiMonth = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
int[] sumDayMiladiMonthLeap = { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
SHAMSIDATE shamsidate;
farvardinDayDiff = 79;
if (MiladiIsLeap(iMiladiYear))
{
dayCount = sumDayMiladiMonthLeap[iMiladiMonth - 1] + iMiladiDay;
}
else
{
dayCount = sumDayMiladiMonth[iMiladiMonth - 1] + iMiladiDay;
}
if ((MiladiIsLeap(iMiladiYear - 1)))
{
deyDayDiff = 11;
}
else
{
deyDayDiff = 10;
}
if (dayCount > farvardinDayDiff)
{
dayCount = dayCount - farvardinDayDiff;
if (dayCount <= 186)
{
switch (dayCount % 31)
{
case 0:
shamsiMonth = dayCount / 31;
shamsiDay = 31;
break;
default:
shamsiMonth = (dayCount / 31) + 1;
shamsiDay = (dayCount % 31);
break;
}
shamsiYear = iMiladiYear - 621;
}
else
{
dayCount = dayCount - 186;
switch (dayCount % 30)
{
case 0:
shamsiMonth = (dayCount / 30) + 6;
shamsiDay = 30;
break;
default:
shamsiMonth = (dayCount / 30) + 7;
shamsiDay = (dayCount % 30);
break;
}
shamsiYear = iMiladiYear - 621;
}
}
else
{
dayCount = dayCount + deyDayDiff;
switch (dayCount % 30)
{
case 0:
shamsiMonth = (dayCount / 30) + 9;
shamsiDay = 30;
break;
default:
shamsiMonth = (dayCount / 30) + 10;
shamsiDay = (dayCount % 30);
break;
}
shamsiYear = iMiladiYear - 622;
}
shamsidate.iYear = shamsiYear;
shamsidate.iMonth = shamsiMonth;
shamsidate.iDay = shamsiDay;
return shamsidate;
}
// the function check a miladiyear is leap or not.
bool MiladiIsLeap(int miladiYear)
{
if (((miladiYear % 100) != 0 && (miladiYear % 4) == 0) || ((miladiYear % 100) == 0 && (miladiYear % 400) == 0))
returntrue;
else
returnfalse;
}
}

rezaTavak
جمعه 26 مرداد 1386, 00:52 صبح
تقویم: جلالی- قمری- گریگوری- ژولیوسی- عبری- انقلاب فران (http://barnamenevis.org/forum/showthread.php?t=29199&highlight=%D8%B9%D8%A8%D8%B1%DB%8C)