رفتن به مطلب
  • 0

تبدیل تاریخ میلادی به شمسی


Forutan

سوال

سلام دوستان

من با این سورس تاریخ گوشی رو به میلادی میگیرفتم و به شمسی تبدیل میکردم، اما الان میخوام بهش تاریخ بدم مثلا 2022/2/4 بهش بدم

ورودیش میشه این :

Dim pd As Int = miladi2shamsi(DateTime.GetDayOfYear(DateTime.Now),DateTime.GetYear(DateTime.Now))

که دو پارامتر ورودی داره یکیش که سال رو میگیره مثلا 2022 یکیش اینه DateTime.GetDayOfYear(DateTime.Now) که عدد روز از سال رو میگیره مثلا امروز که 2022/2/4 هست میشه 35مین روز از سال، اینجوری نمیتونم بهش ورودی ماه و روز رو بدم 

گفتم ببینم از دوستان کسی میتونه تغییرات رو درونش ایجاد کنه که بتونیم بصورت جدا در 3 پارامتر سال، ماه، روز رو بهش بدیم و تبدیل رو انجام بده.
کتابخونه ای دیگه نمیخوام اگر بشه با کد انجامش بدم.

ممنون

 

 

 

سورس:

#Region  Project Attributes 
	#ApplicationLabel: B4A Example
	#VersionCode: 1
	#VersionName: 
	'SupportedOrientations possible values: unspecified, landscape or portrait.
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
#End Region
      
#Region  Activity Attributes 
	#FullScreen: False
	#IncludeTitle: True
#End Region
      
Sub Process_Globals
	
End Sub
      
Sub Globals
	Dim lyear, lmonth, lday As Label
	Dim lyearint, lmonthint, ldayint As Int
	Dim listmonth As List
	Dim pd As Int = miladi2shamsi(DateTime.GetDayOfYear(DateTime.Now),DateTime.GetYear(DateTime.Now))
	Private dt As String
End Sub
      
      
Sub Activity_Create(FirstTime As Boolean)
	lyear.Initialize("lyear")
	lmonth.Initialize("lmonth")
	lday.Initialize("lday")
	shamsipick(pd)
	
	Log(dt)
End Sub
      
      
Sub Activity_Resume

End Sub
      
      
Sub Activity_Pause (UserClosed As Boolean)

End Sub
      
      
Sub answer_Click
	lyearint  = lyear.Text
	ldayint = lday.Text
	shamsipick(lyearint * 10000 + lmonthint* 100 + ldayint)
End Sub
      
      
Sub shamsipick (perdate As Int) As String
	listmonth.Initialize
	listmonth.AddAll(Array As String("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))
	ldayint = perdate Mod 100
	lday.Text = ldayint
	lmonthint = (perdate/100) Mod 100
	lmonth.Text = listmonth.Get(lmonthint-1)
	lyearint = perdate/10000
	lyear.Text = lyearint
	lyear.Text = lyear.Text.Replace(".0","")
	Dim ans As String = lyear.Text & "/" & lmonth.Text & "/" & lday.Text

	dt = ans
	Return ans
End Sub
      
      
     
Sub miladi2shamsi(DYearMiladi As Int, YearMiladi As Int) As Int
	Dim dAllMiladi, dAllShamsi, YearShamsi, dYearShamsi, FourYearShamsi, dFourYearShamsi As Int = 0
	Dim answer As Int
	dAllMiladi = DYearMiladi + (YearMiladi-1)*365.25
	dAllShamsi = dAllMiladi - 226899
	FourYearShamsi = dAllShamsi/1461
	dFourYearShamsi = dAllShamsi Mod 1461
	
	If dFourYearShamsi < 366 Then
		dYearShamsi = dFourYearShamsi
		YearShamsi = FourYearShamsi*4 + 1
	Else if dFourYearShamsi > 365 And dFourYearShamsi < 731 Then
		dYearShamsi = dFourYearShamsi - 365
		YearShamsi = FourYearShamsi*4 + 2
	Else if dFourYearShamsi > 730 And dFourYearShamsi < 1097 Then
		dYearShamsi = dFourYearShamsi - 730
		YearShamsi = FourYearShamsi*4 + 3
	Else if dFourYearShamsi > 1096 Then
		dYearShamsi = dFourYearShamsi - 1096
		YearShamsi = FourYearShamsi*4 + 4
	End If
	
	answer = persiandate (dYearShamsi, YearShamsi)
	Return answer
End Sub
      
      
      
Sub persiandate (dYearShamsi As Int, YearShamsi As Int) As Int
	Dim dateint As Int
	Dim dMonthShamsi, MonthShamsi As Int
	If  dYearShamsi < 32 Then
		MonthShamsi = 1
		dMonthShamsi = dYearShamsi
	Else if dYearShamsi< 63 And dYearShamsi> 31 Then
		MonthShamsi = 2
		dMonthShamsi = dYearShamsi - 31
	Else if dYearShamsi<94 And dYearShamsi>62 Then
		MonthShamsi = 3
		dMonthShamsi = dYearShamsi - 62
	Else if dYearShamsi<125 And dYearShamsi>93 Then
		MonthShamsi = 4
		dMonthShamsi = dYearShamsi - 93
	Else if dYearShamsi<156 And dYearShamsi>124 Then
		MonthShamsi = 5
		dMonthShamsi = dYearShamsi - 124
	Else if dYearShamsi<187 And dYearShamsi>155 Then
		MonthShamsi = 6
		dMonthShamsi = dYearShamsi - 155
	Else if dYearShamsi<217 And dYearShamsi>186 Then
		MonthShamsi = 7
		dMonthShamsi = dYearShamsi - 186
	Else if dYearShamsi<247 And dYearShamsi>216 Then
		MonthShamsi = 8
		dMonthShamsi = dYearShamsi - 216
	Else if dYearShamsi<277 And dYearShamsi>246 Then
		MonthShamsi = 9
		dMonthShamsi = dYearShamsi - 246
	Else if dYearShamsi<307 And dYearShamsi>276 Then
		MonthShamsi = 10
		dMonthShamsi = dYearShamsi - 276
	Else if dYearShamsi<337 And dYearShamsi>306 Then
		MonthShamsi = 11
		dMonthShamsi = dYearShamsi - 306
	Else if dYearShamsi > 336 Then
		MonthShamsi = 12
		dMonthShamsi = dYearShamsi - 336
	End If
	dateint = (YearShamsi*10000) + (MonthShamsi*100) + dMonthShamsi
	
	Return dateint
End Sub

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

0 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

هنوز برای این سوال پاسخی ارسال نشده است

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...