خوارزمية : التحويل بين التاريخ الميلادي والتاريخ الهجري
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في هذا الموضوع ساشرح ان شاء الله آليه التحويل بين التاريخ الميلادي والتاريخ الهجري
قبل الدخول في تفاصيل التحويل علينا معرفة بعض الامور :
في البداية ما حدا يسالني عن الارقام التي دخلت في التحويل لاني شخصيا لا اعرف كيف جاءت
أولا:تحويل التاريخ الميلادي إلى هجري...
تتم عملية التحويل هنا على مرحلتين:
هنا ايضا يتم تقسيم آلية التحويل الى قسمين حسب نوع التقويم الميلادي (يولياني ام غريغوري)
نختبر اذا كان التقويم الميلادي غريغوري ام لا
قلنا مسبقا ان التاريخ الميلادي يكون غريغوري اذا كانالتاريخ الميلادي بعد 15/10/1582م
دعونا نحلل شرط التقويم الغريغوري ..ليكون التقويم غريغوي يجب ان تتحقق احد الشروط التالية:
رمز برمجي:
Structure xDate
Dim Day As Integer
Dim Month As Integer
Dim Year As Integer
End Structure
Dim mDate As xDate
Dim JD As Integer
رمز برمجي:
mDate.Day = Int(TextBox1.Text)
mDate.Month = Int(TextBox2.Text)
mDate.Year = Int(TextBox3.Text)
وكما اسلفت هناك الية للتعامل مع الغريغوي والية اخرى للتعامل مع اليولياني:
وفي المرحلة التالية نقوم بتحويل التاريخ الميلادي الى اليولياني
رمز برمجي:
If ((mDate.Year > 1582) Or ((mDate.Year = 1582) And (mDate.Month > 10)) Or ((mDate.Year = 1582) And (mDate.Month = 10) And (mDate.Day > 14))) Then
JD = Int((1461 * (mDate.Year + 4800 + Int((mDate.Month - 14) / 12))) / 4)
JD = JD + Int((365.5 * (mDate.Month - 2 - 12 * (Int((mDate.Month - 14) / 12)))) / 12)
JD = JD - Int((3 * (Int((mDate.Year + 4900 + Int((mDate.Month - 14) / 12)) / 100))) / 4)
JD = JD + mDate.Day - 32075
Else
JD = 365.5 * mDate.Year
JD = JD - Int((7 * (mDate.Year + 5001 + Int((mDate.Month - 9) / 7))) / 4)
JD = JD + Int((275 * mDate.Month) / 9) + mDate.Day + 1729777
End If
والان نقوم بتحويل التاريخ البولياني الى هجري وقم تم استخدام ارقام (لا اعلم من اين اتت)
رمز برمجي:
Dim L, N, J As Integer
L = JD - 1948440 + 10632
N = Int((L - 1) / 10631)
L = L - (10631 * N) + 354
J = (Int((10985 - L) / 5316)) * (Int((50 * L) / 17719))
J = J + (Int(L / 5670)) * (Int((43 * L) / 15238))
L = L - (Int((30 - J) / 15)) * (Int((17719 * J) / 50))
L = L - (Int(J / 16)) * (Int((15238 * J) / 43)) + 29
mDate.Month = Int((24 * L) / 709)
mDate.Day = L - Int((709 * mDate.Month) / 24)
mDate.Year = 30 * N + J - 30
رمز برمجي:
TextBox4.Text = mDate.Day
TextBox5.Text = mDate.Month
TextBox6.Text = mDate.Year
ثانيا:تحويل التاريخ الهجري إلى ميلادي...
نتبع نفس الالية بتحويل التقويم الهجري الى يولياني ثم الى ميلادي
رمز برمجي:
Dim hDate As xDate
Dim JD As Integer
رمز برمجي:
JD = Int((11 * hDate.Year + 3) / 30) + 354 * hDate.Year + 30 *hDate.Month - Int((hDate.Month - 1) / 2) + hDate.Day + 1948440 - 385
Dim L, N, J, K,I As Integer
If (JD > 2299160) Then
L = JD + 68569
N = Int((4 * L) / 146097)
L = L- Int((146097 * N + 3) / 4)
I= Int((4000 * (L+ 1)) / 1461001)
L = L - Int((1461 * I) / 4) + 31
J = Int((80 * L) / 2447)
hDate.Day = L - Int((2447 *J) / 80)
l = Int(J / 11)
hDate.Month = J + 2 - 12 * L
hDate.Year = 100 * (N - 49) + I + L
Else
j = JD + 1402
k = Int((J - 1) / 1461)
L = J - 1461 * K
n = Int((l - 1) / 365) - Int(l / 1461)
I= L- 365 * N + 30
J= Int((80 * I) / 2447)
hDate.Day = I- Int((2447 * J) / 80)
I= Int(J/ 11)
hDate.Month = J+ 2 - 12 * I
hDate.Year = 4 * K+ N+ I- 4716
End If
واحب ان انوه ان هذه الخوارزمية هي الشائعة في جميع البرامج الدقيقة للتحويل
طبعا البعض حيقول انو في دوال جاهزة للتحويل لكن كما العادة احببت توضيح مبدأ التحويل
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في هذا الموضوع ساشرح ان شاء الله آليه التحويل بين التاريخ الميلادي والتاريخ الهجري
قبل الدخول في تفاصيل التحويل علينا معرفة بعض الامور :
- اليوم اليولياني(Julian Day):
- نقول عن التقويم الميلادي انه غريغوري اذا كان بعد 15/10/1582م
- نقول عن التقويم الميلادي انه يولياني اذا كان قبل 15/10/1582م
في البداية ما حدا يسالني عن الارقام التي دخلت في التحويل لاني شخصيا لا اعرف كيف جاءت
أولا:تحويل التاريخ الميلادي إلى هجري...
تتم عملية التحويل هنا على مرحلتين:
- تحويل التقويم الميلادي الى اليوم اليولياني
- تحويل اليوم اليولياني الى التقويم الهجري
هنا ايضا يتم تقسيم آلية التحويل الى قسمين حسب نوع التقويم الميلادي (يولياني ام غريغوري)
نختبر اذا كان التقويم الميلادي غريغوري ام لا
قلنا مسبقا ان التاريخ الميلادي يكون غريغوري اذا كانالتاريخ الميلادي بعد 15/10/1582م
دعونا نحلل شرط التقويم الغريغوري ..ليكون التقويم غريغوي يجب ان تتحقق احد الشروط التالية:
- السنة اكبر من 1582م
- السنة تساوي1582م والشهر اكبر من 10
- السنة تساوي 1582 والشهر يساوي 10 واليوم اكبر من 14
في البداية قمت بعمل بناءة من نوع Structure تمثل التاريخ وتحتوي ثلاثة اعضاء السنة والشهر واليوم.
رمز برمجي:
Structure xDate
Dim Day As Integer
Dim Month As Integer
Dim Year As Integer
End Structure
والان قم بتصميم نموذج يحتوي على 6 TextBox وزر واحد
والان داخل اجراء الClick التابع للزر Button1
نقوم بحجز متغير جديد من نوع xDate وبعد ذلك نقوم باسناد القيم الثلاثة (اليوم والشهر والتاريخ)لاعضاءه الثلاثة
رمز برمجي:والان داخل اجراء الClick التابع للزر Button1
نقوم بحجز متغير جديد من نوع xDate وبعد ذلك نقوم باسناد القيم الثلاثة (اليوم والشهر والتاريخ)لاعضاءه الثلاثة
Dim mDate As xDate
Dim JD As Integer
رمز برمجي:
mDate.Day = Int(TextBox1.Text)
mDate.Month = Int(TextBox2.Text)
mDate.Year = Int(TextBox3.Text)
وكما اسلفت هناك الية للتعامل مع الغريغوي والية اخرى للتعامل مع اليولياني:
وفي المرحلة التالية نقوم بتحويل التاريخ الميلادي الى اليولياني
رمز برمجي:
If ((mDate.Year > 1582) Or ((mDate.Year = 1582) And (mDate.Month > 10)) Or ((mDate.Year = 1582) And (mDate.Month = 10) And (mDate.Day > 14))) Then
JD = Int((1461 * (mDate.Year + 4800 + Int((mDate.Month - 14) / 12))) / 4)
JD = JD + Int((365.5 * (mDate.Month - 2 - 12 * (Int((mDate.Month - 14) / 12)))) / 12)
JD = JD - Int((3 * (Int((mDate.Year + 4900 + Int((mDate.Month - 14) / 12)) / 100))) / 4)
JD = JD + mDate.Day - 32075
Else
JD = 365.5 * mDate.Year
JD = JD - Int((7 * (mDate.Year + 5001 + Int((mDate.Month - 9) / 7))) / 4)
JD = JD + Int((275 * mDate.Month) / 9) + mDate.Day + 1729777
End If
والان نقوم بتحويل التاريخ البولياني الى هجري وقم تم استخدام ارقام (لا اعلم من اين اتت)
رمز برمجي:
Dim L, N, J As Integer
L = JD - 1948440 + 10632
N = Int((L - 1) / 10631)
L = L - (10631 * N) + 354
J = (Int((10985 - L) / 5316)) * (Int((50 * L) / 17719))
J = J + (Int(L / 5670)) * (Int((43 * L) / 15238))
L = L - (Int((30 - J) / 15)) * (Int((17719 * J) / 50))
L = L - (Int(J / 16)) * (Int((15238 * J) / 43)) + 29
mDate.Month = Int((24 * L) / 709)
mDate.Day = L - Int((709 * mDate.Month) / 24)
mDate.Year = 30 * N + J - 30
في النهاية نقوم باسناد القيم الثلاثة الى الصناديق الثلاثة
رمز برمجي:
TextBox4.Text = mDate.Day
TextBox5.Text = mDate.Month
TextBox6.Text = mDate.Year
هنا نكون قد انتهينا من تحويل التاريخ الميلادي الى هجري
ثانيا:تحويل التاريخ الهجري إلى ميلادي...
نتبع نفس الالية بتحويل التقويم الهجري الى يولياني ثم الى ميلادي
رمز برمجي:
Dim hDate As xDate
Dim JD As Integer
رمز برمجي:
JD = Int((11 * hDate.Year + 3) / 30) + 354 * hDate.Year + 30 *hDate.Month - Int((hDate.Month - 1) / 2) + hDate.Day + 1948440 - 385
Dim L, N, J, K,I As Integer
If (JD > 2299160) Then
L = JD + 68569
N = Int((4 * L) / 146097)
L = L- Int((146097 * N + 3) / 4)
I= Int((4000 * (L+ 1)) / 1461001)
L = L - Int((1461 * I) / 4) + 31
J = Int((80 * L) / 2447)
hDate.Day = L - Int((2447 *J) / 80)
l = Int(J / 11)
hDate.Month = J + 2 - 12 * L
hDate.Year = 100 * (N - 49) + I + L
Else
j = JD + 1402
k = Int((J - 1) / 1461)
L = J - 1461 * K
n = Int((l - 1) / 365) - Int(l / 1461)
I= L- 365 * N + 30
J= Int((80 * I) / 2447)
hDate.Day = I- Int((2447 * J) / 80)
I= Int(J/ 11)
hDate.Month = J+ 2 - 12 * I
hDate.Year = 4 * K+ N+ I- 4716
End If
وفي النهاية نقوم باستقراء الثلاثة قيم كما في السابق
واحب ان انوه ان هذه الخوارزمية هي الشائعة في جميع البرامج الدقيقة للتحويل
طبعا البعض حيقول انو في دوال جاهزة للتحويل لكن كما العادة احببت توضيح مبدأ التحويل
......والسلام عليكم ميسره احمد عثمان منقول
الثلاثاء مارس 03, 2015 1:12 am من طرف علي البرنس
» Definition of salmonella bacteria
الجمعة مارس 14, 2014 12:08 am من طرف أحمدكزمه عين اللويقة
» تعريف بكتيريا السلمونيلا
الأربعاء فبراير 26, 2014 7:25 am من طرف ميسره احمد عثمان
» Enteric feve
الأربعاء فبراير 26, 2014 7:14 am من طرف ميسره احمد عثمان
» حمى التايفويد
الأربعاء فبراير 26, 2014 6:55 am من طرف ميسره احمد عثمان
» تحية طيبة
الأحد يناير 19, 2014 2:29 pm من طرف Admin
» حير2نا يا ناس البرير
الأربعاء يناير 08, 2014 9:28 am من طرف أحمدكزمه عين اللويقة
» من قصة المحلق وتاجوج
الثلاثاء يناير 07, 2014 11:13 pm من طرف أحمدكزمه عين اللويقة
» هذا هو الاسلام
الأربعاء ديسمبر 25, 2013 2:36 pm من طرف أحمدكزمه عين اللويقة
» ثورة الطين(احمد مطر)
الثلاثاء ديسمبر 24, 2013 5:22 pm من طرف أحمدكزمه عين اللويقة
» يلاكم ننم وندوبي
الثلاثاء ديسمبر 24, 2013 3:00 pm من طرف أحمدكزمه عين اللويقة
» معا من أجل موسوعة من الامثال السودانية الحديثة والمعاصرة
الثلاثاء ديسمبر 24, 2013 2:27 pm من طرف أحمدكزمه عين اللويقة
» عووووووووووووووووووووووك
الثلاثاء ديسمبر 24, 2013 12:47 am من طرف أحمدكزمه عين اللويقة
» الدوبيت السودانى
الثلاثاء ديسمبر 24, 2013 12:36 am من طرف أحمدكزمه عين اللويقة
» امثال شعبية
الثلاثاء ديسمبر 24, 2013 12:32 am من طرف أحمدكزمه عين اللويقة