به نام خدا
مقدمه
مشکل تاریخ و استفاده از گاه شماری فارسی در برنامهها و نرمافزارهایی که باید تقویم هجری شمسی را پشتیبانی کنند از دیرباز متوجه برنامه نویسان ایرانی بودهاست.

راه حلی که در زیر توضیح داده میشود برای استفاده در زبان برنامه نویسی VB میباشد.(البته میتوان در زبانهای دیگر برنامه نویسی هم استفاده کرد. به شرط اینکه آن زبان برنامه نویسی استفاده از Activex dll را پشتیبانی کند.)

متغیر از نوع تاریخ (Date)

در VB برای استفاده از تاریخ شما باید یک متغیر بعنوان تاریخ(Date) تعریف کنید.
Dim myDate as Date
نوع Date در حقیقیت بصورت یک عدد 64 بیتی در نظر گرفته میشود.
(IEEE 64-bit (8-byte) floating-point)

اعداد سمت چپ ممیز نمایش دهنده تاریخ و اعداد سمت راست ممیز نشان دهنده ساعت میباشد
برای مثال

عدد 37873.0089236111 را در نظر بگیرد. سمت چپ ممیز یعنی عدد 37879 نشان دهنده تاریخ
یعنی 09/09/2003 میباشد و سمت راست یعنی عدد 0.008923611 نشان دهنده ساعت میباشد.
که معادل 12:12:51 ق.ظ میباشد

تاریخ 31/12/1899 میلادی معادل عدد 1.0 میباشد و ساعت 12:00 ق.ظ معادل عدد 0.0 و ساعت
12:00 ب.ظ معادل عدد 0.5 میباشد.

در حقیقت VB فقط عدد معادل برای تاریخ و زمان ذخیره میکند و هنگام نمایش این عدد را با توجه به
تنظیمات ویندوز یا Mask تعریف شده بصورت تاریخ نشان میدهد و هنگام دریافت تاریخ از کاربر آن را به صورت تاریخ دریافت کرده و بصورت معادل عددی آن ذخیره مینماید.

استفاده از متغیر String برای ذخیره تاریخ هجری شمسی کاری است که اغلب برنامه نویسان استفاده میکنند که به نظر کاری نادرست میآید چون باید برای محاسبات روی تاریخ یک سری توابع ایجاد گردد که این توابع بصورت توکار در VB موجود است و تلاش برای ایجاد این توابع باعت کند شدن و طولانی شدن مدت زمان پردازش خواهد شد گرچه در حچم کار کم ممکن است شاید وقت گیر نباشد ولی در حجم پردازشهای زیاد با از دست دادن زمان همراه خواهد بود.

پیشنهادی که میشود ارائه کرد استفاده از خود متغیر تاریخ (Date) است و ایجاد توابعی که بتواند تاریخ را بصورت شمسی نمایش دهد و بصورت عدد ذخیره سازد.
هر چند VB تاریخ هجری قمری را بصورت توکار حمایت میکند.
با قرار دادن شی Calndar برابر vbcalhijri شما میتوانید از تاریخ قمری استفاده کنید.

فایل PersianDateSupport.dll یک dll اکتیوایکس میباشد که برای استفاده از آن باید با ایجاد یک پروژه به قمست Refrancese رفته و با استفاده از دکمه Browse فایل مربوطه را پیدا کرده و به پروژه خود اضافه کنید.

این dll در حال حاضر دارای یک نوع کلاس به نام PersianDate میباشد و این کلاس دارای دو نوع متد به نام های PersianToDate و DateToPersian میباشد.
متد DateToPersian برای نمایش میباشد که از فرمتهای زیر برای نمایش پشتیبانی میکند.


1- yyyy/mm/dd à 1382/06/09
2- yyyy/m/d à 1382/6/9
3- yy/mm/dd à 82/06/09
4- yy/m/d à 82/6/9
5- dddd,d mmmm,yyyy à جمعه،9 شهریور،1382





و متد PersinToDate برای تبدیل تاریخ به عدد برای ذخیره میباشد.
و در حال حاضر فقط ار فرمت yyyy/mm/dd استفاده میکند.

نمونه برنامه زیر جهت آشنایی ارانه میگردد.



Dim PDC As New PersianDate
Dim mydate As Date
Dim mydate2 As Date

mydate = Now
Debug.Print PDC.DateToPersian(mydate)
Debug.Print PDC.DateToPersian(mydate + 10)
mydate2 = PDC.PersianToDate("1382/12/29")
Debug.Print DateDiff("d", mydate, mydate2)



حسن این روش این هست که شما با متغر date کار میکنید
همزمان به تاریخ میلادی و شمسی میتوانید کار کنید.
نمایش تاریخ به صورتی هست که میخواهید ببینید.
از توابع تو کار VB میتونید استفاده کنید.
این نسخه اول این DLL هست. اگر از این روش استفاده بشود و مورد استفبال قرار بگیرد حتما نسخههای بعدی با امکانات بیشتر ارانه خواهم کرد.

تو قسمت دلفی هم دیدم که دوستان هم از این روش برای تاریخ استفاده میکنند.
روشی هم که VB استفاده میکند شبیه این روش هست.

خرم و شاد باشید.
برای تماس با من
Linux_ir@yahoo.com