05-10-12, 03:34 AM
كاتب الموضوع : FlyToAbd
بسم الله الرحمن الرحيمالاولى: في التاريخ الهجري يحصل انه دولة معينة تعتمد شهر معين اطول من الحساب الفلكي المعتمد في الدوت نت وعليه سيتوقف المبرمج امام هذه المشكلة (السبب من فرض يوم صحيح فلكيا هو لحاجة الامكانية AddDays اضافة ايام كثير للتاريخ مثلا 70 يوم فلكي يجد التاريخ الصحيح بعد الاضافة عليه ان يعتمد القيم الفلكية لعدد ايام الشهر)
الثانية: حجم البيانات 8 بايت ويعتبر كبير حيث اننا لانستخدمه بكامل مواصفاته فمثلا في كثير من الاحوال نحن نستخدمه للتاريخ وهو فيه مكان للوقت وبذلك لانستفاد من هذا الفراغ وكذلك حدود التاريخ الممكنة هي من 1/1/1 الى 31/12/9999 ونحن لا نستخدم الا جزء صغير من هذا المجال الواسع في الكثير من برامجنا
نلاحظ وجود انواع عديدة لتخزين الاعداد الصحيحة مثل Byte(1), Short(2), Integer(4), Long(8), Decimal(16)
وكذلك SByte و UShort و UInteger و ULong عدى انواع البيانات التي تمثل الاعداد الحقيقية
وكل واحدة بمدى معين وانت تختار ما يناسبك فلماذا لا نعمل نوع جديد للتاريخ بحيث يكون حجمه اقل ومداه اقل
كذلك يتقبل قيمة اليوم خاطئة لكي يمكن حل المشكلة الاولى ولنخسر الامكانية AddDays فقط عندما يكون عدد الايام لدينا غير صحيح ونضيف له امكانية التحويل (مع تصحيح الخطأ) لنوع التاريخ المستخدم لدينا للاستفادة من باقي الامكانيات
اعتقد انه اصبح المبرر قوي لعمل هذا الكائن
اسم الكائن DateRange مجال تاريخ واقصد به نوع تاريخ ولكن ضمن مجال ملحوظ وهو حوالي 170 سنة وتحدد انت البداية المطاوبة له فمثلا تجعل البداية 1920 فسوف يغطى لغاية 2090
حجم الكائن 2 بايت حيث سيكون اول خمس بتات لليوم وسيتقبل من 0 الى 31 والبتات الاحدى عشر ستكون لعدد الاشهر اي 2^11 يساوي 2048 شهرا ولو قسمنا على 12 شهر للسنة الواحدة سيكون الناتج اكثر من 170 سنة
الخصائص العامة:
Day هذه الخاصية لقراءة وكتابة قيمة اليوم
Month لقراءة وكتابة قيمة الشهر
Year لقراءة وكتابة قيمة السنة
الطرق العامة:
ToString لقراءة قيمة التاريخ على شكل نص
ToShort لقراءة قيمة التاريخ على شكل رقم من 2 بايت
ToDate لقراءة قيمة التاريخ على شكل نوع تاريخ عام مع تصحيح خطأ اليوم ان وجد
IsFalseDate يرجع True اذا كان مقدار اليوم غير صحيح مع فرض ان الشهر والسنة صحيحتان
المشروع بالمرفقات
http://vb4arb.com/vb/uploaded/18_01349393612.zip