الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[مخالف]دالة التحويل بين الميلادي والهجري

مغلق
بدأه مشروع مبرمج في 18 فبراير 2007 · 1 رد · 550 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

هذي دالة التحويل من التاريخ الهجري إلى الميلادي والعكس

قمت بتحويلها إلى لغة 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

WebSite1.rar

تم تعديل هذه المشاركة بواسطة مشروع مبرمج في 18 فبراير 2007 في 16:37

#2

تمت مناقشة موضوع التحويل بين الهجري والميلادي سابقا في المنتدى استخدم محرك البحث

الموضوع مغلق

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

هذا الموضوع مغلق.

مواضيع مشابهة