使用案例陈述查找时间范围

时间:2014-06-05 09:12:29

标签: vb.net

大家晚上好晚上......

有人可以帮我吗?

具有“时间价值”,例如。 08:00:00 ......

我想找到这个值落入使用case语句的范围......

我不擅长使用时间格式...

任何人都可以提供帮助吗?

这只是一个例子:(代码不起作用......只是一个例子)

datime = Now().ToString("hh:mm:ss")
Select Case datime
Case "08:00:00" To "09:00:00"
lblRange.Text = i.ToString()
Case "09:00:01" To "09:14:59"
lblRange.Text = (i - 0.25).ToString()
Case "09:15:00" To "09:29:59"
lblRange.Text = (i - 0.5).ToString()

2 个答案:

答案 0 :(得分:2)

如果您不遵守Tim的建议,可以使用此

    Dim timeToCheck As DateTime = #7:10:00 PM#

    Select Case timeToCheck.TimeOfDay
        Case New TimeSpan(8, 0, 0) To New TimeSpan(9, 0, 0)
            Stop
        Case New TimeSpan(9, 0, 1) To New TimeSpan(9, 14, 59)
            Stop
        Case New TimeSpan(9, 15, 0) To New TimeSpan(9, 29, 59)
            Stop
        Case New TimeSpan(19, 0, 0) To New TimeSpan(19, 14, 59)
            Stop
        Case Else
            Stop
    End Select

您不想使用字符串。

答案 1 :(得分:1)

在这种情况下,我不会使用Select...Case语句,它应该仅用于简单条件。您可以使用If-Else代替。

但是,由于您实际上正在检查给定时间是否在范围之间,您还可以使用以下使用LINQ的代码。

首先,您需要定义一个包含所有范围的集合。你可以使用List(Of YourClass)甚至是一个无类型的数组:

Dim ranges = {
    New With {.Start = TimeSpan.FromHours(8), .End = TimeSpan.FromHours(9)},
    New With {.Start = New TimeSpan(9, 0, 1), .End = New TimeSpan(9, 14, 59)},
    New With {.Start = New TimeSpan(9, 15, 0), .End = New TimeSpan(9, 29, 59)}
}

您想要比较TimeSpan,您可以获得Date.Now.TimeOfDay的当前时间。

Dim now As TimeSpan = Date.Now.TimeOfDay
Dim matchingRange = ranges.
    FirstOrDefault(Function(r) now >= r.Start AndAlso now <= r.End)

Enumerable.FirstOrDefault返回时间范围内的第一个,否则返回Nothing

If matchingRange IsNot Nothing Then
    lblRange.Text = String.Format("Between {0} and {1}",
                                  matchingRange.Start,
                                  matchingRange.End)
End If