Piyush
Piyush

Reputation: 5315

Validate the date format in vb.net

I have the grid cell value to validate for a correct format as below

Date value should be in DD-MON-YYYY format and for this i am using below validation

Public Function ValidateDateForError(ByVal checkInputValue As String) As Boolean
   Dim returnError As Boolean
    Dim dateVal As DateTime
    If Date.TryParseExact(checkInputValue, "DD-MON-YYYY",
           System.Globalization.CultureInfo.CurrentCulture, 
           DateTimeStyles.None, dateVal) Then
        returnError = True
    Else
        MessageBox.Show("not converted")
    End If
    Return returnError
End Function`

DateTime value should be in DD-MON-YYYY HH:MI:SS format and for this i am using below validation

Public Function ValidateDateTimeForError(ByVal checkInputValue As String) As Boolean
    Dim returnError As Boolean
    Dim dateVal As DateTime
    If DateTime.TryParseExact(checkInputValue, "DD-MON-YYYY HH:MI:SS",
            System.Globalization.CultureInfo.CurrentCulture, 
            DateTimeStyles.None, dateVal) Then
        returnError = True
    End If
    Return returnError
End Function`

EDate (valid European date) value should be in DD/MM/YY format and for this i am using below validation

 Public Function ValidateEDateForError(ByVal checkInputValue As String) As Boolean
    Dim returnError As Boolean
    Dim dateVal As Date
    If Date.TryParseExact(checkInputValue, "DD/MM/YY",
           System.Globalization.CultureInfo.CurrentCulture, 
           DateTimeStyles.None, dateVal) Then
        returnError = True
    End If
    Return returnError
End Function`

JDate (valid Julian date) value should be in MM/DD/YY format and for this i am using below validation

 Public Function ValidateJDateForError(ByVal checkInputValue As String) As Boolean
    Dim returnError As Boolean
    Dim dateVal As Date
    If Date.TryParseExact(checkInputValue, "MM/DD/YY",
           System.Globalization.CultureInfo.CurrentCulture, 
           DateTimeStyles.None, dateVal) Then
        returnError = True
    End If
    Return returnError
End Function`

but none of above is working. could anyone tell me where i am making mistake?

Thanks in Advance.

Upvotes: 1

Views: 35171

Answers (1)

Using ParseExact means that you will be telling it the precise format the string will be in. These are case sensitive to allow things like H vs h for 12/24 clock and MM vs mm to distinguish Month from Minutes. So, "DD-MON-YYYY" is invalid, "dd-MM-yyyy" may be what you are after.

But, this means the user would always have to enter 2 digits for the day and month as in "19-07-2014" or "04-07-2014" which they are often not inclined to do, and seems harsh to impose. TryParseExact will take an array of formats so you can be flexible:

 Dim strFoo As String = "19-7-2014"        ' d-MM-yyyy
 Dim strBar As String = "19-07-2014"       ' dd-MM-yyyy
 Dim strJuly4 As String = "4-7-2014"       ' d-M-yyyy

 ' several possible format styles
 Dim formats() As String = {"d-MM-yyyy", "dd-MM-yyyy", 
      "dd-M-yyyy", "d-M-yyyy"}

 Dim thisDt As DateTime

 ' this should work with all 3 strings above
 If DateTime.TryParseExact(strFoo, formats,
                           Globalization.CultureInfo.InvariantCulture,
                           DateTimeStyles.None, thisDt) Then
    Console.WriteLine("Success! {0}", thisDt.ToString)

End If

Most of the time there it is silly to force them to enter "04" for a month or day and d/M/yyyy will work with strings with the leading "0" (but not the reverse!). Its is added here mainly to show how to pass an array of format patterns.

DO consult MSDN for the proper Standard Date and Time Format Strings


As for Julian Dates, one form of them is to use the form yyDDD to denote the 2 digit year and day of year for the last 3 digits. I dont know if the convention for this changed after 1/1/2000 when all Julian for this Century would sort below those for the 1990s. Still, here is how it is done:

Dim jdt As DateTime = #2/11/2010#
Dim jdate As String = xdt.Year.ToString & xdt.DayOfYear.ToString("000")
' ===>  '2010042   or 42nd day of 2010

jdate = (xdt.Year - 2000).ToString("00") & xdt.DayOfYear.ToString("000")
' ===>  '10042   or 42nd day of 2010

Upvotes: 4

Related Questions