PDA

View Full Version : آموزش - مقدماتی - تبدیل تاریخ میلادی به شمسی و بلعکس و اعتبار سنجی آن



BlueTree_team
جمعه 27 اردیبهشت 1387, 16:39 عصر
با گذشت چندین سال از ارائه دات نت فریم ورک 2 هنوز خیلی ها از وجود تاریخ شمسی در vs.net اطلاعی ندارند و یا طرز استفاده از اونو نمی دونند برای استفاده از تاریخ شمسی راههای زیادی وجود داره ، من روشی رو که خودم استفاده می کنم اینه:
میلادی به شمسی:


Function MiladiToShamsi(ByVal Year AsInteger, ByVal Month AsInteger, ByVal Day AsInteger) AsString
Try
Dim Date_M AsDate = Year & "/" & Month & "/" & Day
Dim Date_Sh AsNew Globalization.PersianCalendar
Return Date_Sh.GetYear(Date_M) & "/" & Format(Date_Sh.GetMonth(Date_M), "00") & "/" & Format(Date_Sh.GetDayOfMonth(Date_M), "00")
Catch ex As Exception
Return 0
EndTry
EndFunction


مثال:



MaskedTextBoxDateShamsi.Text = MiladiToShamsi(Date.Now.Year, Date.Now.Month, Date.Now.Day)

شمسی به میلادی:


Function ShamsiToMiladi(ByVal ShamsiDate AsString) AsString
If IsNumeric(ShamsiDate.Replace("/", "")) = FalseThenReturn 0
Try
If ShamsiDate.Length <> 10 ThenReturn 0
Dim Date_Sh AsNew Globalization.PersianCalendar()
Dim Date_M As DateTime = Date_Sh.ToDateTime(ShamsiDate.Substring(0, 4), ShamsiDate.Substring(5, 2), _
ShamsiDate.Substring(8, 2), _
0, 0, 0, 0, _
Globalization.PersianCalendar.PersianEra)
Return Date_M.ToShortDateString
Catch ex As Exception
Return 0
EndTry
EndFunction


مثال :


ShamsiToMiladi("1387/03/01")




برای اعتبار سنجی تاریخ وارد شده شمسی کافیه اونو به تابع ShamsiToMiladi بدید و اگه مقدار برگشتیتون 0 بود تاریخ صحیح نیست. (مثل وارد کردن 31 اسفند و یا هر تاریخ غلط دیگه ای )
شما می تونید این کارو به دو صورت انجام بدین وقتی می خواین اطلاعات رو ثبت کنید و یا وقتی که فوکوس از تکس باکس تاریخ خارج شد و تا وقتی که تاریخ صحیح وارد نشد اجازه خروج از تکس باکس تاریخ رو به کاربر ندین .
روی فرم یک MaskedTextBox قرار بدین و خاصیت ماسک Mask اونو 0000/00/00 ست کنید



PrivateSub MaskedTextBoxDateShamsi_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MaskedTextBoxDateShamsi.Leave
If ShamsiToMiladi(MaskedTextBoxDateShamsi.Text) = "0"Then
MsgBox("تاریخ صحیح نمی باشد")
MaskedTextBoxDateShamsi.Focus()
MaskedTextBoxDateShamsi.SelectAll()
EndIf
EndSub

INeedHelp
جمعه 27 اردیبهشت 1387, 16:51 عصر
روش بررسی صحت تاریختون جالب بود دیگه لازم نیست برای بررسی صحت تاریخ وارد شده کدهای زیادی بنویسیم.