Public Class MyTime
Private timeInSeconds As Long = 0
REM Times in seconds
Const MAX_TIME As Integer = 3600000, ONE_HOUR As Integer = 3600, ONE_MIN As Integer = 60
REM Allow users to set the time components
Public Sub setTime(ByVal hrs As Integer, ByVal mins As Integer, ByVal secs As Integer)
Me.timeInSeconds = (((hrs * ONE_HOUR) + (mins * ONE_MIN)) + secs)
End Sub
REM Allow users to get the time components
Public Sub getTime(ByRef hrs As Integer, ByRef mins As Integer, ByRef secs As Integer)
secs = (Me.timeInSeconds Mod ONE_MIN)
mins = ((Me.timeInSeconds Mod ONE_HOUR) / ONE_MIN)
hrs = (Me.timeInSeconds / ONE_HOUR)
End Sub
REM Allow users to access the hour component
Public Property hour() As Integer
Get
Return (Me.timeInSeconds / ONE_HOUR)
End Get
Set(ByVal value As Integer)
Dim num As Integer = (Me.timeInSeconds / ONE_HOUR)
Me.timeInSeconds = ((Me.timeInSeconds - (num * ONE_HOUR)) + (value * ONE_HOUR))
End Set
End Property
REM Allow users to access the minute component
Public Property minute() As Integer
Get
Return (Me.timeInSeconds Mod ONE_HOUR) / ONE_MIN
End Get
Set(ByVal value As Integer)
Dim num As Integer = ((Me.timeInSeconds Mod ONE_HOUR) / ONE_MIN)
Me.timeInSeconds = ((Me.timeInSeconds - (num * ONE_MIN)) + (value * ONE_MIN))
End Set
End Property
REM Allow users to access the second component
Public Property second() As Integer
Get
Return (Me.timeInSeconds Mod ONE_MIN)
End Get
Set(ByVal value As Integer)
Me.timeInSeconds = ((Me.timeInSeconds - (Me.timeInSeconds Mod ONE_MIN)) + value)
End Set
End Property
REM Advance one second
Public Sub advanceSecond(ByVal seconds As Integer)
Me.timeInSeconds += seconds
Me.timeInSeconds = (Me.timeInSeconds Mod MAX_TIME)
End Sub
REM Rollback one second
Public Sub rollbackSecond(ByVal seconds As Integer)
If (seconds <= Me.timeInSeconds) Then
Me.timeInSeconds -= seconds
Else
seconds = (seconds Mod MAX_TIME)
Me.timeInSeconds = (Me.timeInSeconds - seconds)
Me.timeInSeconds = (Me.timeInSeconds + MAX_TIME)
Me.timeInSeconds = (Me.timeInSeconds Mod MAX_TIME)
End If
End Sub
End Class