PDA

View Full Version : سوال: تاریخ شمسی



shabgard2oo9
یک شنبه 13 آذر 1390, 14:29 عصر
سلام
من میخوام تاریخ میلادی رو به تاریخ شمسی تبدیل وتوبرنامه استفاده کنم توابع لازم رو تویه کلاس یاماژول بنویسم،بعدهرجالازم بودفراخوانیش کنم حالا چه جوری از این کلاس یاماژول توبرنامه استفاده کنم یا فراخوانیش کنم؟

mgh64120
یک شنبه 13 آذر 1390, 15:38 عصر
سلام

Public Function PersianDate(ByVal myDT As Date) As String
Dim Resualt As New System.Text.StringBuilder
Dim Month() As String = {"", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"}
Dim Persian As New Globalization.PersianCalendar
Resualt.Append(Persian.GetYear(myDT).ToString +
"/" + Month(Persian.GetMonth(myDT)) + "/" + Format(Persian.GetDayOfMonth(myDT), "0#"))
Return Resualt.ToString
EndFunction

براي استفاده :

Label1.Text = PersianDate(Date.Today)

موفق باشيد

shabgard2oo9
یک شنبه 13 آذر 1390, 16:13 عصر
مرسی
امامن نحوه استفاده از ماژولها رومیخوام
مثلاهمین تابع روتوی یک مازول تعریف می کنیم بعداچه طور ازش استفاده کنیم

mgh64120
یک شنبه 13 آذر 1390, 21:46 عصر
سلام دوست عزيز
فرقي نداره. شما اين تابع رو توي ماژولت تعريف كن. بعد هر جاي پروژه همين طوري فراخواني كن.

Label1.Text = PersianDate(Date.Today)

موفق باشيد.

vb.net.33
دوشنبه 14 آذر 1390, 10:38 صبح
حالا اگه بخواهیم تاریخ میلادی رو به شمس و یا شمسی رو به میلادی تبدیل کنیم کدش چی هست؟

sh2007
دوشنبه 14 آذر 1390, 10:56 صبح
سلام

Public Function PersianDate(ByVal myDT As Date) As String
Dim Resualt As New System.Text.StringBuilder
Dim Month() As String = {"", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"}
Dim Persian As New Globalization.PersianCalendar
Resualt.Append(Persian.GetYear(myDT).ToString +
"/" + Month(Persian.GetMonth(myDT)) + "/" + Format(Persian.GetDayOfMonth(myDT), "0#"))
Return Resualt.ToString
EndFunction

براي استفاده :

Label1.Text = PersianDate(Date.Today)

موفق باشيد

با سلام
اگه اسامی هفته و ماهها رو بخوایم چطور عمل می کنیم البته با ماه مشکلی نیست ولی اسامی هفته؟!!
ممنون

mgh64120
دوشنبه 14 آذر 1390, 13:17 عصر
سلام دوست عزيز

حالا اگه بخواهیم تاریخ میلادی رو به شمس و یا شمسی رو به میلادی تبدیل کنیم کدش چی هست؟
تابع تبديل تاريخ ميلادي به تاريخ شمسي رو كه در همين تاپيك و در پست 2# گذاشتم.(تابع PersianDate)
و اما تابع تبديل تاريخ شمسي به ميلادي :

Public Function ShamsiToMiladi(ByVal myDT As String) As Date
Dim Persian As New Globalization.PersianCalendar
If myDT.Length = 10 Then
Dim DT() As String
DT = Split(myDT, "/")
Return CDate(Persian.ToDateTime(DT(0), DT(1), DT(2), 0, 0, 0, 0))
Else
Return ""
End If
End Function

و نحوه كاربرد :

Label1.Text = ShamsiToMiladi("1390/09/14")

موفق باشيد.

mgh64120
دوشنبه 14 آذر 1390, 14:39 عصر
سلام


اگه اسامی هفته و ماهها رو بخوایم چطور عمل می کنیم البته با ماه مشکلی نیست ولی اسامی هفته؟!!

تابع :

Public Function GetDayOfWeek(ByVal myDT As Date) As String
Dim myCal As Globalization.Calendar = Globalization.CultureInfo.InvariantCulture.Calenda r
Select Case myCal.GetDayOfWeek(myDT)
Case DayOfWeek.Saturday
Return "شنبه"
Case DayOfWeek.Sunday
Return "يكشنبه"
Case DayOfWeek.Monday
Return "دوشنبه"
Case DayOfWeek.Tuesday
Return "سه شنبه"
Case DayOfWeek.Wednesday
Return "چهارشنبه"
Case DayOfWeek.Thursday
Return "پنجشنبه"
Case Else
Return "جمعه"
End Select
End Function

نحوه ي استفاده :

Label1.Text = GetDayOfWeek(Date.Today)

موفق باشيد.

M.KH-SH
دوشنبه 14 آذر 1390, 16:49 عصر
http://barnamenevis.org/showthread.php?308335-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%B1%D9%88%D8%B2-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%AF%D9%81%D8%AA%D8%B1%DA%86%D9%87-%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA-%28%D8%B4%D9%85%D8%B3%DB%8C-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B1%D9%88%D8%B2%29

vb.net.33
دوشنبه 14 آذر 1390, 19:12 عصر
http://barnamenevis.org/showthread.php?308335-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%B1%D9%88%D8%B2-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%AF%D9%81%D8%AA%D8%B1%DA%86%D9%87-%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA-%28%D8%B4%D9%85%D8%B3%DB%8C-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B1%D9%88%D8%B2%29


این فقط dll هست؟ سورس ندارد؟!!!!

vb.net.33
دوشنبه 14 آذر 1390, 19:16 عصر
سلام دوست عزيز

تابع تبديل تاريخ ميلادي به تاريخ شمسي رو كه در همين تاپيك و در پست 2# گذاشتم.(تابع PersianDate)
و اما تابع تبديل تاريخ شمسي به ميلادي :

Public Function ShamsiToMiladi(ByVal myDT As String) As Date
Dim Persian As New Globalization.PersianCalendar
If myDT.Length = 10 Then
Dim DT() As String
DT = Split(myDT, "/")
Return CDate(Persian.ToDateTime(DT(0), DT(1), DT(2), 0, 0, 0, 0))
Else
Return ""
End If
End Function

و نحوه كاربرد :

Label1.Text = ShamsiToMiladi("1390/09/14")

موفق باشيد.


ممنون که جواب دادین ولی منظور من این نبود . شما در تبدیل تواریخ به هم دیگه از Globalization استفاده کردین که مد نظر من این نبود!!!


من می خواستم مبحث ریاضی این کارو بدونم . یعنی با دونستن تاریخ شمسی بتونیم با یه سری فرمول اون یکی تاریخ رو بدست آوریم.

mgh64120
دوشنبه 14 آذر 1390, 23:12 عصر
سلام دوست عزيز
من از اين كدها در VB6 استفاده ميكردم. حالا اونا رو به كد VB.Net تبديل كردم.
براتون ميزارم، زحمت بررسي و تجزيه و تحليل با خودتون!:متفکر:
اول :

Public Function Shamsi() As Date
Dim Shamsi_Mabna As Date
Dim Miladi_mabna As Date
Dim Dif As Integer
Dim PC As New Globalization.PersianCalendar
'در اينجا 12/10/79 با 2002/01/01 معادل قرارداده شده
Shamsi_Mabna = #10/12/1379#
Miladi_mabna = #1/1/2001#
Dif = DateDiff("d", Miladi_mabna, Date.Today)
If Dif < 0 Then
MsgBox("تاريخ جاري سيستم شما نادرست است , آنرا اصلاح كنيد.")
Else
Return PC.AddDays(Shamsi_Mabna, Dif)
End If
End Function

دوم :

Public Function GetPersianDate() As String
Dim Y, m, d, I As Integer
Dim ch As String
Y = Date.Today.Year
If Y = 0 Then Y = 2000
If Y < 1000 Then Y = Y + 1900
m = Date.Today.Month
d = Date.Today.Day
If ((m < 3) Or ((m = 3) And (d < 21))) Then
Y = Y - 622
Else
Y = Y - 621
End If
Select Case m
Case 1
If d < 21 Then
m = 10 : d = d + 10
Else
m = 11 : d = d - 20
End If
Case 2
If d < 20 Then
m = 11 : d = d + 11
Else
m = 12 : d = d - 19
End If
Case 3
If d < 21 Then
m = 12 : d = d + 9
Else
m = 1 : d = d - 20
End If
Case 4
If d < 21 Then
m = 1 : d = d + 11
Else
m = 2 : d = d - 20
End If
Case 5, 6
If d < 22 Then
m = m - 3 : d = d + 10
Else
m = m - 2 : d = d - 21
End If
Case 7, 8, 9
If d < 23 Then
m = m - 3 : d = d + 9
Else
m = m - 2 : d = d - 22
End If
Case 10
If d < 23 Then
m = 7 : d = d + 8
Else
m = 8 : d = d - 22
End If
Case 11, 12
If d < 22 Then
m = m - 3 : d = d + 9
Else
m = m - 2 : d = d - 21
End If
End Select
Dim ms, ds As String
If m < 10 Then
ms = "0"
ms = ms + CStr(m)
Else
ms = CStr(m)
End If
If d < 10 Then
ds = "0"
ds = ds + CStr(d)
Else
ds = CStr(d)
End If
ch = CStr(Y) + "/" + ms + "/" + ds
Return ch
End Function

فايل ضميمه حاوي پروژه كه از هر دو كد استفاده شده.
موفق باشيد.

vb.net.33
دوشنبه 14 آذر 1390, 23:30 عصر
سلام دوست عزيز
من از اين كدها در VB6 استفاده ميكردم. حالا اونا رو به كد VB.Net تبديل كردم.
براتون ميزارم، زحمت بررسي و تجزيه و تحليل با خودتون!:متفکر:
اول :

Public Function Shamsi() As Date
Dim Shamsi_Mabna As Date
Dim Miladi_mabna As Date
Dim Dif As Integer
Dim PC As New Globalization.PersianCalendar
'در اينجا 12/10/79 با 2002/01/01 معادل قرارداده شده
Shamsi_Mabna = #10/12/1379#
Miladi_mabna = #1/1/2001#
Dif = DateDiff("d", Miladi_mabna, Date.Today)
If Dif < 0 Then
MsgBox("تاريخ جاري سيستم شما نادرست است , آنرا اصلاح كنيد.")
Else
Return PC.AddDays(Shamsi_Mabna, Dif)
End If
End Function

دوم :

Public Function GetPersianDate() As String
Dim Y, m, d, I As Integer
Dim ch As String
Y = Date.Today.Year
If Y = 0 Then Y = 2000
If Y < 1000 Then Y = Y + 1900
m = Date.Today.Month
d = Date.Today.Day
If ((m < 3) Or ((m = 3) And (d < 21))) Then
Y = Y - 622
Else
Y = Y - 621
End If
Select Case m
Case 1
If d < 21 Then
m = 10 : d = d + 10
Else
m = 11 : d = d - 20
End If
Case 2
If d < 20 Then
m = 11 : d = d + 11
Else
m = 12 : d = d - 19
End If
Case 3
If d < 21 Then
m = 12 : d = d + 9
Else
m = 1 : d = d - 20
End If
Case 4
If d < 21 Then
m = 1 : d = d + 11
Else
m = 2 : d = d - 20
End If
Case 5, 6
If d < 22 Then
m = m - 3 : d = d + 10
Else
m = m - 2 : d = d - 21
End If
Case 7, 8, 9
If d < 23 Then
m = m - 3 : d = d + 9
Else
m = m - 2 : d = d - 22
End If
Case 10
If d < 23 Then
m = 7 : d = d + 8
Else
m = 8 : d = d - 22
End If
Case 11, 12
If d < 22 Then
m = m - 3 : d = d + 9
Else
m = m - 2 : d = d - 21
End If
End Select
Dim ms, ds As String
If m < 10 Then
ms = "0"
ms = ms + CStr(m)
Else
ms = CStr(m)
End If
If d < 10 Then
ds = "0"
ds = ds + CStr(d)
Else
ds = CStr(d)
End If
ch = CStr(Y) + "/" + ms + "/" + ds
Return ch
End Function

فايل ضميمه حاوي هر دو كد هست.

موفق باشيد.

ممنون و بررسی می کنم.

sh2007
یک شنبه 20 آذر 1390, 18:58 عصر
سلام

تابع :

Public Function GetDayOfWeek(ByVal myDT As Date) As String
Dim myCal As Globalization.Calendar = Globalization.CultureInfo.InvariantCulture.Calenda r
Select Case myCal.GetDayOfWeek(myDT)
Case DayOfWeek.Saturday
Return "شنبه"
Case DayOfWeek.Sunday
Return "يكشنبه"
Case DayOfWeek.Monday
Return "دوشنبه"
Case DayOfWeek.Tuesday
Return "سه شنبه"
Case DayOfWeek.Wednesday
Return "چهارشنبه"
Case DayOfWeek.Thursday
Return "پنجشنبه"
Case Else
Return "جمعه"
End Select
End Function

نحوه ي استفاده :

Label1.Text = GetDayOfWeek(Date.Today)

موفق باشيد.

دوست من از لطف شما سپاسگذارم