|
Die dezimale Form einer Uhrzeit bzw. des Uhrzeit-Anteil eines Datums ist aufgrund der VB-internen Darstellung des Datentyps Date bereits automatisch vorhanden. Ein Date-Wert wird nämlich intern als Double-Wert verarbeitet, wobei der Zeitwert als Bruchteil eines ganzen Tages im Nachkommaanteil enthalten ist. Die reine Uhrzeit bzw. einen Zeitwert als Dezimalbruch eines ganzen Tages erhalten Sie also, wenn Sie den Ganzzahl-Anteil von einem gegebenen Date-Wert subtrahieren:
Public Function DayDecimal(ThisTime As Date) As Double
Dim nDblTime As Double
nDblTime = CDbl(ThisTime)
DayDecimal = nDblTime - Fix(nDblTime)
End Function
Nun könnten Sie jedoch Zeitwerte in der Form von Stunden mit dezimaler Anteile der Stundenbruchteile darstellen wollen - etwa dass ein Zeitwert, der 4 Stunden und 30 Minuten repräsentiert, als 4,5 geliefert werden würde. Hier werden also nur die Minuten und Sekunden in dezimaler Form dargestellt. Dazu multiplizieren Sie den Dezimalanteil eines Zeitwertes mit 24 (Stunden):
Public Function HourDecimal(ThisTime As Date) As Double
Dim nDblTime As Double
nDblTime = CDbl(ThisTime)
HourDecimal = (nDblTime - Fix(nDblTime)) * 24
End Function
Analog dazu können Sie eine Zeitwert auch in Minuten mit dezimaler Darstellung der Minutenbruchteile (also der Sekunden) darstellen. Hierzu verwenden Sie den Faktor 1.440 (gleich 24 Stunden * 60 Minuten):
Public Function MinuteDecimal(ThisTime As Date) As Double
Dim nDblTime As Double
nDblTime = CDbl(ThisTime)
MinuteDecimal = (nDblTime - Fix(nDblTime)) * 1440
End Function
Die beiden Funktionen HourDecimal und MinuteDecimal kappen allerdings den Tage(s)-Anteil eines übergebenen Date-Wertes und stellen damit ausdrücklich nur den Zeitanteil eines Datums dar. Wenn Sie jedoch Zeitdifferenzen, die ja durchaus 24 Stunden überschreiten können, dezimal darstellen wollen, muss diese Kappung, also die Subtraktion des Ganzzahlanteils, unterbleiben:
Public Function HourDecimalTime(ThisTime As Date) As Double
HourDecimalTime = CDbl(ThisTime) * 24
End Function
Public Function MinuteDecimalTime(ThisTime As Date) As Double
MinuteDecimalTime = CDbl(ThisTime) * 1440
End Function
|