VB 净日期比较
Posted
技术标签:
【中文标题】VB 净日期比较【英文标题】:VBNet Date Compare 【发布时间】:2012-02-03 09:03:43 【问题描述】:目前,我有这个代码。
Dim iCurrentDate As Date = Now
Dim iStartDate As Date = CDate(dtFrom.Text)
Dim iEndDate As Date = CDate(dtTo.Text)
If (iCurrentDate > iStartDate) And (iCurrentDate < iEndDate) Then
Console.WriteLine("Current date is within the range.")
'Other Codes here
Else
Console.WriteLine("Current date is in the range.")
'Other Codes here
End If
或
Dim iObj As Object = IIf((iCurrentDate > iStartDate) And (iCurrentDate < iEndDate), "Current date is within the range.", "Current date is in the range.")
Console.WriteLine(iObj.ToString)
'Other Codes here
上面的代码有什么替代品吗?就像 sql 查询中的 BETWEEN
一样?
【问题讨论】:
【参考方案1】:不,.NET 中没有 BETWEEN 运算符,你真的错过了吗?
注意:
你可以/应该use IF instead of IIF。
Dim message = _
If((iCurrentDate > iStartDate) AndAlso (iCurrentDate < iEndDate), _
"Current date is within the range.", _
"Current date is not in the range.")
更快:只有在第一个是 false
时才会评估第二部分,没有装箱/拆箱
更安全:没有 NullReferenceException,因为您忘记了上面的内容
它更具可读性和类型安全性
【讨论】:
先生,介意我问这个问题吗? AND 和 ANDALSO 有什么区别? 这里已经回答了这个问题:***.com/questions/302047/…。无论如何还是谢谢你。【参考方案2】:没有内置任何东西,但你可以有一个扩展方法:
<Extension()> _
Public Function IsBetween(theDate As DateTime, minDate As DateTime, maxDate As DateTime) As Boolean
Return theDate > minDate AndAlso theDate < maxDate
End Function
那么你可以这样使用它:
If iCurrentDate.IsBetween(iStartDate, iEndDate) Then
Console.WriteLine("Current date is within the range.")
'Other Codes here
Else
Console.WriteLine("Current date is not in the range.")
'Other Codes here
End If
或者像这样:
Console.WriteLine(If(iCurrentDate.IsBetween(iStartDate, iEndDate), _
"Current date is within the range.", _
"Current date is not in the range."))
【讨论】:
【参考方案3】:虽然没有直接的替代品,但我在选择案例中看到了这样的东西:
Select Case iCurrentDate
Case iStartDate To iEndDate
'is between
Case Else
'is not
End Select
不过,我从来没有使用过这样的东西。我不确定它的起源是什么。我通常会使用 AndAlso 对您的代码稍作修改:
If (iCurrentDate > iStartDate) AndAlso (iCurrentDate < iEndDate) Then
Console.WriteLine("Current date is within the range.")
'Other Codes here
Else
Console.WriteLine("Current date is in the range.")
'Other Codes here
End If
【讨论】:
有趣,我不知道您可以在这样的 Select Case 中比较日期。需要注意的一件事是它可能同时包含 iStartDate 和 iEndDate,因此它相当于:If iCurrentDate >= iStartDate AndAlso iCurrentDate <= iEndDate
是的,我从未测试过。我不确定使用它是好是坏,我从来没有找到任何关于它的文档。
我想这不是一个坏习惯,但它的使用是有限的,因为你不能从范围中排除开始和/或结束日期。通常在我的日期比较中,我会包括开始日期,但不包括结束日期,所以我不能直接使用 Select Case。以上是关于VB 净日期比较的主要内容,如果未能解决你的问题,请参考以下文章