我有一个传统的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
答案 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