PDA

View Full Version : تبدیل تاریخ میلادی به شمسی



hamhik
شنبه 21 بهمن 1385, 14:33 عصر
با سلام
من دارم یک تابعی می نویسم که تاریخ میلادی رو به شمسی تبدیل کنه مشکل من الان مثلا تطابق تاریخ روز میلادی و شمسی است مثلا الان که 21 بهمن به میلادی می شه دهم اینو چه جوری مشخص کنم فرمولی چیزی داره؟؟؟؟

alsman
شنبه 21 بهمن 1385, 15:14 عصر
سلام دوست من
یکی از روشهایی که برای تبدیل تاریخ شمسی و میلادی استفاده میکنند به صورت زیر هست .
اول میان سال میلادی رو به روز تبدیل میکنند .و اختلاف روزانه سال میلادی و شمسی که همیشه ثابت هست رو از اون کم میکنند و با تقسیم به عدد 365.25 به سال شمسی می رسند و باقیمانده رو به 30.5 تقسیم می کنند و ماه رو بدست میارند و باقیمانده روز ها هستش .
امید وارم بهت کمک کنه .

hamhik
شنبه 21 بهمن 1385, 16:46 عصر
منظورتون رو نفهمیدم سال رو به روز تبدیل می کنن؟؟؟یعنی چی؟

mortez maya
شنبه 21 بهمن 1385, 16:57 عصر
شما چرا راهی رو که قبلا دیگران رفته اند دوباره طی می کنید؟

netspc
شنبه 21 بهمن 1385, 17:16 عصر
Private Function MiladiToShamsi(ByRef ShYear As Integer, ByRef ShMonth As Integer, ByRef ShDay As Integer) As Integer
Dim num1 As Integer
Me.DayLength = DateAndTime.Now.DayOfYear
If (Me.DayLength > 79) Then
Me.DayLength = (DateAndTime.Now.DayOfYear - 79)
ShYear = (DateAndTime.Now.Year - 621)
If (Me.DayLength <= 186) Then
If ((Me.DayLength Mod 31) = 0) Then
ShMonth = (Me.DayLength / 31)
ShDay = 31
Return num1
End If
ShMonth = (1 + (Me.DayLength / 31))
ShDay = (Me.DayLength Mod 31)
Return num1
End If
Me.DayLength = (Me.DayLength - 186)
If ((Me.DayLength Mod 30) = 0) Then
ShMonth = (6 + (Me.DayLength / 30))
ShDay = 30
Return num1
End If
ShMonth = (7 + (Me.DayLength / 30))
ShDay = (Me.DayLength Mod 30)
Return num1
End If
ShYear = (DateAndTime.Now.Year - 622)
Me.DeyDifference(Me.DeyDiff)
If Me.IsKabiseh(ShYear) Then
If (Me.DayLength = 79) Then
ShDay = 30
ShMonth = 12
Return num1
End If
If (Me.DayLength = 49) Then
ShDay = 30
ShMonth = 11
Return num1
End If
If (Me.DayLength = 19) Then
ShDay = 30
ShMonth = 10
Return num1
End If
ShMonth = (((Me.DayLength + Me.DeyDiff) / 30) + 10)
ShDay = ((Me.DayLength + Me.DeyDiff) Mod 30)
Return num1
End If
ShMonth = (((Me.DayLength + Me.DeyDiff) / 30) + 10)
ShDay = ((Me.DayLength + Me.DeyDiff) Mod 30)
Return num1
End Function

shervin110uk
شنبه 21 بهمن 1385, 17:28 عصر
این یک تابع فوق العاده تبدیل تاریخ میلادی به تاریخ شمسی هستش... کلی امکانات که فکر میکنم کمتر دی ال الی پیدا کنی که اینجوری باشه ... تازه خیلی توضیح داده شده دربارش و حتی یک مثال عملی فوق العادم داره... توی ویژوال استودیو 2005 هم کار داده به من... میخوای یک تستیش بکن
http://rapidshare.com/files/15836088/PersianToolsSample.zip

مهدی نان شکری
شنبه 21 بهمن 1385, 20:45 عصر
با سلام
چرا از Persiancalender استفاده نمی کنید؟

hamhik
شنبه 21 بهمن 1385, 22:06 عصر
بابا اصلا پشیمون شدم:اشتباه:

sm_imani
دوشنبه 23 بهمن 1385, 17:39 عصر
با استفاده از این دو خط می توانید تاریخ میلادی را به شمسی تبدیل کنید:


PersianCalendar p = new PersianCalendar();
string Shamsi = p.GetYear(DateTime.Now).ToString().Substring(2,2) + "/" + p.GetMonth(DateTime.Now) + "/" + p.GetDayOfMonth(DateTime.Now); //Finish

ساناز
پنج شنبه 25 مرداد 1386, 11:06 صبح
به حروف نوشتناعداد در vb.net

ساناز
پنج شنبه 25 مرداد 1386, 11:07 صبح
:متفکر:به حروف نوشتن اعداد در vb.net

ساناز
پنج شنبه 25 مرداد 1386, 11:08 صبح
به حروف نوشتن اعداد در vb.net

twelve
پنج شنبه 01 شهریور 1386, 23:13 عصر
من یک روز شمار تاریخ شمسی ساده و آماتور برای asp.net نوشتم که تا سال 2040 اعتبار داره و حتی سال کبیسه رو هم میتونه تشخیص بده که کد کاملش رو میگذارم اینجا ، البته با vs 2003 نوشتم نمیدونم توی نسخه های دیگه جواب میده یا نه ،فکر کنم بتونه توی قدم اول کمکتون کنه





PublicClass Calendar
Inherits System.Web.UI.Page

Dim MYear AsDouble = CDbl(Tarikh.Now.Year)
Dim Day AsInteger = CInt(Tarikh.Now.Day)
Dim Month AsInteger = CInt(Tarikh.Now.Month)
Dim WeekNo AsInteger = CInt(Tarikh.Now.DayOfWeek)
Dim Kyear AsDouble
Dim Kabise AsInteger
Dim SYear AsDouble = (MYear - 621)
Dim Tarikh AsDate
Dim RoozHafteh, DayWeek AsString
Dim Rooz AsInteger
Dim Mah, Moon AsString
ProtectedWithEvents Label2 As System.Web.UI.WebControls.Label
ProtectedWithEvents Label1 As System.Web.UI.WebControls.Label



PrivateFunction Calendar()
SelectCase WeekNo
Case 1
RoozHafteh = " دوشنبه "
DayWeek = " Monday "
Case 2
RoozHafteh = " سه شنبه "
DayWeek = "Tuesday "
Case 3
RoozHafteh = " چهار شنبه "
DayWeek = " Wednesday "
Case 4
RoozHafteh = " پنجشنبه "
DayWeek = " Thursday "
Case 5
RoozHafteh = " جمعه "
DayWeek = " Friday "
Case 6
RoozHafteh = " شنبه "
DayWeek = " Saturday "
Case 0
RoozHafteh = " یکشنبه "
DayWeek = " Sunday "
EndSelect
If Month = 3 Then
Moon = "March"
IfCInt(MYear) = CInt(Kyear) Then
SelectCase Day
Case 1 To 20
SYear = (MYear - 621.78630136986)
Mah = " اسفند "
Rooz = Day + 10
Case 21 To 31
Rooz = Day - 19
Mah = " فروردین "
EndSelect
Else
SelectCase Day
Case 1 To 20
SYear = (MYear - 621.78630136986)
Mah = " اسفند "
Rooz = Day + 9
Case 21 To 31
Rooz = Day - 20
Mah = " فروردین "
EndSelect
EndIf
ElseIf Month = 4 Then
Moon = "April"
SelectCase Day
Case 1 To 20
Rooz = Day + 11
Mah = " فروردین "
Case 21 To 30
Rooz = Day - 20
Mah = " اردیبهشت "
EndSelect
ElseIf Month = 5 Then
Moon = "May"
SelectCase Day
Case 1 To 21
Mah = " اردیبهشت "
Rooz = Day + 10
Case 22 To 31
Mah = " خرداد "
Rooz = Day - 21
EndSelect
ElseIf Month = 6 Then
Moon = "June"
SelectCase Day
Case 1 To 21
Mah = " خرداد "
Rooz = Day + 10
Case 22 To 30
Mah = " تیــر "
Rooz = Day - 21
EndSelect
ElseIf Month = 7 Then
Moon = "July"
SelectCase Day
Case 1 To 22
Mah = " تیــر "
Rooz = Day + 9
Case 23 To 31
Mah = " مـرداد "
Rooz = Day - 22
EndSelect
ElseIf Month = 8 Then
Moon = "August"
SelectCase Day
Case 1 To 22
Mah = " مـرداد "
Rooz = Day + 9
Case 23 To 31
Mah = " شـهریور "
Rooz = Day - 22
EndSelect
ElseIf Month = 9 Then
Moon = "September"
SelectCase Day
Case 1 To 22
Rooz = Day + 9
Mah = " شـهریور "
Case 23 To 30
Mah = " مــهــر "
Rooz = Day - 22
EndSelect
ElseIf Month = 10 Then
Moon = "October"
SelectCase Day
Case 1 To 22
Mah = " مــهــر "
Rooz = Day + 8
Case 23 To 31
Mah = " آبــان "
Rooz = Day - 22
EndSelect
ElseIf Month = 11 Then
Moon = "November"
SelectCase Day
Case 1 To 21
Mah = " آبــان "
Rooz = Day + 9
Case 22 To 30
Mah = " آذر "
Rooz = Day - 21
EndSelect
ElseIf Month = 12 Then
Moon = "December"
SelectCase Day
Case 1 To 21
Mah = " آذر "
Rooz = Day + 9
Case 22 To 31
Mah = " دی "
Rooz = Day - 21
EndSelect
ElseIf Month = 1 Then
Moon = "January"
SYear = (MYear - 621.78630136986)
SelectCase Day
Case 1 To 20
Mah = " دی "
Rooz = Day + 10
Case 21 To 31
Mah = " بـهمن "
Rooz = Day - 20
EndSelect
ElseIf Month = 2 Then
SYear = (MYear - 621.78630136986)
Moon = "February"
IfCInt(MYear) = CInt(Kyear) Then
SelectCase Day
Case 1 To 19
Mah = " بـهمن "
Rooz = Day + 11
Case 20 To 29
Mah = " اسفند "
Rooz = Day - 19
EndSelect
Else
SelectCase Day
Case 1 To 19
Mah = " بـهمن "
Rooz = Day + 11
Case 20 To 28
Mah = " اسفند "
Rooz = Day - 19
EndSelect
EndIf
EndIf
Label1.Text = " امروز " + RoozHafteh + CStr(Rooz) + Mah + CStr(CInt(SYear))
Label2.Text = "Today is " & (DayWeek) & " " & CStr(Day) & " " & (Moon) & " " & CStr(MYear)
EndFunction





PrivateFunction Kabiseh()
Kabiseh = CInt(Tarikh.Now.Year)
SelectCase Kabiseh
Case 2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036, 2040
Tarikh.Now.AddDays(1)
Kyear = Tarikh.Now.Year
EndSelect
EndFunction

programmermp
پنج شنبه 01 شهریور 1386, 23:42 عصر
همانطور که دوستمون گفت

چرا باید چرخ را دوباره اختراع کنیم

وقتی این همه مبدل تاریخ میلادی به شمسی هست چرا دوباره بنویسیمش ؟؟؟؟؟؟؟؟؟؟

miassus10
جمعه 02 شهریور 1386, 11:48 صبح
آقا خواهش می کنم یکی منو کمک کنه:
من برای تبدیل تاریخ از تابع زیر استفاده می کنم ولی یک اشکالی که داره اینه که ماه و روز رو اگر عددی یک رقمی باشه یک رقمی نشون میده، چجور میشه 2/5/1386 را اینجوری نشون داد: 02/05/1386


Function MiladiToShamsi(ByVal Year AsDate) AsString
Dim A AsDate = Year
Dim B AsNew System.Globalization.PersianCalendar
Return B.GetYear(A) & "/" & B.GetMonth(A) & "/" & B.GetDayOfMonth(A)
EndFunction


خواهش میکنم کمک کنید!

programmermp
جمعه 02 شهریور 1386, 15:49 عصر
خوب ورودی رو اگه 02/06/2007 بدی فکر کنم مشکلت حل بشه

البته تست نکردم خودم ها من از ابزار تبدیل تاریخ persian tools استفاده می کنم

و مشکلی هم ندارم تاریخ رو به صورت حروف و عدد کوتاه و بلند خروجی می ده

miassus10
جمعه 02 شهریور 1386, 16:44 عصر
میشه در مورد Persian tools و چگونی استفادش بیشتر توضیح بدید

ascpro
جمعه 02 شهریور 1386, 18:02 عصر
سلام به همگی.
من بعد از مدتی اومدم.
بیا عزیز این کد تبدیل:


Dim myCulture AsNew Globalization.CultureInfo("fa-IR")
Dim mylanguage As InputLanguage
InputLanguage.CurrentInputLanguage = mylanguage.FromCulture(myCulture)
Dim _day, _days, _year, _mounth AsInteger
_day = Now.DayOfYear
_year = Now.Year
_year -= 621
If _day < 78 Then
_year -= 1
If _day < 19 Then
_mounth = 10
_days = _day + 11
Else
If _day < 50 Then
_mounth = 11
_days = _day - 20
Else
_mounth = 12
_days = _day - 50
EndIf
EndIf
Else
If _day < 110 Then
_mounth = 1
_days = _day - 79
Else
If _day < 141 Then
_mounth = 2
_days = _day - 110
Else
If _day < 172 Then
_mounth = 3
_days = _day - 141
Else
If _day < 203 Then
_mounth = 4
_days = _day - 172
Else
If _day < 234 Then
_mounth = 5
_days = _day - 203
Else
If _day < 265 Then
_mounth = 6
_days = _day - 234
Else
If _day < 295 Then
_mounth = 7
_days = _day - 265
Else
If _day < 325 Then
_mounth = 8
_days = _day - 295
Else
If _day < 355 Then
_mounth = 9
_days = _day - 325
Else
_mounth = 10
_days = _day - 355
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
'AxMaskEdBox1.defaultText = _year & "/" & _mounth & "/" & _days
'AxMaskEdBox1.Mask = _year & "/" & _mounth & "/" & _days
Label8.Text = _year & "/" & _mounth & "/" & _days

miassus10
شنبه 03 شهریور 1386, 18:32 عصر
من در مورد persian tools گشتم و کامپوننتشو پیدا کردم، چیزه جالبی بود و واقعا کارمو راه انداخت، دیگه از اون تابع miladitoshamsi استفاده نمی کنم

saman_itc
سه شنبه 13 آذر 1386, 20:46 عصر
آقای miassus10 خوب نتیجه جستوجو تون رو اینجا هم میزاشتین

morteza_261
سه شنبه 13 آذر 1386, 21:36 عصر
سلام
پرشین تولز توی این تایپک قرار داره از پست سوم میتونی بگیریش

http://barnamenevis.org/forum/showthread.php?t=28289