PDA

View Full Version : تبدیل تاریخ های شمسی و میلادی به یکدیگر تنها با دو خط کدنویسی (vb2005)



javad2000
شنبه 09 تیر 1386, 03:01 صبح
سلام
خیلیهامون تا حالا دنبال راه حلی برای تبدیل تاریخ های شمسی و میلادی به یکدیگر می گشتیم. توابع و متدهای زیادی هم معرفی شده. اما بعد از کلی کلنجار با توابع VB و آزمون روش ها، الگوریتم ها و کامپوننت های مختلف تازه فهمیدم که مایکروسافت با تقدیم روزشمار فارسی در نسخه 2005 وی بی، کارها را بسیار آسان کرده.
به دو تابع زیر دقت کنید:



Function ShamsiToMiladi(ByVal Year As Integer, ByVal Month As Integer, ByVal Day As Integer) As Date
Dim A As New System.Globalization.PersianCalendar
Return A.ToDateTime(Year, Month, Day, 0, 0, 0, 0)
End Function




Function MiladiToShamsi(ByVal Year As Integer, ByVal Month As Integer, ByVal Day As Integer) As String
Dim A As Date = Year & "/" & Month & "/" & Day
Dim B As New System.Globalization.PersianCalendar
Return B.GetYear(A) & "/" & B.GetMonth(A) & "/" & B.GetDayOfMonth(A)
End Function


همین روش، برای تاریخ های قمری هم قابل اجراست، اما مشکل اینجاست که تاریخ های قمری که مایکروسافت محاسبه می کند، بر اساس تقویم عربستان سعودی است، نه تقویم قمری ایران. برای حل این مشکل هم باید راه حلی باشد، اگر کسی پیدا کرد لطفاً بگوید.

با تشکر

nkm
شنبه 09 تیر 1386, 13:38 عصر
اگه تونستی به عنوان تاریخ پیش فرض قرارش بدی خیلی هنر کردی!

someCoder
شنبه 09 تیر 1386, 13:51 عصر
دوستان عزیز، اینجا جای کل کل که نیست. دوستمون چیزی که فکر میکرد ممکنه بعضیها دنبالش باشن رو گفته. حالا این جملات "خیلی عقبی" و "اگه تونستی ... هنر کردی!" رو من نمیفهمم هدف چیه؟!

ضمنا جواد جان، مخصوص VB که نیست. کلا تو 2005 این کلاس اضافه شده.

Microsoft.net
شنبه 09 تیر 1386, 17:19 عصر
مشکل کارت اینجاست که به جای ساعت و دقیقه و ثانیه و میلی ثانیه عدد 0 گذاشتی که باعث میشه تو یه حالت خاص تاریخ رو دست نشون نده . مایکروسافت تو 2005 تبدیل تاریخ شمسی رو بر اساس میلی ثانیه انجام میده که باعث شده خیلی دقیق عمل کنه ، حالا شما همشو 0 گذاشتی احتمالا یه جایی به مشکل بر میخوری !

javad2000
یک شنبه 10 تیر 1386, 00:24 صبح
مشکل کارت اینجاست که به جای ساعت و دقیقه و ثانیه و میلی ثانیه عدد 0 گذاشتی که باعث میشه تو یه حالت خاص تاریخ رو دست نشون نده . مایکروسافت تو 2005 تبدیل تاریخ شمسی رو بر اساس میلی ثانیه انجام میده که باعث شده خیلی دقیق عمل کنه ، حالا شما همشو 0 گذاشتی احتمالا یه جایی به مشکل بر میخوری !
سلام
از اظهار لطف همگی متشکرم.
میشه لطفاً بگید کجا موجب اشتباه میشه؟ مثلاً میتونید یه تاریخ مثال بزنید؟

با تشکر

nkm
یک شنبه 10 تیر 1386, 07:03 صبح
من منظوری نداشتم!
فقط هدفم این بود حالا که پی این هستی
بگرد و یک چیزی پیدا کن که بشه تاریخ کنترلر ها را هم شمسی کرد

راستی راهی براش نیست؟؟؟؟

__H2__
یک شنبه 10 تیر 1386, 10:41 صبح
سلام

مشکل کارت اینجاست که به جای ساعت و دقیقه و ثانیه و میلی ثانیه عدد 0 گذاشتی که باعث میشه تو یه حالت خاص تاریخ رو دست نشون نده . مایکروسافت تو 2005 تبدیل تاریخ شمسی رو بر اساس میلی ثانیه انجام میده که باعث شده خیلی دقیق عمل کنه ، حالا شما همشو 0 گذاشتی احتمالا یه جایی به مشکل بر میخوری !
من هم قبلاً همین فکر را میکردم! ولی جدیداً دارم شک میکنم! البته با یک امتحان ساده چند خطی قابل کشف است ولی اگر وقت اجازه دهد :گیج:

در کل پیشنهاد میکنم به دوستان که برای اطمینان کار و محکم کاری ساعت را به جای 0 عدد 12 ظهر قرار دهید تا به هیچ وجه در آینده هم مشکلی پیش نیاید و تبدیل بر اساس سر ظهر و وسط روز انجام گیرد. و قظیه اختلاف ساعت با مبداً پیش نیاید.

babakj
جمعه 15 تیر 1386, 15:59 عصر
کاربر جواد 2000 عزیز واقعا تشکر و دستت درد نکنه اگر هم دوست داشتی به من ایمیل بده که با هم دوست خارج از اینجا هم باشیم

javad2000
جمعه 15 تیر 1386, 18:39 عصر
سلامآدرس ایمیلم اینه:javad2000 @ Gmail . com

ftmotlagh
شنبه 16 تیر 1386, 14:46 عصر
میشه یه مثال بزنید.
متشکرم

ftmotlagh
یک شنبه 17 تیر 1386, 10:46 صبح
اِ چرا کسی مثال نمی زنه من منتظرم ما !

javad2000
یک شنبه 17 تیر 1386, 14:55 عصر
اِ چرا کسی مثال نمی زنه من منتظرم ما !
سلام دوست عزیز
چه جور مثالی میخواید؟
بعد از اضافه کردن اون کد (پست اول) به قسمت کدها، در هرجای دلخواه می تونید تابع رو فراخوانی کنید تا تاریخ رو براتون تبدیل کنه. مثلاً



Dim A as Date = ShamsiToMiladi (1386,4,17)


اونوقت برنامه، مقدار A رو معادل 8/7/2007 بهتون تحویل میده.
برای میلادی به شمسی هم از همین روش استفاده می کنیم.
اگه ابهامی هست، توضیح بدم.