نمایش نتایج 1 تا 22 از 22

نام تاپیک: مشکل در تبدیل تاریخ با استفاده از EncodeDate و یا DecodeDate

  1. #1
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    Earth
    پست
    200

    مشکل در تبدیل تاریخ با استفاده از EncodeDate و یا DecodeDate

    با سلام به همه دوستان

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

    من در یک برنامه بانک اطلاعاتی از تاریخ فارسی استفاده
    می کنم و تبدیل تاریخ به خوبی انجام می شود ولی زمانی که
    از تابع EncodeDate ویا DecodeDate ویاحتی
    ( ' Dt:=Strtodate( ' 1381/4/31 استفاده می کنم دلفی یک Error
    مبنی بر غیر معتبر بودن تاریخ تولید می کند.
    زیرا ماه چهارم میلادی 31 روز ندارد
    البته تاریخ سیستم به صورت YYYY/MM/DD و در WinMe است و
    تارخ سیستم هم به درستی 1381/4/31 را نمایش میدهد.
    با توجه به اینکه تمام گزارشات و محاسبات باید بر اساس تاریخ
    انجام شود نمی دانم که باید چه کار کنم چون اگر تاریخ را به صورت
    String در بانک ذخیره کنم دیگر نمیتوانم بین آنها مقایسه ویا محاسبه ای
    انجام دهم.
    لطفا مرا راهنمایی کنید. :o
    متشکرم.

    دوست عزیز: عنوان سوال میبایست بیانگر محتوی سوال و گویا باشد. ایندفعه رو من براتون اصلاح کردم، اما دفع بعد ممکنه پست تون حذف بشه.

    مدیر سایت.

  2. #2
    کاربر دائمی آواتار DataMaster
    تاریخ عضویت
    تیر 1382
    محل زندگی
    مشهد الرضا
    پست
    634
    بهت توصیه میکنم برای دریافت تاریخ از کامپوننت FALAD استفاده کنی و بعدا اون رو به هر مدلی که می خوای ذخیره کن
    در ضمن اگه تاریخ رو به صورت عددی ذخیره کنی فکر نکنم مشکلی داشته باشی چون اکثر عملیات مورد نظر رو می تونی رو اون انجام بدی من خودم این مدلی کار میکنم

  3. #3
    چون اگر تاریخ را به صورت
    String در بانک ذخیره کنم دیگر نمیتوانم بین آنها مقایسه ویا محاسبه ای
    انجام دهم.
    اشتباه می فرمایید...دلفی میتونه تاریخ های 10/02/1383 را با 11/02/1383 مقایسه کنه.... و هر دو هم از نوع string باشند...من دارم مدتهاست که از این روش استفاده میکنم و جواب میگیرم.

  4. #4
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    Earth
    پست
    200
    أخه مشکل اصلی من اینه که نمیتونم
    Encodedate ,Decodedate
    رو بکار ببرم :?

  5. #5
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1383
    محل زندگی
    Earth
    پست
    200
    راستی آقای DataMaster این Balad چیه و کجاست ؟

  6. #6
    خوب می تونی سورس اونها رو پیدا کنی

    و برای خودت یه Encodedate ,Decodedate دیگه بنویسی :lol:

  7. #7
    أخه مشکل اصلی من اینه که نمیتونم
    Encodedate ,Decodedate
    رو بکار ببرم
    خوب معلومه که نمیتونی اخه رنج(بازه) تاریخ ماههای اونها با ما فرق می کنه مثلا همونجوری که میدونی نمیتونی برای ماه اردیبهشت عدد 31 را وارد کنی..این توابع تا زمانی که توی اون رنج (میلادی) باشن براحتی تاریخها را decode و encode می کنند. پس از این ها نمیتونی برای تاریخهای شمسی استفاده کنی راه حلش هم اینه که
    خوب می تونی سورس اونها رو پیدا کنی

    و برای خودت یه Encodedate ,Decodedate دیگه بنویسی
    _________________
    البته اگه این کار را بکنی که معرکه است :wink:

  8. #8
    راستی آقای DataMaster این Balad چیه و کجاست ؟
    در ضمن Falad هست و نه Balad ..فکر کنم توابع تاریخ آقای ربیعی هم ساده است و هم کارا فکر کنم اسمش Hredate باشه...یه جستجو توی تاپیک های قبلی بکنی حتما پیدا می کنی :wink:

  9. #9
    از کامپوننتهای جناب آقای رحیمی فراهانی می توانید استفاده کنید که برای کد کردن و از کد خارج کردن هم تابع دارند. قیمت آن هم چندان زیاد نیست فکر می کنم ارزشش را داشته باشد.
    www.farsicomponents.com
    موفق باشید.

  10. #10
    نقل قول نوشته شده توسط Mohammad S
    از کامپوننتهای جناب آقای رحیمی فراهانی می توانید استفاده کنید که برای کد کردن و از کد خارج کردن هم تابع دارند. قیمت آن هم چندان زیاد نیست فکر می کنم ارزشش را داشته باشد.
    www.farsicomponents.com
    موفق باشید.
    به این میگن یه تبلیغ رایگان برای یه سایت پول در آر... :P
    فکر کنم توابع آقای خجسته هم یه همچین کارهایی میکنن..تاریخها را بصورت میلادی توی بانک ذخیره میکنه..جالبه...در ضمن اجازه وارد کردن تاریخ غیر مجاز را هم نمیده...مجانی هم هست :wink:

  11. #11
    فکر کنم توابع آقای خجسته هم یه همچین کارهایی میکنن..تاریخها را بصورت میلادی توی بانک ذخیره میکنه..جالبه...در ضمن اجازه وارد کردن تاریخ غیر مجاز را هم نمیده...مجانی هم هست
    چرا آدرس نمی دهید همه استفاده کنند؟ :?:

  12. #12
    به نظر این unit که آدرسش تو زیر اومده خیلی خوب کار می کنه.

    من خودم امتحانش کردم. شما هم امتحانش کنین.

    در ضمن می تونه هم با TDatetime کار کنه هم با string.

    http://www.geocities.com/salarsoftxp.../farsidate.zip

    یا برای دیدن توضیح کامپوننت به آدرس زیر برین:
    http://www.geocities.com/salarsoftxp..._downloads.htm

  13. #13
    جناب سالار
    لینک شما کار نمی کنه لطفا بررسی کنید :P

  14. #14
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    پست
    854
    همین کامپوننت آقای فراهانی خدا عمرش بده خیلی با حاله
    من وقتی به فرمهای می رسیدم که تاریخ رو باید داخلش بود سر کد نوشتن عزا میگرفتم حالا فقط با shdate یک کلیک کافیه


    تبلغ یک کلیک برای تاریخ با SHDATE

    در ضمن یونیت آقای خجسته هم تو سایتشون www.delphiarea.com قرار داره

    خوش باشید

  15. #15
    به نظر این unit که آدرسش تو زیر اومده خیلی خوب کار می کنه.

    من خودم امتحانش کردم. شما هم امتحانش کنین.

    در ضمن می تونه هم با TDatetime کار کنه هم با string.
    سالار عزیز..اشتباه بزرگی کردین عزیزم..شما اومدین همون روالی را که برای استخراج تاریخ میلادی از یک عدد هست را برای تاریخ شمسی هم ادامه دادین..اشکال اینجاست که معادل تاریخ مثلا اردیبهشت ما که 31 روزه هست توی میلادی 28 روزه است..بنابراین وقتی تاریخ 29/02/1382 را بهش میدین اون را 1/3/1382 بهتون بر میگردونه و از این قبیل مشکلات...برای رفع اشکالش هم باید یکی روال Encode و Decode کردن را برای فارسی بنویسی و دیگه این که اون عدد

      DateDelta = 693594;

    را برای فارسی محاسبه کنی ...تا جوابت درست از آب در بیاد...

  16. #16
    شما اومدین همون روالی را که برای استخراج تاریخ میلادی از یک عدد هست را برای تاریخ شمسی هم ادامه دادین
    من حرف شما رو قبول دارم.

    ولی باید بگم که در نحوه استفاده از این تابع ها باید ترتیب رعایت بشه تا درست کار کنن.
    یعنی باید قبل از هر کاری با استفاده از تابع MiladyToShamsi تاریخ میلادی رو به تاریخ شمسی تبدیل کنید. بعد از اون می شه از تابع های FarEncodeDate و FarDecodeDate استفاده کرد.

    اگر از تابع MiladyToShamsi استفاده نکنید حتما جواب غلط خواهد.

    یه بار هم با توجه به گفته های من عمل کنید اگر نشد حق با شما است. :flower:

    و در مورد آخری یعنیDateDelta باید بگم این ثابت در یونیت SysUtils تعریف شده و نیازی به تعریف مجدد من نبود.

  17. #17
    ببین جناب سالار...من یه button و یک label روی فرم گذاشتم...رویداد زیر را برای دکمه نوشتم...اما تاریخ امروز که 13 خرداد است را 16 خرداد بدست می آره ....اگه کد ی که من نوشتم اشتباهه..لطف کنید و صحیحش را همینجا بنویسید..
    ممنون میشم
    procedure TForm1.Button1Click(Sender: TObject);
    var f1:tdatetime;
    FY,FM,FD:word;
    begin
    f1:=miladytoshamsi(now);
    fardecodedate(f1,FY,FM,FD);
    label1.Caption:=datetostr(Farencodedate&#4 0;Fy,Fm,Fd));
    end;

  18. #18
    از کامپوننتهای جناب آقای رحیمی فراهانی می توانید استفاده کنید که برای کد کردن و از کد خارج کردن هم تابع دارند. قیمت آن هم چندان زیاد نیست فکر می کنم ارزشش را داشته باشد.
    www.farsicomponents.com
    موفق باشید.
    همین کامپوننت آقای فراهانی خدا عمرش بده خیلی با حاله
    من وقتی به فرمهای می رسیدم که تاریخ رو باید داخلش بود سر کد نوشتن عزا میگرفتم حالا فقط با shdate یک کلیک کافیه

    تبلغ یک کلیک برای تاریخ با SHDATE
    متشکرم. خوشحالم که برای شما کارایی داشته و اینطور نظر دارید.

  19. #19
    متشکرم. خوشحالم که برای شما کارایی داشته و اینطور نظر دارید.
    می گم جناب فراهانی حالا که اینطور شد، برنامه با سورس را مجانی به ما نمی دهید؟ :mrgreen: باز هم تبلیغ می کنیم ها :twisted:

  20. #20
    ببینید آقای کیمیا... در مورد datetostr حق رو من به شما می دم. ولی...

    باید بگم که... تابع datetostr با تاریخ میلادی کار می کنه و طول ماه های میلادی با ماه های شمسی فرق می کنه.
    اگر کامل دقت کرده بودین می دیدین که من در تابع های Farencodedate و fardecodedate طول ماه ها رو به تاریخ شمسی تغییر دادم و از ثابت FarMonthDays استفاده کردم.
    به همین دلیل شما نمی توانید از datetostr که از چیدمان تاریخ میلادی استفاده می کنه , استفاده کنید.

    من قبلا به تبدیل تاریخ به صورت رشته فکر کرده بودم و می دانشتم که با datetostr مشکل ایجاد میشه.
    به همین خاطر به جای تابع datetostr تابع MiladyToShamsiStr رو گذاشتم.
    حتی برای جدا کردن سال , ماه و روز به صورت عدد هم تابع MiladyToShamsiInt رو گذاشتم.

    توصیه می کنم از این کد استفاده کنین:
    label1.Caption:=MiladyToShamsistr(now)  ;


    از حسن توجه شما متشکرم. :) :flower:

  21. #21
    سلام
    اختلاف عددی تاریخ شمسی و میلادی 7749 روز است-برای تبدیل شمسی به هجری از کد زیر استفده کنید.


    function TForm1.ShamsiToHijri(y,m,d: word):TDate;
    const
    sumdays:array[0..11] of word=
    (0,31,62,93,124,155,186,216,246,276,306,336&#4 1;;
    begin
    result:= ((y*365)+ sumdays[m-1]+ d + ((y div 4)+1));
    end;

    و نحوه فراخوانی آن



    var
    dt: TDATE;
    begin
    dt:= ShamsiToHijri(83,3,3)+7749;
    Edit1.Text:= DateToStr(dt);
    end;

  22. #22
    ممنون از راهنمایی تون

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •