检查timeofday是否在指定范围内
Check if timeofday is in a specified range
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 范围内,则 return 一个真布尔值,如果它不在 13:00 - 19:00 范围内,那么 return 一个假布尔值。
P.s。抱歉英语不好,我希望你能理解我的问题。
首先,开启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
!那个是从哪里来的?它是字符串中第一个字符的 ASCII value。
稍后,代码将测试文本 "49"
是否包含永远不可能为真的 13 - 19。随着发生的转换,time2
只能介于 "48"
和 "57"
之间。从语法上讲,它是无效的,因为字符串永远不能包含整数。
不使用 Option Strict
会导致此类不需要的转换和错误。不要让编译器去猜测你的意思:
工具 -> 选项 -> 项目和解决方案 -> VB 默认值 -> 选项严格开启
您的代码并没有真正测试时间是否在一个范围内,只是测试 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
代码测试 time 是否在 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)
我最近不得不实现类似的目标。这就是我想出的。
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 点到晚上 7 点之间(世界标准时间加一小时),请调用:
IsTimeInRange(DateTime.Now.ToUniversalTime.AddHours(1), 13, 19)
如果当前时间在下午 1 点到晚上 7 点之间,它将 return 为真,如果超出范围则为假。
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 范围内,则 return 一个真布尔值,如果它不在 13:00 - 19:00 范围内,那么 return 一个假布尔值。
P.s。抱歉英语不好,我希望你能理解我的问题。
首先,开启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
!那个是从哪里来的?它是字符串中第一个字符的 ASCII value。
稍后,代码将测试文本 "49"
是否包含永远不可能为真的 13 - 19。随着发生的转换,time2
只能介于 "48"
和 "57"
之间。从语法上讲,它是无效的,因为字符串永远不能包含整数。
不使用 Option Strict
会导致此类不需要的转换和错误。不要让编译器去猜测你的意思:
工具 -> 选项 -> 项目和解决方案 -> VB 默认值 -> 选项严格开启
您的代码并没有真正测试时间是否在一个范围内,只是测试 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
代码测试 time 是否在 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)
我最近不得不实现类似的目标。这就是我想出的。
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 点到晚上 7 点之间(世界标准时间加一小时),请调用:
IsTimeInRange(DateTime.Now.ToUniversalTime.AddHours(1), 13, 19)
如果当前时间在下午 1 点到晚上 7 点之间,它将 return 为真,如果超出范围则为假。