我有网格单元格值来验证格式是否正确,如下所示
日期值应为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`
但上述情况均无效。谁能告诉我我在哪里犯错?
先谢谢。
答案 0 :(得分:4)
使用ParseExact
意味着您将告诉它字符串的确切格式。这些区分大小写,允许H
与h
等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