PDA

View Full Version : سوال: محاسبه روز قبل و بعد یک تاریخ شمسی با استفاده از XCalendar



hamedjim
دوشنبه 02 شهریور 1394, 01:27 صبح
سلام به همگی.
در برنامه‌ای، یک تاریخ شمسی توسط MaskEdit دریافت میشه و بعد از اون باید روزهای قبل و بعدِ تاریخ وارد شده، در MaskEditهای دیگری قرار داده بشه.
با استفاده از کامپوننت بسیار خوب XCalendar به چه نحوی میشه این کار رو انجام داد؟

ممنون میشم اگه هر کدوم از دوستان بتونند منو راهنمایی کنند.

jst
دوشنبه 02 شهریور 1394, 01:48 صبح
من از توابع یونیتی که پیوست کردم استفاده می کنم . (این یونیت کار آقای حجت ربیعی است )

hamedjim
دوشنبه 02 شهریور 1394, 06:50 صبح
ممنون از راهنمایی. ولی هدف من بیشتر استفاده از دستورات کامپوننت XCalendar بود. چون به نظرم باید فانکشنی برای این موضوع در این کامپوننت موجود باشه.

parvizwpf
دوشنبه 02 شهریور 1394, 08:59 صبح
از کلاس PersianCalendar برای سوییچ بین تاریخ شمسی و میلادی استفاده کنید

hamedjim
دوشنبه 02 شهریور 1394, 09:11 صبح
از کلاس PersianCalendar برای سوییچ بین تاریخ شمسی و میلادی استفاده کنید

چیزی که به ذهن خودم رسیده بود اینه که تاریخ شمسی رو به میلادی تبدیل کنم و بعد با استفاده از تابع IncDay یک روز افزایش بدم و مجددا اونو تبدیل به شمسی کنم.
اما مشکل من در نوع داده هست که به صورت رشته‌ای است. یعنی ورودی، یک تاریخ شمسی به شکل String هست و خروجی هم باید String باشه.
با استفاده از PersianCalendar نتونستم این کار رو انجام بدم

parvizwpf
دوشنبه 02 شهریور 1394, 09:18 صبح
https://msdn.microsoft.com/en-us/library/system.globalization.persiancalendar%28v=vs.110%29 .aspx
کاری نداره با یک تبدیل به میلادی و سپس بدست آوردن روز قبل و بعدش و دوباره به شمسی حل میشه

hamedjim
دوشنبه 02 شهریور 1394, 09:29 صبح
..یک تبدیل به میلادی
مشکل من دقیقا همینه. امکانش هست کامند تبدیل تاریخ شمسی (رشته ای) به میلادی رو بهم بگین؟

parvizwpf
دوشنبه 02 شهریور 1394, 09:45 صبح
PersianCalendar pc = new PersianCalendar();
var date= pc.ToDateTime(1394, 6, 2, 0, 0, 0, 0);

hp1361
دوشنبه 02 شهریور 1394, 15:01 عصر
سلام

اگر از کامپ.ننت های چون i18n (http://www.delphiarea.com/products/delphi-packages/i18n/)یا ShDate (http://www.farsicomponents.com/)استفاده کنی خودشون توابع اینچنینی رو دارند(و صدها تابع کاربردی دیگه)

موفق باشیم

hadisalahi2
دوشنبه 02 شهریور 1394, 17:57 عصر
خوب اینکه کار نداره
از تابع incday استفاده کنه
برای روز بعد عدد یک رو بزار و برای روز قبل عدد منفی یک

در ضمن این کامپوننت در بعضی موارد اشتباه محاسباتی داره

fahimi
پنج شنبه 05 شهریور 1394, 22:13 عصر
یک نگاهی به لینک داشته باشید مفید است.
http://barnamenevis.org/archive/index.php/t-118289.html

دلفــي
شنبه 07 شهریور 1394, 10:27 صبح
چیزی که به ذهن خودم رسیده بود اینه که تاریخ شمسی رو به میلادی تبدیل کنم و بعد با استفاده از تابع IncDay یک روز افزایش بدم و مجددا اونو تبدیل به شمسی کنم.
اما مشکل من در نوع داده هست که به صورت رشته‌ای است. یعنی ورودی، یک تاریخ شمسی به شکل String هست و خروجی هم باید String باشه.
با استفاده از PersianCalendar نتونستم این کار رو انجام بدم


تبديل رشته به تاريخ و بالعكس :

function DateToStr(const DateTime: TDateTime): string;
function StrToDate(const S: string): TDateTime;


مي توني از اينجا هم كمك بگيري :
كامپوننت تاريخ براي دلفي 7 و XE5 همراه با Demo
(http://barnamenevis.org/showthread.php?502132-%D9%83%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE-%D8%A8%D8%B1%D8%A7%D9%8A-%D8%AF%D9%84%D9%81%D9%8A-7-%D9%88-XE5-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%A8%D8%A7-Demo)

hadisalahi2
شنبه 07 شهریور 1394, 11:33 صبح
بارها گفتم Xcalndar در بعضی تاریخ ها ارور میده و اشتباه محاسباتی داره
به هیچ عنوان از اون برای محاسبات قیق تاریخ استفاده نکنید
اما برای استفاده معمولی خیلی خوبه

بسیاری از کامپوننت هایی که دیدم در محاسبه تاریخ مشکل دارند
آیا این کامپوننت شما دقیقه در تبدیل تاریخ ها و یا افزودن و کاهش از یک تاریخ خاص؟

دلفــي
شنبه 07 شهریور 1394, 11:35 صبح
بارها گفتم Xcalndar در بعضی تاریخ ها ارور میده و اشتباه محاسباتی داره
به هیچ عنوان از اون برای محاسبات قیق تاریخ استفاده نکنید
اما برای استفاده معمولی خیلی خوبه

بسیاری از کامپوننت هایی که دیدم در محاسبه تاریخ مشکل دارند
آیا این کامپوننت شما دقیقه در تبدیل تاریخ ها و یا افزودن و کاهش از یک تاریخ خاص؟
من تا حالا ايرادي نديدم