منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : التعامل مع التواريخ الهجريه
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الســلام عليكم ورحمة الله وبركاته 

عندي أتسفسار بخصوص التاريخ والتعامل معها بشكل عام أتمنى من أهل الخبـره أيجاد حل ينهي معاناتي مع هذه المشكله 

عند وضع أداة التاريخ في الفورم وأعدات الجهاز على التاريخ الهجري فالأداه تأخذ التاريخ الهجري 
عند حفظ التاريخ يتم حفظ التاريخ هجري بشكل عادي وعند أظهاراه يظهر بشكل عادي 
ولكن السؤال هل  إذا وضعت حساب لتاريخ أما عدد أيام معينه أو مواعيد هل يتقدم يوم أو يتأخر  من الأيام شي 

وهل يوجد طريقه بحيث أنه يظهر داخل قاعدة البيانات بشكل تاريخ هجري ..؟
لعرض التاريخ الهجري في اداه نص 
PHP كود :
Dim dtn As DateTime Format(DateTime.Now)
 
Dim ci As New System.Globalization.CultureInfo("ar-SA")
 
TxtDate.Text dtn.ToString("dd/MM/yyyy هـ"ci

ثم احفظ النص
في الغالب طريقتك في ادراج التاريخ في جمل الاستعلام ليست بالشكل الصحيح

اذا استخدمت البارامتر Parameters.AddWithValue لإدراح التاريخ فلن تجد هذه المشكلة
(11-10-16, 03:38 AM)tryold كتب : [ -> ]لعرض التاريخ الهجري في اداه نص 
PHP كود :
Dim dtn As DateTime Format(DateTime.Now)
 
Dim ci As New System.Globalization.CultureInfo("ar-SA")
 
TxtDate.Text dtn.ToString("dd/MM/yyyy هـ"ci

ثم احفظ النص

إذا حفظت التاريخ من نص راح تواجهك مشكله واحد يكتب التاريخ 1435/1/11 وواحد يكتب 11\12\1438 
فماراح تقدر تضبط التاريخ بالأضافه ما راح تقدر تستفيد منه إذا بتحسب عدد أيام معينه أو مواعيد

(11-10-16, 03:55 AM)ممدوح كتب : [ -> ]في الغالب طريقتك في ادراج التاريخ في جمل الاستعلام ليست بالشكل الصحيح

اذا استخدمت البارامتر Parameters.AddWithValue لإدراح التاريخ فلن تجد هذه المشكلة

صدقت نجح معي الأمر ولكن الخوف إذا عرضت فيه الأداه أو أردت حساب زمن معين هل تأتي بشكل دقيق ..؟
لا تستطيع أن تسميها نتائج دقيقة مع التاريخ الهجري لأن التاريخ الهجري يعتمد على رؤية القمر

إذا كنت تعتمد على (تقويم أم القرى) (الرسمي في السعودية) فأكيد النتائج تكون دقيقة بسبب اعتماده التواريخ لسنوات قادمة (اعتقد المعتمد الرسمي لغاية 1450 فقط)

أما اعتماد نوع (التقويم الهجري) الموجود في نظام التشغيل ويندوز من ميكروسوفت) فهو يعتمد على معادلة حسابية خاصة بميكروسوفت
قد لا تتطابق نتائجها مع نتائج مع معادلات أخرى من اجتهادات مبرمجين آخرين

بامكان اي شخص عمل معادلة يجتهد فيها بان اقرب ما يكون للواقع اذا علم ان الشهر القمر يساوي 29.530588 يوما
فيكون الشهر القمري بشكل افتراضي 29 يوما وعند جمع الكسر يجبر بيوم لأحد الأشهر ليصبح 30 يوما تماما مثل اسلوب السنة الكبيسة في التقويم الشمسي
ولكن مسألة جبر الكسر هنا ليست بنفس التقييم في السنة الشمسية اي يتم جبر الكسر لعدة اشهر وليس لعدة سنوات كما السنة الشمسية
اعجبني سرد الاخ ممدوح في التوضيح لك  ،  لذلك من المحاذير التي افرضها على نفسي و برامجي هي عدم حفظ اي تاريخ هجري بقاعدة البيانات  (ولو على جثتي) هههههههه  السبب نسبة الخطأ فيها كبيره  و تسبب وجع اكبر بالمعالجه  لاحقاً  لذلك  ماذا تفعل في هذه الحالة  : اولاً  اجعل جميع الكواليس في البرنامج  تتعامل مع التاريخ الميلادي  في العمليات الحسابيه  في الحفظ  في المعالجة  ، و اعرض  للمستخدم  حسب رغبته اما بتاريخ ام القرى ام بالميلادي  فقط  عملية تحويل  لا اكثر و لا اقل ، لكن اساس التاريخ يكون ميلادي  ،  اما اذا اردت اجراء بعض العمليات على التقويم الميلادي  فما عليك الا تحويل التاريخ الى تقويم ام القرى ثم اجراء بعض الحسابات  مثل عدد الايام في الشهر ،  عدد ايام السنة  ، كم متبقي في السنة الحالية ، عينة من بعض الاكواد التي كتبتها سابقا  : 


كود :
    ''' <summary>
    ''' جلب عدد الايام بداية السنة الى التاريخ المحدد(أم القرى)
    ''' </summary>
    ''' <param name="TheDayInYear">التاريخ المحدد</param>
    ''' <returns>رقمي</returns>
    ''' <remarks>عدد الايام</remarks>
    Public Function howManyDaysFromStartYearUmAlQura(ByVal TheDayInYear As DateTime) As Integer
        Dim umq As System.Globalization.UmAlQuraCalendar = New System.Globalization.UmAlQuraCalendar
        Dim FirstDateOfYear As New DateTime(umq.GetYear(TheDayInYear), 1, 1, umq)
        Dim daysFromStartYear = (New DateTime(TheDayInYear.Year, TheDayInYear.Month, TheDayInYear.Day) - FirstDateOfYear).TotalDays
        If daysFromStartYear > 0 Then daysFromStartYear += 1
        Return daysFromStartYear
    End Function

    ''' <summary>
    ''' عدد الايام في الاشهر الهجرية
    ''' </summary>
    ''' <param name="Par_Year"></param>
    ''' <param name="Par_Month"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function howManyDaysInMonthUmAlQura(ByVal Par_Year As Integer, ByVal Par_Month As Byte) As Integer
        Dim umq As System.Globalization.UmAlQuraCalendar = New System.Globalization.UmAlQuraCalendar
        Return umq.GetDaysInMonth(Par_Year, Par_Month)
    End Function

    ''' <summary>
    ''' عدد الايام في الاشهر الهجرية
    ''' </summary>
    ''' <param name="Par_date"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function howManyDaysInMonthUmAlQura(ByVal Par_date As Date) As Integer
        Dim umq As System.Globalization.UmAlQuraCalendar = New System.Globalization.UmAlQuraCalendar
        Return umq.GetDaysInMonth(umq.GetYear(Par_date), umq.GetMonth(Par_date))
    End Function




    Public Function GetStartDateInMonthUmAlQura(ByVal Par_Year As Integer, ByVal Par_Month As Byte) As DateTime
        Dim umq As System.Globalization.UmAlQuraCalendar = New System.Globalization.UmAlQuraCalendar
        Dim firstDayOfMonth = New DateTime(Par_Year, Par_Month, 1, umq)
        Return firstDayOfMonth
    End Function

    Public Function GetLastDateInMonthUmAlQura(ByVal Par_Year As Integer, ByVal Par_Month As Byte) As DateTime
        Dim umq As System.Globalization.UmAlQuraCalendar = New System.Globalization.UmAlQuraCalendar
        Dim lastDayOfMonth = New DateTime(Par_Year, Par_Month, umq.GetDaysInMonth(Par_Year, Par_Month), umq)
        Return lastDayOfMonth
    End Function
يعطيكم العافيه ما قصرتو