Joar, das beliebte Char statt AnsiChar,
da sich die Daten bestimmt nicht ändern, nur weil der Compiler plötlich WideChar (Unicode) verwendet.
Allerdings passt es hier eigentlich,
denn String geht rein und Char's werden drüber gelegt.
Und ja, AnsiString und AnsiChar würden auch zusammenpassen.
Auch das PACKED ist drin, damit sich nicht plötzlich die Speicherausrichtung ändern könnte.
Jetzt ungeprüft auf einen unbekannt "langen" String loszugehen und das mit einem blinden Try-Except abzufangen ist nicht die feine englische Art,
aber da hier nur gelesen wird und über StrToInt eine gewisse Prüfung enthalten ist, würde ich das mal durchgehen lassen.
Ganz im Ernst, das hier ist ein perfektes Beispiel, um den Debugger zu benutzen.
Schauen was rein geht und wo es knallt, bzw. was nicht stimmt.
Von den Typen her sehe ich jedenfalls kein Problem, also kann es nur an den Daten liegen.
Würde ich diese Programm aber debuggen müssen und es knallt dann ständig, würde ich den Erfinder dieser Funktion garantiert erschlagen.
Delphi-Quellcode:
if (Length(S) = 19 {falls ich mich nicht verzählt hab}) and TryStrToInt(....) and ...
else
Result := 0;
Und weg mit dem Try-Except-Dreck.
StrToDateTime TryStrToDateTime mit einem FormatSetting.LongDateFormat+LongTimeFormat
oder vielleicht
ISO8601ToDate ?