ورود

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



pouran
جمعه 16 اسفند 1387, 10:27 صبح
سلام دوستان
من تاریخ شمسی را به کریستال ریپورت اضافه کردم همه چیز درسته و error نمی ده ولی در چاپ تاریخ را به صورت زیر نمایش می ده.

16.00/12.00/13.87.00

این هم کد:

numbervar iMiladiMonth:=month(CurrentDate);
numbervar iMiladiDay:=day(CurrentDate);
numbervar iMiladiYear:=year(CurrentDate);
numbervar shamsiDay;
numbervar shamsiMonth;
numbervar shamsiYear;
numbervar dayCount;
numbervar farvardinDayDiff;
numbervar deyDayDiff;
numberVar array sumDayMiladiMonth :=[0,31,59,90,120,151,181,212,243,273,304,334];
numberVar array sumDayMiladiMonthLeap := [0,31,60,91,121,152,182,213,244,274,305,335];
numberVar farvardinDayDiff:=79;
numbervar miladiYear1:=int(imiladiYear mod 100);
numbervar miladiYear2:=int(imiladiYear mod 4);
numbervar miladiYear3:=int(imiladiYear mod 100);
numbervar miladiYear4:=int(imiladiYear mod 400);
if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
dayCount := sumDayMiladiMonthLeap[iMiladiMonth] + iMiladiDay
else
dayCount := sumDayMiladiMonth[iMiladiMonth] + iMiladiDay;

miladiYear1:=int((imiladiYear-1) mod 100);
miladiYear2:=int((imiladiYear-1) mod 4);
miladiYear3:=int((imiladiYear-1) mod 100);
miladiYear4:=int((imiladiYear-1) mod 400);
if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
deyDayDiff := 11
else
deyDayDiff := 10;
if (dayCount > farvardinDayDiff) then
(
dayCount := dayCount - farvardinDayDiff;
if (dayCount <= 186) then
(
select int(dayCount mod 31)
case 0:(
shamsiMonth :=int( dayCount / 31);
shamsiDay := 31;
)
default:(
shamsiMonth := int(dayCount / 31) + 1;
shamsiDay :=int(dayCount mod 31);
);
shamsiYear := iMiladiYear - 621;
)
else
(
dayCount := dayCount - 186;
select dayCount mod 30
case 0:(
shamsiMonth := int(dayCount / 30) + 6;
shamsiDay := 30;
)
default:(
shamsiMonth := int(dayCount / 30) + 7;
shamsiDay := int(dayCount mod 30);
);
shamsiYear := iMiladiYear - 621;
)
)
else
(
dayCount := dayCount + deyDayDiff;
select int(dayCount mod 30)
case 0 :(
shamsiMonth := int(dayCount / 30) + 9;
shamsiDay := 30;
)
default:(
shamsiMonth := int(dayCount / 30) + 10;
shamsiDay := int(dayCount mod 30);
);
shamsiYear := iMiladiYear - 622;
);
stringvar exitmy:=totext(shamsiYear)+' / '+totext(shamsiMonth)+' / '+totext(shamsiDay);
exitmy;

hasan_esfahan
شنبه 17 اسفند 1387, 00:49 صبح
مشکل شما چیه تاریخ را برعکس نمایش می دهد یا ان دو تا صفری که اضافه گذاشته

pouran
شنبه 17 اسفند 1387, 06:27 صبح
دوست عزیز مشکل من در آن 2 صفر می باشد یعنی آخر سال و ما و روز می باشد و بین 2 صفر و روز و ماه و سال با یک نقطه از هم جدا شده است

hasan_esfahan
شنبه 17 اسفند 1387, 19:35 عصر
دوست عزیز شما می تونید انجای که در خط یکی به اخر کد


totext(shamsiMonth)


کد زیر را درج کنید


left(totext(shamsiMonth),2)

atryad
چهارشنبه 05 فروردین 1388, 12:15 عصر
سلام دوستان
من توي سي شارپ يه برنامه نوشتم و از تاريخ شمسي استفاده ميکنم با استفاده ازيک کلاس اما توي گزارشگيري که با کريستال ريپورت است نمي تونم از تاريخ شمسي استفاده کنم از دوستان کسي هست که بتونه منو راهتمايي کنه

hasan_esfahan
چهارشنبه 05 فروردین 1388, 12:29 عصر
دوست عزیز اگه می خواهی تاریخ را از را به کریستال ارسال کنی از پاراکتر استفاده کن
http://barnamenevis.org/forum/showthread.php?t=152133

اگه می خواهی خود کریستال تاریخ شمسی ایجاد کنه فرمول ایجاد کن
http://barnamenevis.org/forum/showthread.php?t=148950

atryad
چهارشنبه 05 فروردین 1388, 12:36 عصر
سلام دوستان
من تاریخ شمسی را به کریستال ریپورت اضافه کردم همه چیز درسته و error نمی ده ولی در چاپ تاریخ را به صورت زیر نمایش می ده.

16.00/12.00/13.87.00

این هم کد:

numbervar iMiladiMonth:=month(CurrentDate);
numbervar iMiladiDay:=day(CurrentDate);
numbervar iMiladiYear:=year(CurrentDate);
numbervar shamsiDay;
numbervar shamsiMonth;
numbervar shamsiYear;
numbervar dayCount;
numbervar farvardinDayDiff;
numbervar deyDayDiff;
numberVar array sumDayMiladiMonth :=[0,31,59,90,120,151,181,212,243,273,304,334];
numberVar array sumDayMiladiMonthLeap := [0,31,60,91,121,152,182,213,244,274,305,335];
numberVar farvardinDayDiff:=79;
numbervar miladiYear1:=int(imiladiYear mod 100);
numbervar miladiYear2:=int(imiladiYear mod 4);
numbervar miladiYear3:=int(imiladiYear mod 100);
numbervar miladiYear4:=int(imiladiYear mod 400);
if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
dayCount := sumDayMiladiMonthLeap[iMiladiMonth] + iMiladiDay
else
dayCount := sumDayMiladiMonth[iMiladiMonth] + iMiladiDay;

miladiYear1:=int((imiladiYear-1) mod 100);
miladiYear2:=int((imiladiYear-1) mod 4);
miladiYear3:=int((imiladiYear-1) mod 100);
miladiYear4:=int((imiladiYear-1) mod 400);
if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
deyDayDiff := 11
else
deyDayDiff := 10;
if (dayCount > farvardinDayDiff) then
(
dayCount := dayCount - farvardinDayDiff;
if (dayCount <= 186) then
(
select int(dayCount mod 31)
case 0:(
shamsiMonth :=int( dayCount / 31);
shamsiDay := 31;
)
default:(
shamsiMonth := int(dayCount / 31) + 1;
shamsiDay :=int(dayCount mod 31);
);
shamsiYear := iMiladiYear - 621;
)
else
(
dayCount := dayCount - 186;
select dayCount mod 30
case 0:(
shamsiMonth := int(dayCount / 30) + 6;
shamsiDay := 30;
)
default:(
shamsiMonth := int(dayCount / 30) + 7;
shamsiDay := int(dayCount mod 30);
);
shamsiYear := iMiladiYear - 621;
)
)
else
(
dayCount := dayCount + deyDayDiff;
select int(dayCount mod 30)
case 0 :(
shamsiMonth := int(dayCount / 30) + 9;
shamsiDay := 30;
)
default:(
shamsiMonth := int(dayCount / 30) + 10;
shamsiDay := int(dayCount mod 30);
);
shamsiYear := iMiladiYear - 622;
);
stringvar exitmy:=totext(shamsiYear)+' / '+totext(shamsiMonth)+' / '+totext(shamsiDay);
exitmy;
دوس عزیز شما میتونید فیلد تاریخ توی کریستالو به عدد صحیح تبدیل کنی یعنی کریستال عدد رو به صورت طبیعی با دو صفر مربوط به اعشاری نشون میده


اینو ببینید
http://upload.iranblog.com/1/1206473872.jpg (http://upload.iranblog.com/1/1206473872.jpg)

hasan_esfahan
چهارشنبه 05 فروردین 1388, 12:41 عصر
دوست عزیز در مورد تاپیک 6 این مثاله کلا فرق می کنه اخه این تاریخ شمسی را من خودم نوشتم و در قسمت کد نویسی دو صفر را می گرفت و کاری اصلا به محیط طراحی نداره

yousef86
دوشنبه 28 اردیبهشت 1388, 12:27 عصر
سلام من کار کد یک خط به آخر رو عوض کردم بازم ممیز میمونه عکسی هم که دوستمون راهنمایی کردن باز نمیشه کسی میتونه راهنمایی کنه ممیزها و اعشار بعدش حذف بشه

hasan_esfahan
جمعه 01 خرداد 1388, 01:37 صبح
چون که کریستال عدد را با دو صفر اعشار نشون میده برای حل این مشکل دو خط اخر را اینطوری بنویسید


stringvar exitmy:=left(totext(shamsiYear),5)+' / '+left(totext(shamsiMonth),2)+' / '+left(totext(shamsiDay),2);
exitmy;

hasan_esfahan
جمعه 01 خرداد 1388, 01:41 صبح
البته شاید برای روزهای تک رقمی مشکل پیش بیاد که برای این کار بهتر انها را کنترل کنی مثلا


if shamsiDay<10 then
.....


البته اگر کامل وقت نمی کنم توضیح بدم شرمنده چون 24 روز بود به دلیل کمبود وقت نتونستم به سایت بیام اما الان دیدم پیغام امده گفتم جواب بدم

yousef86
چهارشنبه 06 خرداد 1388, 18:07 عصر
ممنون از اینکه پاسخ دادید من مشکل را بطور کل با روش زیر حل کردم دیگه نه اعشار میده و نه ممیز امیدوارم بدرد همه بخوره
خط آخر رو به صورت زیر بنویسید

stringvar exitmy:= totext(shamsiYear,'#') +' / '+totext(shamsiMonth,'#')+' / '+totext(shamsiDay,'#');