检查timeofday是否在指定范围内

时间:2016-11-12 14:01:02

标签: .net vb.net boolean timeofday

    Dim time As String = TimeOfDay.ToString("tt")
    Dim time2 As Integer = TimeOfDay.ToString("hh:mm:ss")
    If time = ("du.") Then
        timehre = (time2 + 12)
        Debug.WriteLine("munkaidoben")
    Else
        Debug.Write("munkaidoben = false")
        timehre = time
    End If

    For munkaido As Integer = 13 To 19

        If time2.ToString.Contains(munkaido) Then
            duplaar = False
        Else
            duplaar = True
        End If
    Next

Timehre已被宣布为integrer.So,我想要的是,在utc + 1中获取时间,如果时间在13:00 - 19:00范围内,则返回一个真正的布尔值,如果不是在13:00 - 19:00的范围内,然后返回一个错误的布尔值。

P.S。抱歉英语不好,我希望你能解释我的问题。

2 个答案:

答案 0 :(得分:0)

首先,启用Option Strict

Dim time2 As Integer = TimeOfDay.ToString("hh:mm:ss")
...
For munkaido As Integer = 13 To 19
    If time2.ToString.Contains(munkaido) Then

这是一个很好的例子,为什么不使用Option Strict对玩具程序以外的其他人来说是个坏主意。如果时间是“10:45:23”,则time2中的结果将为49!那个是从哪里来的?它是字符串中第一个字符的here

稍后,代码将测试文本"49"是否包含13 - 19,这是永远不会成立的。通过转换,time2只能在"48""57"之间。从语法上讲,它是无效的,因为字符串永远不能包含整数。

不使用Option Strict会导致此类不需要的转换和错误。不要让编译器猜测你的意思:
工具 - >选项 - >项目和解决方案 - > VB默认值 - > Option Strict On

如果时间在某个范围内,您的代码并未真正测试,只是13-19是否出现在字符串中的某个位置。如果分钟或秒是其中一个值,它将验证。

不要使用字符串来执行DateTime操作。 DateTime类型具有您可以使用的完整属性集:

Dim dt = DateTime.Now

If dt.Hour >= 13 AndAlso (dt.Hour <= 18 OrElse
                         (dt.Hour = 19 AndAlso dt.Minute = 0)) Then
    Return True
Else
    Return False
End If

代码测试时间是否在13:00到19:00之间,而不仅仅是小时,以便检测 的19:01或19:59 > 19小时但是分钟在19:00之后放置,检查小时和分钟。

我不确定UTC如何发挥作用,但使用DateTime方法也很容易:

Dim dt = DateTime.Now.ToUniversalTime()

添加一小时:

Dim dt = DateTime.Now.ToUniversalTime.AddHours(1)

答案 1 :(得分:0)

我最近必须取得类似的成就。这就是我提出的。

Public Function GetHoursSinceMidnight(ByVal dDateTime As DateTime) As Double
    Dim myTimeSpan As TimeSpan = dDateTime - dDateTime.Date
    Return myTimeSpan.TotalHours
End Function

Public Function IsTimeInRange(ByVal dDateTime As DateTime, ByVal dStartTime As Double, ByVal dEndTime As Double) As Boolean
    Dim dTime As Double = GetHoursSinceMidnight(dDateTime)
    Return dTime >= dStartTime AndAlso dTime <= dEndTime
End Function

因此,要检查当前时间是否在通用时间加1小时的下午1点到7点之间,请致电:

IsTimeInRange(DateTime.Now.ToUniversalTime.AddHours(1), 13, 19)

如果当前时间介于下午1点到7点之间,则返回True,如果超出范围,则返回False。