验证vb.net中的日期格式

时间:2014-07-19 15:13:07

标签: vb.net validation date datetime

我有网格单元格值来验证格式是否正确,如下所示

日期值应为DD-MON-YYYY格式,为此我使用以下验证

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值应为DD-MON-YYYY HH:MI:SS格式,为此我使用以下验证

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(有效欧洲日期)​​值应为DD/MM/YY格式,为此我使用以下验证

 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(有效Julian日期)值应为MM/DD/YY格式,为此我使用以下验证

 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`

但上述情况均无效。谁能告诉我我在哪里犯错?

先谢谢。

1 个答案:

答案 0 :(得分:4)

使用ParseExact意味着您将告诉它字符串的确切格式。这些区分大小写,允许Hh等12/24时钟和MM vs mm区分月份和分钟。所以," DD-MON-YYYY"无效," dd-MM-yyyy"可能就是你想要的。

但是,这意味着用户总是必须为日期和月份输入2位数,如同#19; 19-07-2014"或" 04-07-2014"他们往往不倾向于做,而且似乎很苛刻。 TryParseExact将采用一系列格式,以便您可以灵活变通:

 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

大部分时间迫使他们进入" 04"一个月或一天,d/M/yyyy将使用前导" 0" (但不是相反!)。它的添加主要是为了展示如何传递格式模式数组。

DO 向MSDN咨询正确的Standard Date and Time Format Strings


至于Julian Dates,一种形式是使用yyDDD形式表示最后3位数字的2位数年份和年份。我不知道2000年1月1日之后,当这个世纪的所有朱利安排在20世纪90年代之后,这个会议的变化是否发生了变化。不过,这是如何完成的:

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