当我在即时窗口中做的时候
? IsDate("09/01/14")
True
? IsDate("10/23/14")
False
我不确定为什么IsDate(“10/23/14”)返回false。
有什么建议吗?
这是我的全部功能。当我通过09/01/14然后它没有返回任何错误,但是当我通过10/23/14然后它返回错误。
Public Shared Sub CheckForDate(ByVal ChkText As String, ByRef ErrorCount As Integer)
Try
ChkText = ChkText.Replace(" ", "").Trim()
Dim dt As DateTime = DateTime.ParseExact(ChkText, "MM/dd/yyyy", Globalization.CultureInfo.InvariantCulture)
If Not IsDate(dt) Then
ErrorCount += 1
End If
Catch
If Len(ChkText) > 0 Then
If Not IsDate(ChkText) Then
ErrorCount += 1
End If
End If
End Try
End Sub
我试过这个
? DateTime.TryParse("09/01/14", dt)
True
? DateTime.TryParse("10/23/14", dt)
False
答案 0 :(得分:1)
isDate中的日期可能会被处理为dd / mm / yy而不是mm / dd / yy。 在您的应用程序中尝试此代码,或确保您的系统处理日期为mm / dd / yy:
Imports System.Globalization
Dim ciNewFormat As New CultureInfo(CultureInfo.CurrentCulture.ToString())
ciNewFormat.DateTimeFormat.ShortDatePattern = "MM/dd/yy"
System.Threading.Thread.CurrentThread.CurrentCulture = ciNewFormat
答案 1 :(得分:1)
使用TryParseExact()
。这将强制您包含指示预期格式的信息。
正如在对此问题的评论中所表示的那样,可能的问题是您运行的机器采用DD / MM / YY格式而不是预期的MM / DD / YY格式。
答案 2 :(得分:1)
您必须指定与所用日期格式相对应的文化:
Public Shared Function IsUSDate(input As String) As Boolean
Dim culture = CultureInfo.CreateSpecificCulture("en-US")
Dim d As DateTime
Return DateTime.TryParse(input, culture, DateTimeStyles.None, d)
End Function