Ausgewählte Artikel zur Programmierung mit Delphi

Werner Voigt

 für 


StrToDate unabhängig und sicher nutzen

Autor: Dipl.-Math. Werner Voigt

veröffentlicht in Toolbox 5/2002, Seite98/100
Copyright 2002 © Werner Voigt und Toolbox
Bitte beachten Sie auch die Hinweise zur kommerziellen Nutzung

Problem:

Datumsangaben im String-Format unabhängig von länderspezifischen Einstellungen richtig interpretieren. In mehreren Toolbox-Tips wurde das Problem der sicheren Umwandlung von im String-Format vorliegenden Datumsangaben behandelt. Z.B. enthalten die zum Download bereitgestellten Kontoauszüge der Postbank als reiner Text natürlich auch Datumsangaben. Also ist es legitim, solche Daten möglichst effektiv und sicher zu lesen.

Lösung:

Um unabhängig von den Einstellungen von Windows zu sein (Datums- und Zeitformate sind natürlich auch Ländersache), genügt es in der Delphihilfe etwas nachzulesen.
Zur Funktion StrToDate heißt es:
"Mit StrToDate kann ein String mit einer Datumsangabe geparst werden. Enthält S kein gültiges Datum, wird eine EConvertError-Exception ausgelöst. Der String muß aus zwei oder drei Zahlen bestehen, die durch das in der globalen Variable DateSeparator definierte Zeichen voneinander getrennt sind. Die Reihenfolge von Tag, Monat und Jahr wird von der globalen Variable ShortDateFormat bestimmt (mögliche Kombinationen sind M/T/J, T/M/J und J/M/T). Enthält der String lediglich zwei Zahlen, wird er als Datum (M/T oderTT/M) des aktuellen Jahres interpretiert."

Die Formatvariablen sind in der Unit Sysutils definiert. Ihre Anfangswerte werden von Delphi aus der Registry mit der Win32-API-Funktion GetLocaleInfo beim Programmstart ermittelt.
Daraus ergibt sich für die folgende einfache und sichere Lösung für das Auslesen von Datumsstrings (in einem bekannten Format) z.B. aus einer Datei. Man weist einfach der Variablen ShortDateFormat den aus einer Analyse des Aufbaus der Eingabedatei ja ohnehin bekannten Formatwert zu.

 
ShortDateFormat := 'dd.mm.yyyy';
    

Danach ist es völlig gleichgültig, welche Darstellung Windows für das Datum kennt. In unserem Programm wird gemäß dem eingestellten Format umgewandelt. Auswirkungen auf andere Programme hat diese Zuweisung nicht. Es bleibt also nach außen unsichtbar, was wir treiben.
Will man an anderer Stelle im Programm mit der von Benutzer eingestellten Darstellung arbeiten, muß man nur vor der Änderung den Wert von ShortDateFormat dessen Wert sichern und dann bei Bedarf wiederherstellen.
Wenn StrToDate jetzt noch eine Exception liefert, dann steht im dem fraglichen String kein Datum und wir haben ein Problem, das nicht mit der Datumsdarstellung zusammenhängt.

zurückzurück
Copyright © 2003 by  EDVoigt  (Werner Voigt).