IsDate正在返回意外结果

时间:2014-10-23 19:38:01

标签: vb.net

当我在即时窗口中做的时候

? 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

3 个答案:

答案 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