IsDate允许“早上6点”验证为日期?

时间:2015-04-06 20:20:53

标签: vb.net

我有一个传统的VB.Net应用程序,用户输入开始日期和结束日期。出于某种原因,下面代码中的IsDate函数允许“6:00 AM”作为有效日期传递?

我该如何解决这个问题?

If IsDate(evdetail.ToDate) Then
      .DateTimeEnded = evdetail.ToDate
Else
      .DateTimeEnded = "12/31/2099 6:00:00 AM"
End If

1 个答案:

答案 0 :(得分:3)

根据MSDN,仅限时间字符串" 6:00 AM"被IsDate视为有效。

来自文章:

Dim firstDate, secondDate As Date
Dim timeOnly, dateAndTime, noDate As String
Dim dateCheck As Boolean
firstDate = CDate("February 12, 1969")
secondDate = #2/12/1969#
timeOnly = "3:45 PM"
dateAndTime = "March 15, 1981 10:22 AM"
noDate = "Hello"
dateCheck = IsDate(firstDate)
dateCheck = IsDate(secondDate)
dateCheck = IsDate(timeOnly) ' <-------
dateCheck = IsDate(dateAndTime)
dateCheck = IsDate(noDate)

在前面的示例中,IsDate在前四次调用时返回True,在上次调用时返回False。

如果您希望它根据您的评论失败,请查看使用DateTime.TryParseExact代替。

这些行中的某些内容可以满足您的需求,但我假设evdetail.ToDate.DateTimeEnded是字符串类型,并且所需的语言环境是en-US。

Dim dt As DateTime
Dim ci As New CultureInfo("en-US")
If DateTime.TryParseExact(evdetail.ToDate, "MM/dd/yyyy hh:mm tt", ci, DateTimeStyles.None, dt) Then
    .DateTimeEnded = evdetail.ToDate
Else
    .DateTimeEnded = "12/31/2099 6:00:00 AM"
End If