|
Für länger laufende Zeitmessungen mit einer Auflösung im Sekundenbereich oder für datumsunabhängige Zeitstempel ("TimeStamp") benötigen Sie einen festen Bezugszeitpunkt, ab dem die verstrichenen Sekunden ein Messpunkt bzw. Zeitstempel ergeben. Eine Möglichkeit wäre, den dem Visual Basic-Zeitsystem zugrunde liegenden 0-Zeitpunkt als Zählerstart zu setzen (das wäre der 30.12.1899, 0 Uhr) und die seither vergangenen Sekunden von der Funktion DateDiff berechnen zu lassen:
Sekunden = DateDiff("s", CDate(0), Now)
Ein anderer Bezugszeitpunkt hat vor allem Bedeutung bei der Synchronisation mit Unix-Rechnern - und damit vor allem für Internet-Anwendungen. Bei wohl den meisten Unix- und Linux-Systemen gilt der 1.1.1970, 0 Uhr als "Beginn der Zeitrechnung":
UnixSekunden = DateDiff("s", CDate(#01/01/1970#), Now)
Natürlich können Sie auch jedes andere Datum mit jeder anderen Uhrzeit als Bezugszeitpunkt festlegen. Die in dieser Hinsicht flexible Funktion TimeStamp liefert Ihnen die Anzahl der verstrichenen Sekunden seit einem Bezugszeitpunkt. Im ersten optionalen Parameter können Sie festlegen, ob der Windows oder der Unix-0-Zeitpunkt gelten sollen, oder ein im ebenfalls optionalen zweiten Parameter angegebener beliebiger Datums-/Zeit-Wert.
Public Enum TimeStampConstants
tsWindows
tsUnix
tsUser
End Enum
Public Enum TimeStampErrorContants
tsErrInvalidTimeBase = 30001
tsErrInvalidStartDate = 30002
End Enum
Public Function TimeStamp( _
Optional ByVal TimeBase As TimeStampConstants = tsWindows, _
Optional ByVal StartDate As Variant) As Variant
Select Case TimeBase
Case tsWindows
StartDate = CDate(0)
Case tsUnix
StartDate = #1/1/1970#
Case tsUser
If IsMissing(StartDate) Then
StartDate = CDate(0)
Else
On Error Resume Next
StartDate = CDate(StartDate)
If Err.Number Then
Err.Raise tsErrInvalidStartDate
End If
End If
Case Else
Err.Raise tsErrInvalidTimeBase
End Select
TimeStamp = CDec(DateDiff("s", StartDate, Now))
End Function
Da wir gerade beim Zählen von Sekunden sind - wissen Sie, wie viele Sekunden oder wie viele Minuten ein Tag oder eine Woche haben? Oder Stunden eine Woche hat? Die Antwort liefert Ihnen prompt die Funktion CountTimeUnits:
Public Enum CountTimeUnitsConstants
ctuSecondsOfDay
ctuSecondsOfWeek
ctuMinutesOfDay
ctuMinutesOfWeek
ctuHoursOfWeek
End Enum
Public Function CountTimeUnits( _
Optional ByVal CountTimeUnit As CountTimeUnitsConstants _
= ctuSecondsOfDay) As Long
Select Case CountTimeUnit
Case ctuSecondsOfDay
CountTimeUnits = DateDiff("s", Now - 1, Now)
Case ctuSecondsOfWeek
CountTimeUnits = DateDiff("s", Now - 7, Now)
Case ctuMinutesOfDay
CountTimeUnits = DateDiff("n", Now - 1, Now)
Case ctuMinutesOfWeek
CountTimeUnits = DateDiff("n", Now - 7, Now)
Case ctuHoursOfWeek
CountTimeUnits = DateDiff("h", Now - 7, Now)
End Select
End Function
|