2016-11-12 33 views
2
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範圍內,則返回一個假的布爾值。檢查的TimeOfDay是在規定的範圍內

P.s.對不起英文不好,我希望你能夠解釋我的問題。

+0

我搜索某個字符串,因爲我不知道如何將timeofday轉換爲utc + 1時間。 –

回答

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!那個是從哪裏來的?它是字符串中第一個字符的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 

的代碼測試,如果時間是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) 
+0

DateTime.Hour屬性返回一個整數。它計算自午夜以來的小時數並向下舍入到最接近的整數。因此,如果時間是晚上7點30分,DateTime.Now.Hour將返回19,並且發佈的函數將返回True。然而,下午7點30分在13至19小時範圍之外,因此它應該返回False。爲了確定時間是否在某個小時範圍內,自午夜以來的小時數需要以Double計算。 –

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點到晚上7點通用時間加一小時制,請致電:

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

,它將返回true,如果當前時間是下午1點到晚上7點和假,如果之間它超出了範圍。

相關問題