PDA

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



mina_at2000
چهارشنبه 08 آذر 1385, 19:22 عصر
میخواهم تاریخ قمری را به شمسی تبدیل کنم

Behrouz_Rad
چهارشنبه 08 آذر 1385, 20:10 عصر
http://www.shahabfar.com/misc/persia/

bandangoshti
چهارشنبه 15 آذر 1385, 08:17 صبح
این یه تابع هستش که میتونین ازش استفاده کنید


Public Function Dateconvert(ByVal MiladiDate As Date) As String
Dim dateobj As New System.Globalization.PersianCalendar
Dim Day As String = dateobj.GetDayOfMonth(MiladiDate).ToString
Dim Mount As String = dateobj.GetMonth(MiladiDate).ToString
Dim year As String = dateobj.GetYear(MiladiDate).ToString
Dim Output As String = year.ToString & "\" & Mount & "\" & Day.ToString
Return Output
End Function

problem
جمعه 17 آذر 1385, 23:13 عصر
من با اجازه تابع شما رو کمی اصلاح می‌کنم:


Public Function Dateconvert(ByVal MiladiDate As Date) As String
Dim dateobj As New System.Globalization.PersianCalendar
Dim Day As String = dateobj.GetDayOfMonth(MiladiDate).ToString
Dim Month As String = dateobj.GetMonth(MiladiDate).ToString
Dim Year As String = dateobj.GetYear(MiladiDate).ToString
Dim Output AsString = Year & "/" & Month & "/" & Day
Return Output
End Function


و البته اگر بخوایم به سبک من این کد رو بنویسیم می‌شه:


Public Function Dateconvert(ByVal MiladiDate As Date) As String
Dim dateobj As New System.Globalization.PersianCalendar
Return dateobj.GetYear(MiladiDate).ToString & "/" & _
dateobj.GetMonth(MiladiDate).ToString & "/" & _
dateobj.GetDayOfMonth(MiladiDate).ToString
End Function

linux
شنبه 18 آذر 1385, 19:32 عصر
من با اجازه تابع شما رو کمی اصلاح می‌کنم:


Public Function Dateconvert(ByVal MiladiDate As Date) As String
Dim dateobj As New System.Globalization.PersianCalendar
Dim Day As String = dateobj.GetDayOfMonth(MiladiDate).ToString
Dim Month As String = dateobj.GetMonth(MiladiDate).ToString
Dim Year As String = dateobj.GetYear(MiladiDate).ToString
Dim Output AsString = Year & "/" & Month & "/" & Day
Return Output
End Function


و البته اگر بخوایم به سبک من این کد رو بنویسیم می‌شه:


Public Function Dateconvert(ByVal MiladiDate As Date) As String
Dim dateobj As New System.Globalization.PersianCalendar
Return dateobj.GetYear(MiladiDate).ToString & "/" & _
dateobj.GetMonth(MiladiDate).ToString & "/" & _
dateobj.GetDayOfMonth(MiladiDate).ToString
End Function

این بنده خدا قمری را به شمسی می خواهد تبدیل کنه! نه میلادی به شمسی

problem
شنبه 18 آذر 1385, 21:21 عصر
البته من سوال رو نخونده بودم، فقط دیدم که کدی پست شده که ایراد داره، خواستم اصلاحش کنم. اما خوب شما راست می‌گی! ما بی‌دقتی کردیم!
اما راه حلی که من بلدم: اول تاریخ رو از قمری به میلادی می‌بریم، بعد از میلادی به شمسی! در کد زیر، من به طور دستی تاریخ ۱۹ ذی‌القعده ۱۴۲۷ رو وارد کردم که مال امروزه اگر اشتباه نکنم. کد باید در صورت درست کار کردن، تاریخ ۱۸ آذر ۱۳۸۵ رو برگردونه (که بر می‌گردونه!):



'Variables
Dim RoozGh, MahGh, RoozSh, MahSh As Byte
Dim SalGh, SalSh As Short
Dim PC As New System.Globalization.PersianCalendar
Dim HC As New System.Globalization.HijriCalendar
Dim MiladiEquivallent As Date
'Sample data
SalGh = 1427
MahGh = 11 'zol ghadeh
RoozGh = 19
'Calculations
MiladiEquivallent = HC.ToDateTime(SalGh, MahGh, RoozGh, 0, 0, 0, 0)

SalSh = PC.GetYear(MiladiEquivallent)
MahSh = PC.GetMonth(MiladiEquivallent)
RoozSh = PC.GetDayOfMonth(MiladiEquivallent)
'Showing the result
MsgBox("Shamsi date: " & SalSh & "/" & MahSh & "/" & RoozSh)


البته نیازی به تعریف این همه متغیر و این‌ها نبود، اما برای سادگی درک کد، گذاشتمشون.

linux
یک شنبه 19 آذر 1385, 12:47 عصر
البته من سوال رو نخونده بودم، فقط دیدم که کدی پست شده که ایراد داره، خواستم اصلاحش کنم. اما خوب شما راست می‌گی! ما بی‌دقتی کردیم!
اما راه حلی که من بلدم: اول تاریخ رو از قمری به میلادی می‌بریم، بعد از میلادی به شمسی! در کد زیر، من به طور دستی تاریخ ۱۹ ذی‌القعده ۱۴۲۷ رو وارد کردم که مال امروزه اگر اشتباه نکنم. کد باید در صورت درست کار کردن، تاریخ ۱۸ آذر ۱۳۸۵ رو برگردونه (که بر می‌گردونه!):



'Variables
Dim RoozGh, MahGh, RoozSh, MahSh As Byte
Dim SalGh, SalSh As Short
Dim PC As New System.Globalization.PersianCalendar
Dim HC As New System.Globalization.HijriCalendar
Dim MiladiEquivallent As Date
'Sample data
SalGh = 1427
MahGh = 11 'zol ghadeh
RoozGh = 19
'Calculations
MiladiEquivallent = HC.ToDateTime(SalGh, MahGh, RoozGh, 0, 0, 0, 0)

SalSh = PC.GetYear(MiladiEquivallent)
MahSh = PC.GetMonth(MiladiEquivallent)
RoozSh = PC.GetDayOfMonth(MiladiEquivallent)
'Showing the result
MsgBox("Shamsi date: " & SalSh & "/" & MahSh & "/" & RoozSh)


البته نیازی به تعریف این همه متغیر و این‌ها نبود، اما برای سادگی درک کد، گذاشتمشون.
روش درست هم همین هست ولی به دلیل اینکه ماه های قمری ممکن روزهاش پس و پیش بشه مشکلاتی شاید پیش بیاید.

problem
یک شنبه 19 آذر 1385, 17:58 عصر
هم در مورد تاریخ شمسی و هم قمری، روش‌های غیر محاسبتی متداول هستند. منظورم روش‌هایی هست که به جای محاسبه، بر اساس شهود کار می‌کنن (مثل دیدن ماه برای اعلام آغاز ماه قمری.) این روش‌ها مدافعین خاصشون رو دارن، و در مورد مثالی که زدم، جایگاه عقیدتی هم مطرح هست.
تازه خیلی چیزهای دیگر هم دخیل هستند، مثل آن چه که در این صفحه (http://fa.farsiweb.ir/fawiki/Iranian_Calendar_Accuracy) گفته شده.
با تمام این تفاسیر، وظیفه برنامه‌نویس آن است که دانسته از هر یک از الگوریتم‌ها استفاده کند.