توضیح :
در این برنامه تاریخ و ساعت از سیستم خوانده می شود و به صورت شمسی برروی فرم نمایش داده می شود. برای این منظور کلاسی به نام PCalendar ساخته ایم که دارای متدهایی برای کار با تاریخ است. به یکی از این توابع که برای کم کردن دو زمان از همدیگر نوشته شده می پردازیم:
public PDate SubDate(string pdate1, string pdate2) { HijriCalendar pc = new HijriCalendar(); DateTime d1, d2; TimeSpan ts = new TimeSpan(); PDate pd1; PDate pd2; PDate pdout; pd1.year = int.Parse(pdate1.Substring(0, 4));//1386/12/22 pd1.month = int.Parse(pdate1.Substring(5, 2)); pd1.day = int.Parse(pdate1.Substring(8, 2)); pd2.year = int.Parse(pdate2.Substring(0, 4)); pd2.month = int.Parse(pdate2.Substring(5, 2)); pd2.day = int.Parse(pdate2.Substring(8, 2)); d1 = pc.ToDateTime(pd1.year, pd1.month, pd1.day, 0, 0, 0, 0, 0); d2 = pc.ToDateTime(pd2.year, pd2.month, pd2.day, 0, 0, 0, 0, 0); ts = d1 - d2; pdout.year = d1.Year - d2.Year; pdout.month = pdout.year * 12 + (d1.Month - d2.Month); pdout.day = ts.Days; return pdout; }
این تابع دو مقدار string که در حقیقت دو تاریخ هجری هستند را گرفته و یک شیء از نوع PDate خروجی می دهد. PDate یک ساختمان به شکل زیر است:
public struct PDate { public int year; public int month; public int day; }
روال تابع بدین صورت است که کاراکتر اول تا چهارم را که سال است در خاصیت سال شیء pd قرار می دهد. برای ماه و روز نیز چنین عملی تکرار می شود. در واقع ما با این کار یک رشته را به تاریخ تبدیل می کنیم.
حال با استفاده از متد ToDateTime از کلاس HijriCalender تاریخ هجری را به تاریخ میلادی تبدیل می کنیم.
اکنون با داشتن این دو تاریخ می توانیم اختلاف آن ها را که از نوع کلاس TimeSpan است بدست بیاوریم. این مقدار را در ts ذخیره می کنیم. در انتها مقدار بدست امده را به عنوان خروجی تابع معرفی می کنیم. توضیحات بقیه توابع در خود سورس کد موجود می باشد.