Namespace System Class TimeSpan m_Time As Int64 Public Static MaxValue = 3162240000000000000 As Int64 Static MinValue = -3162240000000000000 As Int64 Static TicksPerDay = 864000000000 As Int64 Static TicksPerHour = 36000000000 As Int64 Static TicksPerMinute = 600000000 As Int64 Static TicksPerSecond = 10000000 As Int64 Static TicksPerMillisecond = 10000 As Int64 Static Zero = 0 As Int64 Sub TimeSpan(ticks As Int64) If (ticks > MaxValue) Or (ticks < MinValue) Then 'ArgumentOutOfRangeException debug Exit Sub End If m_Time = ticks End Sub Sub TimeSpan(ts As TimeSpan) m_Time = ts.m_Time End Sub Sub ~TimeSpan() End Sub Function Operator+ (ts As TimeSpan) As TimeSpan Return FromTicks(m_Time + ts.m_Time) End Function Function Operator- (ts As TimeSpan) As TimeSpan Return FromTicks(m_Time - ts.m_Time) End Function Function Operator* (value As Long) As TimeSpan Return FromTicks(m_Time * value) End Function Function Operator/ (value As Long) As TimeSpan Return FromTicks(m_Time \ value) End Function Function Operator== (ts As TimeSpan) As Boolean Return Equals(ts) End Function Function Operator<> (ts As TimeSpan) As Boolean Return Not Equals(ts) End Function Function Operator> (ts As TimeSpan) As Boolean If CompareTo(ts) > 0 Then Return True Else Return False End If End Function Function Operator< (ts As TimeSpan) As Boolean If CompareTo(ts) < 0 Then Return True Else Return False End If End Function Function Operator>= (ts As TimeSpan) As Boolean If CompareTo(ts) => 0 Then Return True Else Return False End If End Function Function Operator<= (ts As TimeSpan) As Boolean If CompareTo(ts) <= 0 Then Return True Else Return False End If End Function 'Public Properties Function Ticks() As Int64 Return m_Time End Function Function Milliseconds() As Long Return (m_Time \ TicksPerMillisecond Mod 1000) As Long End Function Function Seconds() As Long Return (m_Time \ TicksPerSecond Mod 60) As Long End Function Function Minutes() As Long Return (m_Time \ TicksPerMinute Mod 60) As Long End Function Function Hours() As Long Return (m_Time \ TicksPerHour Mod 24) As Long End Function Function Days() As Long Return (m_Time \ TicksPerDay) As Long End Function Function TotalMilliseconds() As Double Return m_Time / TicksPerMillisecond End Function Function TotalSeconds() As Double Return m_Time / TicksPerSecond End Function Function TotalMinute() As Double Return m_Time / TicksPerMinute End Function Function TotalHours() As Double Return m_Time / TicksPerHour End Function Function TotalDays() As Double Return m_Time / TicksPerDay End Function Function Add(ts As TimeSpan) As TimeSpan Return FromTicks(m_Time + ts.m_Time) End Function Static Function Compare(ts1 As TimeSpan, ts2 As TimeSpan) As Long If ts1.m_Time < ts2.m_Time Then Return -1 ElseIf ts1.m_Time = ts2.m_Time Then Return 0 ElseIf ts1.m_Time > ts2.m_Time Then Return 1 End If End Function Function CompareTo(ts As TimeSpan) As Long Return (m_Time - ts.m_Time) As Long End Function Function Duration() As TimeSpan Return FromTicks(System.Math.Abs(m_Time)) End Function Function Equals(ts As TimeSpan) As Boolean Return Equals(This, ts) End Function Static Function Equals(ts1 As TimeSpan, ts2 As TimeSpan) As Boolean If ts1.m_Time = ts2.m_Time Then Return True Else Return False End If End Function Override Function ToString() As String If Ticks < 0 Then Dim span = Negate() As TimeSpan Return ActiveBasic.Strings.SPrintf("-%d:%.2d:%.2d:%.2d.%.4d", New Int32(span.Days) ,New Int32(span.Hours), New Int32(span.Minutes), New Int32(span.Seconds), New Int32(span.Milliseconds)) Else Return ActiveBasic.Strings.SPrintf("%d:%.2d:%.2d:%.2d.%.4d", New Int32(Days) ,New Int32(Hours), New Int32(Minutes), New Int32(Seconds), New Int32(Milliseconds)) End If End Function Static Function FromTicks(ticks As Int64) As TimeSpan If (ticks > MaxValue) Or (ticks < MinValue) Then 'ArgumentOutOfRangeException debug Exit Function End If Return New TimeSpan( ticks ) End Function Static Function FromMilliseconds(value As Double) As TimeSpan Return FromTicks((value * TicksPerMillisecond) As Int64) End Function Static Function FromSeconds(value As Double) As TimeSpan Return FromTicks((value * TicksPerSecond)As Int64) End Function Static Function FromMinutes(value As Double) As TimeSpan Return FromTicks((value * TicksPerMinute) As Int64) End Function Static Function FromHours(value As Double) As TimeSpan Return FromTicks((value * TicksPerHour) As Int64) End Function Static Function FromDays(value As Double) As TimeSpan Return FromTicks((value * TicksPerDay) As Int64) End Function Function Negate() As TimeSpan Return FromTicks(m_Time * (-1)) End Function Function Subtract(ts As TimeSpan) As TimeSpan Return FromTicks(m_Time - ts.m_Time) End Function End Class End Namespace