I think that, for this exercise, because the date is irrelevant, you need to
create your own class that does some number crunching without using DateTime
structures at all.
Using the example you have given, it might be something like:
Public Class MyScheduleItem
Public Shared Function ConvertLocalToRemote(ByVal LocalTimeOfDay As
Integer, ByVal LocalDayOfWeek As DayOfWeek, ByVal RemoteOffset As Integer)
As String
Dim _RemoteTimeOfDay As Integer = LocalTimeOfDay + RemoteOffset
Dim _RemoteDayOfWeek As DayOfWeek = LocalDayOfWeek
Select Case _RemoteTimeOfDay
Case < 0
_RemoteDayOfWeek = CType(Convert.ToInt32(_RemoteDayOfWeek) - 1,
DayOfWeek)
_RemoteTimeOfDay = 1440 + _RemoteTimeOfDay
Case >= 1440
_RemoteDayOfWeek = CType(Convert.ToInt32(_RemoteDayOfWeek) + 1,
DayOfWeek)
End Select
Select case _RemoteDayOfWeek
Case < DayOfWeek.Sunday
_RemoteDayOfWeek = DayOfWeek.Saturday
Case > DayOfWeek.Saturday
_RemoteDayOfWeek = DayOfWeek.Sunday
End Select
Return String.Format("{0:#0}:{1:00} {2}", Fix(_RemoteTimeOfDay \ 60) ,
_RemoteTimeOfDay Mod 60, _RemoteDayOfWeek.ToString.SubString(0,3))
End Sub
End Class
Note that LocalTimeOfDay, _RemoteTimeOfDay and RemoteOffset are in units of
minutes thus handling times of day and offsets that are not whole hours.
Note also that the week is deemed to run from Sunday (0) to Saturday (6).
Call it with:
Console.WriteLine(MyScheduleItem.ConvertLocalToRemote(8 * 60,
DayOfWeek.Monday, -(16 * 60)))
Dissect it to your hearts content to see how it works and improve on it.