Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi StrToDateTime sagt ungültiges Datum (https://www.delphipraxis.net/216471-strtodatetime-sagt-ungueltiges-datum.html)

Maliko 3. Jan 2025 09:24

StrToDateTime sagt ungültiges Datum
 
Moin,

mein Delphi ärgert mich gerade etwas. Und zwar habe ich folgende Funktion:

Code:
function TMT940Parser.ConvertBuchungsdatum(aDatum: string): TDateTime;
var
  mSettings : TFormatSettings;
begin
  mSettings := TFormatSettings.Create;
  mSettings.DateSeparator := #0;
  mSettings.ShortDateFormat := 'yyMMdd';

  Result := StrToDateTime(aDatum, mSettings);
end;
Da schmeiße ich als aDatum den String '241209' rein. So wie ich das verstehe müsste durch die FormatSettings die Resultzuweisung eigentlich den 09.12.2024 zurückgeben. Tut es aber nicht, sondern ich bekomme eine EConvertException zurück.

Kann mir da vielleicht irgendjemand sagen welchen Wald ich da vor lauter Bäumen nicht sehen kann?

Die genaue Fehlermeldung lautet: 241209 ist keine gültige Datums- und Uhrzeitangabe.

hes 3. Jan 2025 09:46

AW: StrToDateTime sagt ungültiges Datum
 
Komisch. Bei mir funktioniert deine Routine ohne Fehler (Delphi 12.2)

gubbe 3. Jan 2025 09:55

AW: StrToDateTime sagt ungültiges Datum
 
Funktioniert auch bei mir.

Allerdings fällt mir auf, dass Du StrToDateTime aufrufst, obwohl es keinen Zeitanteil gibt. Versuch es doch mal mit StrToDate.

Kas Ob. 3. Jan 2025 09:58

AW: StrToDateTime sagt ungültiges Datum
 
Hi,

if you change the string into
Delphi-Quellcode:
  st := '24'#0'12'#0'09';
Then it will work, if you are going to parse the string first then ditch the #0 and use something useful, (like adjust it to something working '24/12/09')

Also this is more like a bug or short coming in the RTL since ages, as it is enforce the need for separator even with #0.

Could be fixed in newer versions ! as not working on my XE8.

Maliko 3. Jan 2025 10:16

AW: StrToDateTime sagt ungültiges Datum
 
StrToDate habe ich auch schon versucht. Selbes Ergebnis. Ich hab jetzt das Datum erst mal Manuell mit EncodeDate geparsed, damit funktioniert es. Wir wollen dieses Jahr eh noch auf Delphi 12 wechseln, dann versuch ichs noch mal über den anderen Weg. Trotzdem Danke euch.

hes 3. Jan 2025 10:32

AW: StrToDateTime sagt ungültiges Datum
 
Gerade mal unter 10.2 getestet, da kommt dein Fehler. Wie schon oben erwähnt unter Delphi 12.2 funktioniert es.

jaenicke 3. Jan 2025 11:07

AW: StrToDateTime sagt ungültiges Datum
 
Ich würde solche Geschichten immer manuell parsen. Denn wenn sich etwas an der Funktionsweise ändert, funktioniert ein solches unübliches Format vielleicht plötzlich mit einer neuen Delphiversion nicht mehr.

Wenn du einen Ausdruck haben möchtest, den du ggf. anpassen kannst, wären reguläre Ausdrücke noch eine in diesem Fall sehr einfache Lösung, wenn auch nicht die schnellste Variante. Aber StrToDate ist ja auch nicht besonders schnell im Vergleich zu einer manuellen Umwandlung bei einem solchen fixen Format.

himitsu 14. Jan 2025 07:00

AW: StrToDateTime sagt ungültiges Datum
 
Es wäre aber auch viel zu einfach, wenn es ein Gegenstück zum FormatDateTime gäbe. :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz