20-09-12, 02:43 PM
السلام عليكم إخواني الكرام
كيف حالكم ؟
هذا الموضوع ملك للأستاذ Mohammed Asaad وقد طلبت منه أن أنقل مشاركاته ووافق بحمد الله
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في هذا الموضوع ساشرح ان شاء الله آليه التحويل بين التاريخ الميلادي والتاريخ الهجري
قبل الدخول في تفاصيل التحويل علينا معرفة بعض الامور :
كيف حالكم ؟
هذا الموضوع ملك للأستاذ Mohammed Asaad وقد طلبت منه أن أنقل مشاركاته ووافق بحمد الله
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في هذا الموضوع ساشرح ان شاء الله آليه التحويل بين التاريخ الميلادي والتاريخ الهجري
قبل الدخول في تفاصيل التحويل علينا معرفة بعض الامور :
- [*=center]اليوم اليولياني(Julian Day):
اليوم اليولياني هو بمثابة عداد أيام مستمر منذ العام 4712 قبل الميلاد، فاليوم اليولياني الموافق ليوم 01/01/2002م مثلا هو 2452276.0، أي أن عدد الأيام منذ العام 4712 قبل الميلاد و حتى 01/01/2002 هو 2452276.0 يوما. و يبدأ اليوم اليولياني عند الساعة 12 ظهرا حسب توقيت جرينتش.
- [*=center]نقول عن التقويم الميلادي انه غريغوري اذا كان بعد 15/10/1582م
[*=center]نقول عن التقويم الميلادي انه يولياني اذا كان قبل 15/10/1582م
الآن ندخل الى آلية التحويل :
في البداية ما حدا يسالني عن الارقام التي دخلت في التحويل لاني شخصيا لا اعرف كيف جاءت
أولا:تحويل التاريخ الميلادي إلى هجري...
تتم عملية التحويل هنا على مرحلتين:
في البداية ما حدا يسالني عن الارقام التي دخلت في التحويل لاني شخصيا لا اعرف كيف جاءت
أولا:تحويل التاريخ الميلادي إلى هجري...
تتم عملية التحويل هنا على مرحلتين:
- [*=center]تحويل التقويم الميلادي الى اليوم اليولياني
[*=center]تحويل اليوم اليولياني الى التقويم الهجري
اولا: تحويل التاريخ الميلادي الى هجري:
هنا ايضا يتم تقسيم آلية التحويل الى قسمين حسب نوع التقويم الميلادي (يولياني ام غريغوري)
نختبر اذا كان التقويم الميلادي غريغوري ام لا
قلنا مسبقا ان التاريخ الميلادي يكون غريغوري اذا كانالتاريخ الميلادي بعد 15/10/1582م
دعونا نحلل شرط التقويم الغريغوري ..ليكون التقويم غريغوي يجب ان تتحقق احد الشروط التالية:
هنا ايضا يتم تقسيم آلية التحويل الى قسمين حسب نوع التقويم الميلادي (يولياني ام غريغوري)
نختبر اذا كان التقويم الميلادي غريغوري ام لا
قلنا مسبقا ان التاريخ الميلادي يكون غريغوري اذا كانالتاريخ الميلادي بعد 15/10/1582م
دعونا نحلل شرط التقويم الغريغوري ..ليكون التقويم غريغوي يجب ان تتحقق احد الشروط التالية:
- [*=center]السنة اكبر من 1582م
[*=center]السنة تساوي1582م والشهر اكبر من 10
[*=center]السنة تساوي 1582 والشهر يساوي 10 واليوم اكبر من 14
في البداية قمت بعمل بناءة من نوع Structure تمثل التاريخ وتحتوي ثلاثة اعضاء السنة والشهر واليوم.
والان قم بتصميم نموذج يحتوي على 6 TextBox وزر واحد
والان داخل اجراء الClick التابع للزر Button1
نقوم بحجز متغير جديد من نوع xDate وبعد ذلك نقوم باسناد القيم الثلاثة (اليوم والشهر والتاريخ)لاعضاءه الثلاثة
وكما اسلفت هناك الية للتعامل مع الغريغوي والية اخرى للتعامل مع اليولياني:
وفي المرحلة التالية نقوم بتحويل التاريخ الميلادي الى اليولياني
والان نقوم بتحويل التاريخ البولياني الى هجري وقم تم استخدام ارقام (لا اعلم من اين اتت)
في النهاية نقوم باسناد القيم الثلاثة الى الصناديق الثلاثة
هنا نكون قد انتهينا من تحويل التاريخ الميلادي الى هجري
ثانيا:تحويل التاريخ الهجري إلى ميلادي...
نتبع نفس الالية بتحويل التقويم الهجري الى يولياني ثم الى ميلادي
وفي النهاية نقوم باستقراء الثلاثة قيم كما في السابق
كود :
Structure xDate
Dim Day As Integer
Dim Month As Integer
Dim Year As Integer
End Structure
والان قم بتصميم نموذج يحتوي على 6 TextBox وزر واحد
والان داخل اجراء ال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
وفي النهاية نقوم باستقراء الثلاثة قيم كما في السابق
واحب ان انوه ان هذه الخوارزمية هي الشائعة في جميع البرامج الدقيقة للتحويل
طبعا البعض حيقول انو في دوال جاهزة للتحويل لكن كما العادة احببت توضيح مبدأ التحويل
والسلام عليكم
طبعا البعض حيقول انو في دوال جاهزة للتحويل لكن كما العادة احببت توضيح مبدأ التحويل
والسلام عليكم
اللَّهُمَّ أَنْتَ رَبِّي ، لا إِلَه إِلاَّ أَنْتَ خَلَقْتَني وأَنَا عَبْدُكَ ، وأَنَا على عهْدِكَ ووعْدِكَ ما اسْتَطَعْتُ ، أَعُوذُ بِكَ مِنْ شَرِّ ما صنَعْتُ ، أَبوءُ لَكَ بِنِعْمتِكَ علَيَ ، وأَبُوءُ بذَنْبي فَاغْفِرْ لي ، فَإِنَّهُ لا يغْفِرُ الذُّنُوبِ إِلاَّ أَنْتَ .