PDA

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



ELI994
دوشنبه 24 تیر 1392, 09:41 صبح
سلام
لطفا یه راهنمایی اساسی برای انجام این کار ارائه بدین که بشه با اون به نتیجه رسید
ممنون

ELI994
دوشنبه 24 تیر 1392, 13:41 عصر
البته سئوالم رو تصحیح می کنم DLL رو که درست کار می کنه رو معرفی کنین و نحوه کارکردن با اون رو بگین

BORHAN TEC
سه شنبه 25 تیر 1392, 18:20 عصر
سلام
نیازی نیست که همیشه دنبال کدهای C++ باشید. ده ها یونیت مختلف برای کار با تاریخ شمسی برای دلفی ساخته شده است که می توانید از آنها استفاده کنید. مثلاً این:
http://barnamenevis.org/showthread.php?397232
توجه کنید که من قبلاً در ویدئویی نحوه استفاده از یونیت های دلفی در C++ Builder را شرح داده ام:
http://www.irstu.com/?p=8490
باید فایل مربوط به درس "رنامه نویسی شی گرا در دلفی(بخش هفتم : استفاده از کلاسهای Delphi در C++ Builder)" رو دانلود کنید.
موفق باشید...

ELI994
شنبه 29 تیر 1392, 11:08 صبح
این آدرسی که دادین یونیت گذاشتن وقتی این یونیت رو به برنامه ام اضافه میکنم باز هم ارور میده از ایشون پرسیدم گفتن باید اون رو به dll تبدیل کنم . واقعا همینطوره

BORHAN TEC
شنبه 29 تیر 1392, 17:40 عصر
سلام

این آدرسی که دادین یونیت گذاشتن وقتی این یونیت رو به برنامه ام اضافه میکنم باز هم ارور میده از ایشون پرسیدم گفتن باید اون رو به dll تبدیل کنم . واقعا همینطوره
نیازی نیست. در تاپیک زیر پاسخ داده شد:
http://barnamenevis.org/showthread.php?397232
موفق باشید...

saeedIRHA
جمعه 04 مرداد 1392, 22:11 عصر
این کلاس رو قبلان دوستان نوشته بودن:


#ifndef JALALI_H
#define JALALI_H

class jalaliDate
{
private:


public:
void gregorian_to_jalali(/* output */ int *j_y, int *j_m, int *j_d,
/* input */ int g_y, int g_m, int g_d)

{
int g_days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int j_days_in_month[12] = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};

int gy, gm, gd;
int jy, jm, jd;
long g_day_no, j_day_no;
int j_np;

int i;

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 (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;

j_day_no = g_day_no-79;

j_np = j_day_no / 12053;
j_day_no %= 12053;

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;
}

for (i = 0; (i < 11) && (j_day_no >= j_days_in_month[i]); ++i) {
j_day_no -= j_days_in_month[i];
}
jm = i+1;
jd = j_day_no+1;
*j_y = jy;
*j_m = jm;
*j_d = jd;
}
void jalali_to_gregorian(/* output */ int *g_y, int *g_m, int *g_d,
/* input */ int j_y, int j_m, int j_d){
int g_days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int j_days_in_month[12] = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};

int gy, gm, gd;
int jy, jm, jd;
long g_day_no, j_day_no;
int leap;

int i;

jy = j_y-979;
jm = j_m-1;
jd = j_d-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 = 1600 + 400*(g_day_no/146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
g_day_no = g_day_no % 146097;

leap = 1;
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 = 0;
}

gy += 4*(g_day_no/1461); /* 1461 = 365*4 + 4/4 */
g_day_no %= 1461;

if (g_day_no >= 366) {
leap = 0;

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] + (i == 1 && leap); i++)
g_day_no -= g_days_in_month[i] + (i == 1 && leap);
gm = i+1;
gd = g_day_no+1;

*g_y = gy;
*g_m = gm;
*g_d = gd;
}
};

#endif // JALALI_H