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

استفاده سریع و آسان
تبدیل تاریخ میلادی به شمسی
استفاده از این ابزار بسیار ساده و راحت است. برای استفاده از این کلاس باید یک نوع از آن را ایجاد کنید. سازنده این کلاس تعدادی ورودی را قبول می کند. این ورودی می تواند تاریخ میلادی یا شمسی در فرمت های متنی یا عدد باشد.
برای تبدیل تاریخ میلادی به شمسی با فرمت عددی فقط کافی است که ورودی ها به سازنده کلاس ارسال شود:
procedure TfrmDemo.Button1Click(Sender: TObject);
var faDate:TFaDate;
begin
faDate:=TFaDate.CreateByGregorianDate(2008,4,15);
end
در این تکه کد یک متغیر از نوع کلاس TFaDate ایجاد کردیم. و سپس با فراخوانی تابع CreateByGregorianDate نمونه جدید از این کلاس را ایجاد میکنیم که همانطور که می بینید ورودی های آن تاریخ میلادی است.
پس از اینکه نمونه جدید ایجاد شد این کلاس تاریخ را به شمسی تبدیل می کند. برای استفاده از این تاریخ تبدیل شده راه های مختلفی وجود دارد که بعدا توضیح داده خواهد شد.
می خواهیم که تاریخ تبدیل شده را به صورت متنی در عنوان فرم داشته باشیم. پس از کد می توان استفاده کرد:
procedure TfrmDemo.Button1Click(Sender: TObject);
var
faDate:TFaDate;
begin
faDate:=TFaDate.CreateByGregorianDate(2008,4,15);
self.Caption:=faDate.ToDateString;
end;
در این مثال با فراخوانی متد ToDateString از نمونه ای که ایجاد کرده ایم تاریخ شمسی را به صورت متنی در عنوان فرم خواهیم داشت. تابع ToDateString که در کلاس TFaDate تعریف شده است خروجی از تاریخ شمسی از نوع رشته دارد.
برای دریافت جزئیات بیشتر از تاریخ تبدیل شده، تعداد تابع و ویژگی در نظر گرفته شده است که می توانید از آنها استفاده کنید. تمامی آنها بعدا به طور کامل توضیح داده می شود.
در این مثال قصد داریم تا نام ماهی که در آن قرار داریم و روز هفته را در عنوان فرم نمایش دهیم:
procedure TfrmDemo.Button1Click(Sender: TObject);
var faDate:TFaDate;
begin
faDate:=TFaDate.CreateByGregorianDate(2008,4,15);
self.Caption:=faDate.MonthName+ ' ' +faDate.DayName;
end;
همانطور که می بینید ویژگی MonthName نام ماه شمسی و DayName نام روز شمسی را برمیگرداند.
تبدیل تاریخ شمسی به میلادی
همانند روش قبلی در این تبدیل نیز باید یک نمونه از کلاس را با تاریخ شمسی ایجاد کنید. برای مثال:
procedure TfrmDemo.Button1Click(Sender: TObject);
var
faDate:TFaDate;
begin
faDate:=TFaDate.CreateByPersianDate(1387,6,6);
end;
همانطور که مشخص است در این تبدیل از تابع CreateByPersianDate استفاده شده که ورودی های آن تاریخ شمسی است.
برای دریافت تاریخ میلادی در فرمت استاندارد دلفی کافی است که از تابع ToGregorianDate استفاده کنید.
در اینجا تاریخ شمسی را به میلادی تبدیل می کنیم سپس آن را با استفاده توابع استاندارد دلفی به رشته تبدیل کرده و در عنوان فرم نمایش می دهیم:
procedure TfrmDemo.Button1Click(Sender: TObject);
var
faDate:TFaDate;
enDate:TDateTime;
begin
faDate:=TFaDate.CreateByPersianDate(1387,6,6);
enDate:=fadate.ToGregorianDate();
self.Caption:=DateToStr(enDate);
end;
همانطور که مشاده کردید تاریخ شمسی به راحتی به تاریخ میلادی تبدیل شد.
در ضمیمه این مقاله برنامه demo گنجانده شده است که حاوی مثال هایی از نحوه استفاده از این کلاس در شرایط مختلف است. برای آشنایی صحیح از تمام امکانات این ابزار حتما از این demo استفاده کنید.
توضیح امکانات این کلاس
این کلاس حاوی تعدادی متد و تعدادی ویژگی است که در ادامه خواهید خواند.
سازندگان کلاس
CreateByGregorianDate(gregorianDate: TDateTime): TFaDate;
Create(gregorianDate: TDateTime);
این دو متد که عملکرد یکسانی دارند جهت ایجاد یک نمونه از کلاس با استفاده از تاریخ میلادی ورودی مورد استفاده قرار می گیرند. اولی یعنی CreateByGregorianDate یک "تابع کلاس" است و دومی سازنده استاندارد دلفی برای کلاس است.
CreateByGregorianDate(gregorianYear, gregorianMonth,
gregorianDay: word): TFaDate;
این تابع کلاس برای ایجاد یک نمونه از کلاس TFaDate با استفاده از تاریخ میلادی مورد استفاده است. همانطور که مشخص است تاریخ میلادی از طریق ورودی از نوع عدد ارسال می شود.
CreateByPersianDate(persianDate: string): TFaDate;
Create(persianDate: string);
این دو متد که عملکرد یکسانی دارند جهت ایجاد یک نمونه از کلاس با استفاده از تاریخ شمسی ورودی مورد استفاده قرار می گیرند. اولی یعنی CreateByPersianDate یک "تابع کلاس" است و دومی سازنده استاندارد دلفی برای کلاس است.
CreateByPersianDate(persianYear, persianMonth, persianDay:
word): TFaDate;
این تابع کلاس برای ایجاد یک نمونه از کلاس با استفاده از تاریخ شمسی مورد استفاده است. همانطور که مشخص است تاریخ شمسی از طریق ورودی از نوع عدد ارسال می شود.
متد ها و توابع
ToString: string;
ToString(format: string): string;
خروجی این دو تابع، تاریخ شمسی همراه با زمان در فرمت رشته است. تابع اولی بدون هیچ پارامتری است و تابع دوم فرمت رشته را نیز قبول میکند. رشته ورودی در قالب استاندارد فرمت بندی تاریخ در دلفی باید باشد. اطلاعات بیشتر در این مورد را می توانید در راهنمای دلفی با توضیح کامل پیدا کنید.
مثال:
procedure TfrmDemo.btnFormatDateTimeClick(Sender: TObject);
var
faDate:TFaDate;
begin
faDate:=TFaDate.Create(Now);
lblFormatDateTime1.Caption:=faDate.ToString;
lblFormatDateTime2.Caption:=faDate.ToString('dddd dd mmmm yyyy HH:MM');
end;
ToDateString: string;
این تابع بر خلاف تابع ToString فقط تاریخ شمسی را بر می گرداند:
procedure TfrmDemo.btnFormatDateTimeClick(Sender: TObject);
var
faDate:TFaDate;
begin
faDate:=TFaDate.Create(Now);
lblFormatDateTime1.Caption:=faDate.ToDateString;
end;
ToTimeString: string;
این تابع فقط زمان را بر می گرداند.
نکته: اطلاعات زمان فقط زمانی مورد پردازش قرار خواهند گرفت در ایجاد کلاس TFaDate ورودی سازنده را از نوع TDateTime بدهید. در غیر این صورت مقدار برگشتی تابع ToTimeString مقادیر صفر خواهند بود.
در مثال زیر ورودی سازنده تابع Now است که مقداری از نوع TDateTime بر میگرداند:
procedure TfrmDemo.btnFormatDateTimeClick(Sender: TObject);
var
faDate:TFaDate;
begin
faDate:=TFaDate.Create(Now);
lblFormatDateTime1.Caption:=faDate.ToTimeString;
end;
-
تابع ToGregorianDate برای تبدیل تاریخ به میلادی
ToGregorianDate: TDateTime;
این تابع تاریخ میلادی معادل را بر می گرداند. یعنی در حقیقت تاریخ شمسی کلاس را به میلادی تبدیل کرده و بر می گرداند. خروجی این تابع نوع استاندارد دلفی TDateTime است.
در مثال زیر ابتدا کلاس با استفاده از تاریخ شمسی ایجاد می شود. سپس تاریخ میلادی معادل بدست می آید.
procedure TfrmDemo.btnFaGoClick(Sender: TObject);
var
faDate:TFaDate;
enDate:TDateTime;
begin
faDate:=TFaDate.CreateByPersianDate(txtYearFa.value,
txtMonthFa.value,txtDayFa.value);
enDate:=faDate.ToGregorianDate;
lblGregorianDate.Caption:=DateToStr(enDate);
end;
-
تابع GetGregorianDateString
GetGregorianDateString: string;
تابع میلادی معادل را به صورت رشته بر می گرداند.
procedure TfrmDemo.btnFaGoClick(Sender: TObject);
var
faDate:TFaDate;
enDate:TDateTime;
begin
faDate:=TFaDate.CreateByPersianDate(txtYearFa.value,
txtMonthFa.value,txtDayFa.value);
lblGregorianDate.Caption:=faDate.GetGregorianDateString;
end;
GetDayOfWeek: Word;
این تابع روز از هفته را بر می گرداند.
GetDayOfYear: Word;
این تابع روز از سال را برمی گرداند.
GetDaysInMonth: word;
این تابع تعداد روزها را در ماه جاری بر می گرداند.
ویژگی ها
ویژگی های این کلاس را در یکجا توضیح می دهم:
| روز |
Day : word |
| ماه |
Month : word |
| سال |
Year : word |
| ساعت |
Hour : word |
| دقیقه |
Minute : word |
| ثانیه |
Second : word |
| میلی ثانیه |
MilliSecond : word |
| نام روز جاری از هفته (برای مثال شنبه) |
DayName : string |
| نام ماه جاری (برای مثال مرداد) |
MonthName : string |
| نام مخفف برای روز جاری ( مثلا برای "سه شنبه" مقدار "سه" است) |
DaySmallName : string |
مشخص می کند که کلاس، زمان و ساعت را دارد یا نه.
وجود این مقدار به سازنده استفاده شده بستگی دارد که قبلا توضیح داده شد. |
HasTime : boolean |