PDA

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



AbiriAmir
سه شنبه 31 شهریور 1388, 19:49 عصر
سلام
من وقتی با کدهای تبدیل تاریخ میلادی به شمسی کار میکنم وقتی تاریخ میشه سی و یکم دیگه سیستم به عنوان یه نوع تاریخ صحیح حسابش نمیکنه و ارور میده.
چیکار کنم؟

AliReza Vafakhah
سه شنبه 31 شهریور 1388, 20:04 عصر
در کدام تاریخ پیغام error داده میشه؟ شمسی یا میلادی ؟

اگه قصد چک کردن تاریخ شمسی را دارید ، این رو بگم که نمی تونید با توابع دلفی این کار را انجام دهید ! زیرا فرمت تاریخ شمسی با میلادی فرق دارد مثل همون چیزی که خودتون عرض کردید به هرحال باید این کار را خودتان انجام دهید

AbiriAmir
سه شنبه 31 شهریور 1388, 20:22 عصر
به هرحال باید این کار را خودتان انجام دهید
چجوری؟

در ضمن نه من فقط با تاریخ های 31 مشکل دارم مثلا 31/6/1388 ولی با تاریخ های دیگه مشکلی ندارم

AliReza Vafakhah
سه شنبه 31 شهریور 1388, 21:04 عصر
چجوری؟

در ضمن نه من فقط با تاریخ های 31 مشکل دارم مثلا 31/6/1388 ولی با تاریخ های دیگه مشکلی ندارم

خوب کاری نداره روز،ماه و سال رو از هم جدا کن و چک کن به این شکل


var
dY:string;
dM,dD:string;
begin
dY:=LeftStr(cxMaskEdit1.Text,4);
dm:=MidStr(cxMaskEdit1.Text,6,2);
dd:=RightStr(cxMaskEdit1.Text,2);

البته من تاریخ رو به این شکل فرض کردم ==>> 1388/01/05

دقت کنید من از MaskEdit استفاده کردم و Mask هم جوری هست که برای کامل شدنش باید کاراکتر صفر را برای اعدا تکر رقمی در روز و ماه وارد کنید

AbiriAmir
جمعه 03 مهر 1388, 13:58 عصر
خوب کاری نداره روز،ماه و سال رو از هم جدا کن و چک کن به این شکل


var
dY:string;
dM,dD:string;
begin
dY:=LeftStr(cxMaskEdit1.Text,4);
dm:=MidStr(cxMaskEdit1.Text,6,2);
dd:=RightStr(cxMaskEdit1.Text,2);

البته من تاریخ رو به این شکل فرض کردم ==>> 1388/01/05

دقت کنید من از MaskEdit استفاده کردم و Mask هم جوری هست که برای کامل شدنش باید کاراکتر صفر را برای اعدا تکر رقمی در روز و ماه وارد کنید

خب با DecodeDate هم میشه ولی مشکل من اینه که میخوام رو تاریخ یه محاسباتی انجام بدم و باید متغیرم از نوع تاریخ باشه ولی سی و یکم رو تاریخ درست حساب نمیکنه

AliReza Vafakhah
جمعه 03 مهر 1388, 14:31 عصر
خب با DecodeDate هم میشه ولی مشکل من اینه که میخوام رو تاریخ یه محاسباتی انجام بدم و باید متغیرم از نوع تاریخ باشه ولی سی و یکم رو تاریخ درست حساب نمیکنه

خوب از اول بگو که می خوای با تاریخ چیکار کنی !!!

AbiriAmir
شنبه 04 مهر 1388, 17:16 عصر
فرض کنید میخوام به علاوه یکش کنم

babakmomeni
شنبه 04 مهر 1388, 17:35 عصر
چجوری؟

در ضمن نه من فقط با تاریخ های 31 مشکل دارم مثلا 31/6/1388 ولی با تاریخ های دیگه مشکلی ندارم

سلام. دوست عزیز مشکل از اونجا ناشی میشه که ماههای 31 روزه میلادی مثل شمسی منظم نیستن و متاسفانه روی ماههای 31 روزه شمسی هم منطبق نیستن که شما بتونی به عنوان جایگزین ازشون استفاده بفرمایین. محض مثل همین تاریخ 88/6/31 که یه تاریخ معتبر شمسی هست در حقیقت 31 ژوئن میشه که ژوئن یه ماه 30 روزه اس. امن ترین راه که من توی فرضا برنامه های تایم کارت دیدم اینه که کلا قید فرمت تاریخ رو بزنی و تاریخ شمسی رو با یه integer یا رشته نشونش بدی و روالهای کنترلش رو هم دستی زحمتشو بکشی. تا زمانی که این شیاطین بزرگ از چهارپاشون پایین تشریف بیارن و ما و زبان و تاریخمون رو توی سیستم عاملاشون به طور رسمی وارد کنن.:لبخند:
سربلند باشید

Mahmood_M
یک شنبه 05 مهر 1388, 00:21 صبح
علاوه بر توضیحات دوستان ...
به نظر بنده بهتره یک کامپوننت تاریخ شمسی خوب پیدا کنید ، من از یک DLL به نام Shamsi.dll ( با همین نام در نت قرار داده شده ) استفاده میکنم ، فکر کنم خودم قبلا خود DLL و نحوه استفاده از اون رو در سایت گذاشته بودم !
با استفاده از این DLL با تاریخ به صورت String کار میکنید و تمام کارها از جمله کم کردن یا زیاد کردن تاریخ رو هم می تونید انجام بدید ...
تنها مشکلی که داره اینه که باید در سیستم کاربر DLL رو رجیستر کنید تا بتونید از توابعش استفاده کنید که البته مشکل خاصی نیست ...

برای گرفتن تاریخ از کاربر هم من کامپوننت آقای خرسندی (http://barnamenevis.org/forum/showthread.php?t=110628) رو بهتون توصیه میکنم ، خیلی کارتون راحت میشه ...

اگه در تهیه Shamsi.dll مشکلی داشتید بگید تا براتون بزارم ( رایگان هست )

موفق باشید ...

AliReza Vafakhah
یک شنبه 05 مهر 1388, 00:56 صبح
خب با DecodeDate هم میشه ولی مشکل من اینه که میخوام رو تاریخ یه محاسباتی انجام بدم و باید متغیرم از نوع تاریخ باشه ولی سی و یکم رو تاریخ درست حساب نمیکنه

نه چون خوب میگین DecodeDate ،تاریخ شمسی در دلفی دیگه یک داده Date حساب نمیشه

پس.

ghasemshami
یک شنبه 05 مهر 1388, 06:43 صبح
این کامپوننت هم تاریخ های 31 رو پشتیبانی می کنه هم سال کبیسه رو پشتیبانی می کنه

به همراه نمونه های کاربردی و کامل براتون گذاشتم

zahra_no
پنج شنبه 03 اسفند 1391, 17:24 عصر
این کامپوننت هم تاریخ های 31 رو پشتیبانی می کنه هم سال کبیسه رو پشتیبانی می کنه

به همراه نمونه های کاربردی و کامل براتون گذاشتم


با سلام
من این کامپوننت رو نصب کردم ولی در تول پلت این آبجکت رو نمیبینم
اینم عرض کنم که ورژن دلفی من XE3 میباشد.

zahra_no
پنج شنبه 03 اسفند 1391, 17:28 عصر
من نباید دنبال آبجکتی میبودم باید مسیر کامپوننت رو به librdry اضافه میکردم.
حل شد.:خجالت:

developing
شنبه 05 اسفند 1391, 10:04 صبح
با سلام

من برای این کار(تبدیل تاریخ ها به یکدیگر) از کامپوننت فوق العاده ی XCalendar استفاده می کنم که خیلی کارها رو راه میندازه علاوه بر اون می تونید تاریخهای شمسی، قمری و میلادی رو به هم تبدیل کنید و برای هر روز یک متن تعریف کنید و در همون روز اون رو نمایش بدید.(این رو هم بگم که این کامپوننت منبع باز و رایگان هست)

کار کردن باهاش راحته ولی اگه نتونستید می تونید از مثال های خودش استفاده کنید.

از طریق لینک زیر می تونید در موردش اطلاعات کسب کنید و اگه خواستید دانلودش کیند:

http://sourceforge.net/projects/xcalendar/?source=directory