Problem: Funktion CDate, und zwar mit der Uhrzeit bei einem Zeitpunkt vor dem Nullpunkt der Zeitzählung

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Problem: Funktion CDate, und zwar mit der Uhrzeit bei einem Zeitpunkt vor dem Nullpunkt der Zeitzählung

    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
    Ich hab mal versucht, mit dem kritischen Datum zu nähern und bekam folgendes: Es gibt ein anderes Problem, welches ggf. mit dem o.g. in Verbindung steht.

    Visual Basic-Quellcode

    1. Dim Datum As Date
    2. Datum = CDate("01.03.1900")
    3. Datum = DateAdd("d", -1, Datum)
    4. Cells(1, 1).Value = Datum

    Es ergibt sich in Zelle(1, 1): "29.02.1900".
    Probiert man aber:

    Visual Basic-Quellcode

    1. Dim Datum As Date
    2. Datum = CDate("29.02.1900")

    rebelliert VBA mit einem "Typen unverträglich"-Hinweis. Der Grund: Es gab den 29.02.1900 nicht. 1900 war kein Schaltjahr.

    Ach, hab tatsächlich noch einen Beitrag zu Excel und dem 29.02.1900 gefunden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.