I have a use case that needs to determine if a task should be queued until a later date or submitted for processing immediately.
The logic for this is based upon a business "open/close" hours. The open/close hours are specified in their local time zone: Ex: Open 8:00 AM, Close 5:00 PM. Because 8:00 AM is a relative time, dependent on the specific day, their local timezone is stored separately.
Tasks are logged with a created property in the server time UTC. I then calculate an offset in number of hours by iterating through the number of hours in a week. Before this, I convert the server time from UTC to the clients TZ (so the comparison is done in local client time)
If the offset is 0 I can run the task, if the offset is > 0 I offset the server utc time by the number of hours returned. Is there a better way of doing this? This seems like a common problem that must have some better solution.
 Private Function CalcDelay() As Integer
    Dim d = _localTime '// Client local time currently
    Dim n = d.DayOfWeek()
    Dim now = d.Hour() & "." & d.Minute()
    Dim delayHours As Integer = 0
    Dim _day
    For i = 0 To 168
        d = _localTime.AddHours(i)
        n = d.DayOfWeek()
        now = d.Hour() & "." & d.Minute()
        _day = _bh.Hours(n)
        If (ConvertTime(now) >= ConvertTime(_bh.Hours(n).Open1c) And ConvertTime(now) < ConvertTime(_bh.Hours(n).Close1c)) _
            Or (ConvertTime(now) >= ConvertTime(_bh.Hours(n).Open2c) And ConvertTime(now) < ConvertTime(_bh.Hours(n).Close2c)) Then
            delayHours = i
            Exit For
        End If
    Next
    Return delayHours
End Function
ConvertTime will just grab the customers open/close times represented as HH.MM (08.00, 15.00) etc
