String in Datum konvertieren unabhängig vom Datumsformat des Betriebssystems

In einer String-Variablen steht ein Datum, z.B.

Dim termin As String
termin = "01.12.2017"

Zur weiteren Verarbeitung wird aber der Datumswert gebraucht. Möglich ist nun

Dim datum As Date
datum = DateValue(termin)

Funktioniert das? Jein!

Je nachdem, welches Datumsformat das Betriebssystem hat. Kein Problem unter deutschem Windows, jedoch unter englischem/amerikanischem schon. Denn da würde es bei der Umwandlung krachen.

Besser ist es, DateSerial anstatt DateValue zu verwenden, und zwar

Dim teile As Variant
teile = Split(termin, ".")
datum = DateSerial(CInt(teile(2)), CInt(teile(1)), CInt(teile(0)))

Das funktioniert unabhängig von der Sprache.

DateSerial erwartet als Parameter das Jahr, den Monat und den Tag, jeweils als Integer-Wert. Deshalb wird nach dem Zerlegen mittel Split durch CInt jeweils in Integer umgewandelt.

Auch wenn des Makro nur für Benutzer auf deutscher Plattform entwickelt wird, ist das besserer Stil, auch wenn es etwas umständlicher zu sein scheint.

Noch eine Kuriosität zu DateValue, oder warum ich diese Funktion nicht mag:

DateValue("10.12.17") ergibt den 10. Dezember 2017
DateValue("56.12.17") ergibt den 17. Dezember 1956

und zwar beides allein unter deutschem Windows.

Fazit: Wenn die Datumsformatierung des umzuwandelnden Strings bekannt ist, hat man durch Verwendung von DateSerial eine Fehlerquelle weniger.

Ein Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.