بسم الله الرحمن الرحيم
هذي دالة التحويل من التاريخ الهجري إلى الميلادي والعكس
قمت بتحويلها إلى لغة Visual Basic.net 2005 من لغة Oracle
ولكن تعطي نتائج خاطئة مع انها شغالة 100% في لغة Oracle
ارجو ممن عنده خبره في التواريخ والتحويل بينها إفادتي
ملاحظة: يوجد ملف مرفق به البرنامج بلغة asp.net 2005
وشكرا مقدما
مشرو مبرمج
الـــــــــــدالــــة:
Partial Class _Default Inherits System.Web.UI.Page Protected Sub btnConv_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnConv.Click Dim type As String If RadioButton1.Checked = True Then type = "H" Else type = "M" End If date_conv(day.Text, month.Text, year.Text, type) End Sub 'Thursday, +622 July 15 (Julian calendar). ' Sub date_conv(ByVal day1 As Long, ByVal month1 As Long, ByVal year1 As Long, ByVal type1 As String) Dim DAY2 As Integer Dim MONTH2 As Integer Dim YEAR2 As Integer Dim DAY_NAME2 As String '-- LOCAL VARIABLES '-- 15/7/622 == 1/1/1 HIJRI IS TRUE ??? '-- Dim vday1 As Long = day1 Dim vmonth1 As Long = month1 Dim vyear1 As Long = year1 Dim VJ2 As Long Dim VWEEKS As Long Dim VZ As Long = 1937807 Dim VX As Long = -29 Dim VF As Long Dim VV As Long Dim VB As Long Dim VC As Long Dim VE As Long Dim SUB_V As Long = 0 '-- ARRAYS Dim MONTH_DAYS_TABLE(31) As Integer Dim DAYS_NAME_TABLE(8) As String 'BEGIN DAYS_NAME_TABLE(0) = "" DAYS_NAME_TABLE(1) = "MONDAY" DAYS_NAME_TABLE(2) = "TUESDAY" DAYS_NAME_TABLE(3) = "WEDNESDAY" DAYS_NAME_TABLE(4) = "THURSDAY" DAYS_NAME_TABLE(5) = "FRIDAY" DAYS_NAME_TABLE(6) = "SATURDAY" DAYS_NAME_TABLE(7) = "SUNDAY" ' THERE ARE 11 YEARS IN EVERY 30 HIJRI YEARS ARE CALLED "KABEESAH" ' (THO ELHIJA = 30 DAYS) THESE YEARS NUMBERS ARE 2,5,7,10,13,16,18,21,24,26,29 ' MONTH_DAYS_TABLE(0) = 0 MONTH_DAYS_TABLE(1) = 0 MONTH_DAYS_TABLE(2) = 1 MONTH_DAYS_TABLE(3) = 0 MONTH_DAYS_TABLE(4) = 0 MONTH_DAYS_TABLE(5) = 1 MONTH_DAYS_TABLE(6) = 0 MONTH_DAYS_TABLE(7) = 1 MONTH_DAYS_TABLE(8) = 0 MONTH_DAYS_TABLE(9) = 0 MONTH_DAYS_TABLE(10) = 1 MONTH_DAYS_TABLE(11) = 0 MONTH_DAYS_TABLE(12) = 0 MONTH_DAYS_TABLE(13) = 1 MONTH_DAYS_TABLE(14) = 0 MONTH_DAYS_TABLE(15) = 0 MONTH_DAYS_TABLE(16) = 1 MONTH_DAYS_TABLE(17) = 0 MONTH_DAYS_TABLE(18) = 1 MONTH_DAYS_TABLE(19) = 0 MONTH_DAYS_TABLE(20) = 0 MONTH_DAYS_TABLE(21) = 1 MONTH_DAYS_TABLE(22) = 0 MONTH_DAYS_TABLE(23) = 0 MONTH_DAYS_TABLE(24) = 1 MONTH_DAYS_TABLE(25) = 0 MONTH_DAYS_TABLE(26) = 1 MONTH_DAYS_TABLE(27) = 0 MONTH_DAYS_TABLE(28) = 0 MONTH_DAYS_TABLE(29) = 1 MONTH_DAYS_TABLE(30) = 0 'MONTH_DAYS_TABLE(30) = 0 ' label 250----------- ' ************* GARGORIAN (MILADI) TO HIJRI ******** If type1 = "M" Then If month1 <= 2 Then vyear1 = year1 - 1 vmonth1 = month1 + 12 End If ' ***** 365.24219878 VJ2 = CLng(365.25 * vyear1) + CLng(30.6001 * (vmonth1 + 1)) + vday1 + 1720994.5 + 0.5 ' VWEEKS = VJ2 - TRUNC ( VJ2 / 7) * 7 ' ' The Gregorian calendar was proclaimed by Pope Gregory XIII and ' took effect in most Catholic states in 1582, in which October 4, 1582 ' of the Julian calendar was followed by October 15 in the new calendar, ' correcting for the accumulated discrepancy between the Julian calendar ' and the equinox as of that date If year1 > 1582.1015 Then VJ2 = (VJ2 + 2) - CLng(vyear1 / 100) + (vyear1 / 400) End If VZ = 1937807 VX = -29 VWEEKS = VJ2 - CLng(VJ2 / 7) * 7 ' 'do LOOP Do VX = VX + 30 VZ = VZ + 10630.95 ' If Then ' Exit Do 'End If 'Loop Loop Until (VJ2 <= (VZ + 10630.95)) VJ2 = VJ2 - VZ VF = -1 VZ = -354.365 VV = 0 ' --------hijri year days =354.365 Do VF = VF + 1 VZ = VZ + VV + 354.365 SUB_V = SUB_V + 1 VV = MONTH_DAYS_TABLE(SUB_V) ' READ V 'If Then ' Exit Do 'End If Loop Until (VJ2 <= (VZ + 354.365 + VV)) vyear1 = VX + VF VJ2 = VJ2 - VZ VZ = -29 vmonth1 = 0 ' label 450 ------------------------------------ Do VZ = VZ + 29 + vmonth1 - (vmonth1 / 2) * 2 vmonth1 = vmonth1 + 1 'If Then ' Exit Do 'End If Loop Until (VJ2 <= (VZ + 29 + vmonth1 - CLng(vmonth1 / 2) * 2)) ' vday1 = VJ2 - VZ ' ' ' DAY2 = vday1 MONTH2 = vmonth1 YEAR2 = vyear1 VWEEKS = VWEEKS + 1 DAY_NAME2 = DAYS_NAME_TABLE(VWEEKS) TextBox1.Text = DAY2 & "/" & MONTH2 & "/" & YEAR2 TextBox2.Text = DAY_NAME2 ' ' ********************************************************* ' REM HIJRI DATE START 'End ' END MILADI PART End If ' ******************************** HIJRI TO MILDI *** ' If type1 = "H" Then Do VX = VX + 30 VZ = VZ + 10631 ' If vyear1 <= VX + 30 Then 'EXIT ' End If ' label 510 Loop Until (vyear1 <= VX + 30) VJ2 = VZ VX = vyear1 - VX VF = -1 VZ = -354 VV = 0 ' label 590 ------------- Do VF = VF + 1 VZ = VZ + VV + 354 SUB_V = SUB_V + 1 VV = MONTH_DAYS_TABLE(SUB_V) ' READ V ' If VX = VF Then 'EXIT ' End If ' label 590 Loop Until (VX = VF) VX = VX + VF VJ2 = VJ2 + VZ VZ = -29 VF = 0 ' --------- Do VZ = VZ + 29 + VF - CLng(VF / 2) * 2 VF = VF + 1 ' If vmonth1 <= VF Then 'EXIT ' ' ' End If Loop Until (vmonth1 <= VF) VJ2 = VJ2 + VZ + day1 VWEEKS = VJ2 - CLng(VJ2 / 7) * 7 VV = CLng((VJ2 - 1867216.25) / 36524.25) If VJ2 >= 2299161 Then VB = VJ2 + 1 + VV - CLng(VV / 4) + 1524 End If If VJ2 < 2299161 Then VB = VJ2 + 1524 End If VC = CLng((VB - 122.1) / 365.25) vday1 = CLng(365.25 * VC) VE = CLng((VB - vday1) / 30.6001) vday1 = VB - vday1 - CLng(30.6001 * VE) If VE < 13.5 Then vmonth1 = VE - 1 End If If VE >= 13.5 Then vmonth1 = VE - 13 End If ' REM If vmonth1 > 2.5 Then vyear1 = VC - 4716 End If If vmonth1 <= 2.5 Then vyear1 = VC - 4715 End If ' label 8000 --------------- DAY2 = vday1 MONTH2 = vmonth1 YEAR2 = vyear1 VWEEKS = VWEEKS + 1 DAY_NAME2 = DAYS_NAME_TABLE(VWEEKS) TextBox1.Text = DAY2 & "/" & MONTH2 & "/" & YEAR2 TextBox2.Text = DAY_NAME2 ' 'End ' HIJRI PART End If End Sub ' date_conv End Class