PDA

View Full Version : صحت ورود تاریخ شمسی



amir_vb2005
پنج شنبه 02 خرداد 1392, 21:50 عصر
با سلام خدمت تمامی دوستان عزیز:

میخواستم بدونم چطور در VB.NET از صحت ورود تاریخ شمسی مطمئن شم. چون من برنامه در حال نوشتن دارم که در آن باید کاربر تاریخ را به صورت شمسی وارد کند و اگر تاریخ وارده درست نباشد مثلا تاریخ "1392/25/50" را وارد کند برنامه پیامی مبنی بر نادرست بودن تاریخ وارده بدهد. لطفا من را راهنمایی کنید .


با تشکر:خجالت::متفکر::گریه:

h_a_m_i_d
پنج شنبه 02 خرداد 1392, 23:10 عصر
دوست عزیز خیلی راحت هست اگه توضیحاتم رو متوجه نشدی بگو برات سورس بذارم
1-از masktextbox استفاده میکنی
2-مقدار text اونو میگیری
3-خوب دیگه حالا چهار رقم اول میشه سال که شرط میذاری براش بین دو تا عدد بخصوص باشه و همینطور به بعد

shahryari
جمعه 03 خرداد 1392, 12:28 عصر
سلام (تابع تست تاریخ شمسی)
این تابع را به کدهاتون اضافه کنید
Public Function date_tester(ByVal a As String) As Boolean
Dim i As Integer
Dim b As Boolean
i = 0
Try
b = True
i = Val(Microsoft.VisualBasic.Right(a, 2))
If i > 31 Or i = 0 Then
b = False
GoTo 100
End If
i = Val(Microsoft.VisualBasic.Mid(a, 4, 2))
If i > 12 Or i = 0 Then
b = False
GoTo 100
End If
Catch ex As Exception

End Try
100: Return b
End Function


این تابع یک پارامتر از نوع استریگ میگیرد مثال "1391/01/01" مقدار صحیح بودنش را بعنوان بولین برمیگرداند
مثال:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(date_tester(TextBox1.Text))
End Sub
موفق و پیروز باشید

amir_vb2005
شنبه 04 خرداد 1392, 20:45 عصر
ممنونم دوست عزیز

محمد آشتیانی
یک شنبه 05 خرداد 1392, 12:37 عصر
سلام

اگه فرمت تاریخ مورد استفادت YYYY/MM/DD باشه میتونی از تابع IsDate خود دات نت استفاده کنی، مقدار برگشتی تابع هم Boolean هست.

vb341
یک شنبه 05 خرداد 1392, 21:23 عصر
راه ساده تر استفاده از Shamsi.dll هست . تو پروژه Import کنید و باهاش راحت مقادیر تاریخ رو چک کنید

vb341
یک شنبه 05 خرداد 1392, 21:26 عصر
از این روش هم میتونین استفاده کنید


Public Function CheckDate(ByVal T As String) As Boolean
Try
Dim s1 As Integer
Dim s2 As Integer
Dim s3 As Integer
Dim s4 As Integer
s1 = Microsoft.VisualBasic.Mid(t, 6, 1)
s2 = Microsoft.VisualBasic.Mid(t, 6, 2)
s3 = Microsoft.VisualBasic.Mid(t, 9, 1)
s4 = Microsoft.VisualBasic.Mid(t, 9, 2)

If s2 = 0 Then Return False
If s2 > 6 And s4 > 30 Then
Return False
End If

If s4 = 0 Then
Return False
End If

If s1 > 1 Or s2 > 12 Or s3 > 3 Or s4 > 31 Then

Return False
Else
Return True
End If
Catch ex As System.Exception
Return False
End Try
End Function


الیته زحمت این کد رو دوست عزیزم شهریار کشیدن .

sh
یک شنبه 19 خرداد 1392, 09:53 صبح
از امکانات خود دات نت هم میشه استفاده کرد
فرض کنید یک maskedtextbox با پروپرتی های زیر داریم


masked.Mask = "9999/99/99"
masked.PromptChar = " "



یک تابع برای ارزیابی تاریخ :


Public Function validation(ByVal Pdate As String) As Boolean
Try
Dim pc As New Globalization.PersianCalendar
Dim spliter() As String
spliter = Split(Pdate, "/")
Return IsDate(pc.ToDateTime(spliter(0), spliter(1), spliter(2), 0, 0, 0, 0))
Catch ex As Exception
Return False
End Try
End Function


حالا در رویداد validation می نویسیم :



Private Sub masked_Validating(sender As Object, e As CancelEventArgs) Handles Me.Validating

If validation(masked.Text) = False Then
MessageBox.Show("لطفاً تاریخ را بصورت صحیح وارد نمائید" )
e.Cancel = True
End If
End Sub