Hallo,
bekanntlich werden Tage und Uhrzeit in VB, VBA und VBS vom Zeitpunkt 30.12.1899 00:00 an gezählt. Das ist der Nullpunkt der VB-Tageszählung. Nun erwarte ich, dass in dieser Tageszählung für den Zeitpunkt 29.12.1899 12:00 ein Datums/Uhrzeitwert von -0.5 zurückgegeben wird. Leider ist das nicht so. So gibt CDbl(CDate("29.12.1899 12:00")) den Wert -1.5 zurück. Dieser "Fehler" tritt im Datums/Uhrzeitwert bei jedem Zeitpunkt vor dem Nullpunkt auf, sofern die Uhrzeit nicht 00:00. ist.
Gibt man eine reelle Zahl in die Konvertierungsfunktion CDate ein, was erlaubt ist, sofern die Zahl im zulässigen Bereich für ein Datum liegt,
CDate(-1.5),
wird 29.12.1899 12:00 zurückgegeben. Das ist IMHO chronologisch falsch.
Intern scheint MS diesen "Fehler" zu korrigieren. So gibt die Anweisung
CDate(CDbl(CDate("29.12.1899 12:00"))) den korrekten Zeitpunkt
29.12.1899 12:00:00 zurück.
Auch
DateDiff("h", "29.12.1899 12:00", "30.12.1899 00:00") gibt korrekt 12 zurück.
Aufgefallen ist mit der Fehler (so er denn einer ist) übrigens bei der Berechnung des Julianischen Datums.
Ich berechne den Zeitpunkt als reelle Zahl mit
DayMS = CDbl(CDate(Datum)) ' "Datum" ist der String des Zeitpunkts
Den "Fehler" habe ich korrigiert mit
If DayMS < 0 Then
DayMS = 2 * Fix(DayMS) - DayMS ' Fehlerkorrektur CDate
End If
Verstehe ich hier etwas falsch oder ist das einfach ein Bug in VB, VBA und VBS beim Datentyp "Date"?
Gruß
Rodark
bekanntlich werden Tage und Uhrzeit in VB, VBA und VBS vom Zeitpunkt 30.12.1899 00:00 an gezählt. Das ist der Nullpunkt der VB-Tageszählung. Nun erwarte ich, dass in dieser Tageszählung für den Zeitpunkt 29.12.1899 12:00 ein Datums/Uhrzeitwert von -0.5 zurückgegeben wird. Leider ist das nicht so. So gibt CDbl(CDate("29.12.1899 12:00")) den Wert -1.5 zurück. Dieser "Fehler" tritt im Datums/Uhrzeitwert bei jedem Zeitpunkt vor dem Nullpunkt auf, sofern die Uhrzeit nicht 00:00. ist.
Gibt man eine reelle Zahl in die Konvertierungsfunktion CDate ein, was erlaubt ist, sofern die Zahl im zulässigen Bereich für ein Datum liegt,
CDate(-1.5),
wird 29.12.1899 12:00 zurückgegeben. Das ist IMHO chronologisch falsch.
Intern scheint MS diesen "Fehler" zu korrigieren. So gibt die Anweisung
CDate(CDbl(CDate("29.12.1899 12:00"))) den korrekten Zeitpunkt
29.12.1899 12:00:00 zurück.
Auch
DateDiff("h", "29.12.1899 12:00", "30.12.1899 00:00") gibt korrekt 12 zurück.
Aufgefallen ist mit der Fehler (so er denn einer ist) übrigens bei der Berechnung des Julianischen Datums.
Ich berechne den Zeitpunkt als reelle Zahl mit
DayMS = CDbl(CDate(Datum)) ' "Datum" ist der String des Zeitpunkts
Den "Fehler" habe ich korrigiert mit
If DayMS < 0 Then
DayMS = 2 * Fix(DayMS) - DayMS ' Fehlerkorrektur CDate
End If
Verstehe ich hier etwas falsch oder ist das einfach ein Bug in VB, VBA und VBS beim Datentyp "Date"?
Gruß
Rodark