PDA

View Full Version : یک تجربه (در مورد تاریخ)



(امید)
یک شنبه 18 اسفند 1381, 10:25 صبح
سلام

اینو برا کسایی می نویسم که تازه می خوان کار برنامه نویسی رو شروع کنن.

برای کار با تاریخ دو راه کار دارین:

1- شما بصورت string تاریخ شمسی رو بگیرید و بعد از چک کردن درست ارقام ماه و روز و ... اونو با یه تابع تبدیل به میلادی کنید . از این به بعد برنامه در همه جا باید با این تاریخ میلادی کار کنه . فقط برای نمایش به کار بر باز اونو بر گردونید به شمسی که اونم string است . تابع تبدیل تاریخ رو من به نقل از برنامه نویس دات کام و نوشته آقای بابک یعقوبی تو همین بخش آوردم.
همه چیزش درسته حتی محاسبه سالهای کبیسه.(دست آقای یعقوبی درد نکنه)

2- اصلا چیزی یه نام date تعریف نکنید. شما مثلا تاریخ رو بصورت 18/12/1381
وارد می کنید . می تونید مثلا اونو تبدیل به عدد 13811218 بکنید و مقایسه ها رو به این صورت انجام بدید . تو این زمینه کارای دیگه ای هم می تونید انجام بدید

خوب حالا اگه می خوایید بدونید این دردسرا برا چیه می تونید این کد رو امتحان کنید.


var mydate:Tdatetime;
edit1.text:='1381/02/30';
mydate:=strtodate(edit1.text);
امید

newmohsen
دوشنبه 28 اردیبهشت 1383, 01:52 صبح
امید جان دستت درد نکنه ولی بگو اون p ها یی که آخر هر خط چیه؟

(امید)
دوشنبه 28 اردیبهشت 1383, 07:49 صبح
اون قدیما امکان نوشتن کد تو این صفحه نبود . برای اینکه سمی کالن نیاد اول همینطوری یه p گذاشتم اون آخر .اونا بی تقصیرن :wink:

ali_ravangard
دوشنبه 19 مرداد 1383, 10:23 صبح
امید جان دستت درد نکنه از پیشنهادت
اما در روش دوم این کار یک مشکل بزرگی که داره اینه که پنج روز از سال که ماه میلادی کمتر از شمسی هست مثل 31 اردیبهشت رو از دست می دیم یعنی در اون 5 روز برنامه error می ده :wink:

DelphiAssistant
دوشنبه 19 مرداد 1383, 12:26 عصر
یک کار جالبی هم که من اخیرا در برنامه‌هام میکنم نگهداری تاریخ و زمان بصورت یک عدد Integer در دیتابیس است.

برای تبدیل تاریخ بین فرمت TDateTime و Integer‌ دو تابع در یونیت DateUtils وجود دارد بنامهای DateTimeToUnix و UnixToDateTime .

در این حالت تاریخ و زمان در حقیقت با فرمت Unix TimeStamp نگهداری میشود. عدد حاصله نیز یک عدد صحیح است که زمان موردنظر بر اساس تعداد ثانیه‌های گذشته از 01/01/1970 میباشد.

به این ترتیب نگهداری تاریخ و انتقال و نگهداری آن در دیتابیس‌های مختلف بسیار آسان میشود.

برای نمایش تاریخ نیز کافی است یک فیلد Calculated به جدول مورد نظر اضافه کنید که عدد فوق را دریافت کرده و بصورت قابل فهم برای کاربر تبدیل کند.

موفق باشید.

Inprise
دوشنبه 19 مرداد 1383, 12:46 عصر
در این حالت تاریخ و زمان در حقیقت با فرمت Unix TimeStamp نگهداری میشود. عدد حاصله نیز یک عدد صحیح است که زمان موردنظر بر اساس تعداد ثانیه‌های گذشته از 01/01/1970 میباشد

خود لینوکس هم در سرویسهائی مثل Syslog یا Apache از همین ویژگی استفاده میکنه :)

مهندس
چهارشنبه 28 مرداد 1383, 12:01 عصر
سلام

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

به نظر من که با وجود این کامپوننت دیگه شایسته نیست آدم بخواد وقتشو روی تاریخ و این حرفا بگذرونه.
ShDAte که خودش تاریخ رو به میلادی در database میریزه و خلاص.......

بد میگم ؟ :wink:

Kambiz Delphi
جمعه 20 آذر 1383, 20:14 عصر
من برای این کار یک برنامه نوشته ام تمام کبیسه ها (اعم از میلادی و شمسی ) را درست محاسبه میکند آدرس بده بفرستم. :sunglass:

saeed_82
سه شنبه 08 دی 1383, 11:02 صبح
ایضا اینجانب یک کامپاننت نوشتم با تمام امکانات تبدیل تاریخ از شمسی به میلادی و بالعکس با محاسبه کبیسه ها و استخراج روزهای مختلف ماههای شمسی و تبدیل تاریخ در اشکال قابل فهم برای برخی اس کیو ال های خاص و .... بهمراه یک کامپاننت تقویم هجری شمسی ویژوال
4 سال پیش نوشتم و هنوز کوچکترین ایرادی در محاسبه آن ندیدم

Delphi Skyline
سه شنبه 13 بهمن 1383, 16:58 عصر
DelphiAssistant ایا شما با windows کار می کنید؟