Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StrToDate Fehler (https://www.delphipraxis.net/89818-strtodate-fehler.html)

PeterPanino 6. Apr 2007 02:53


StrToDate Fehler
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

folgender Fehler tritt auf:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  TodayStr: string;
  TodayDate: TDate;
begin
  TodayStr := DateToStr(Today);
  Form1.Caption := TodayStr;
  TodayDate := StrToDate(TodayStr);
end;
Fehlermeldung: '06-Apr-2007' ist kein gültiges Datum'

Wieso hat Delphi Probleme einen String mit StrToDate zu dekodieren, den es gerade vorher mit DateToStr kodiert hat? Die lokalen Regional-Einstellungen sind ja bei beiden Vorgängen gleich!

Es würde auch nichts nützen, wenn ich meine regionalen Einstellungen für das kurze Datumsformat ändere, denn ich muss ja immer damit rechnen, dass ein Anwender meines Programms genau diese regionalen Einstellungen verwendet!

Sharky 6. Apr 2007 06:58

Re: StrToDate Fehler
 
Hai PeterPanino,

Delphi-Referenz durchsuchenStrToDate funktioniert nur wenn in dem Datumsstring ausschliesslich Zahlen und der definierte Dateseperator stehen.

Steht so auch in der Onlinehilfe.

hoika 6. Apr 2007 07:18

Re: StrToDate Fehler
 
Hallo,

oder anderes gesagt.

DateToStr benutzt die lokalen Ländereinstellungen (lang),
StrToDate nicht.


Heiko

PeterPanino 6. Apr 2007 11:56

Re: StrToDate Fehler
 
Glaubt ihr, dass es sinnvoll wäre, den String mit einer angepassten Routine zu parsen (vielleicht hat jemand gerade zufällig so eine Routine zur Hand), oder ist die Vielfalt möglicher Regionaleinstellungen zu groß, sodass in der Praxis dabei immer wieder Fehler auftreten können?

hoika 6. Apr 2007 16:58

Re: StrToDate Fehler
 
Hallo,

ich würde den TDateTime Wert zwischenspeichern
und nicht den String.


Heiko

PeterPanino 6. Apr 2007 17:03

Re: StrToDate Fehler
 
Zitat:

Zitat von hoika
Hallo,

ich würde den TDateTime Wert zwischenspeichern
und nicht den String.
Heiko

Ja, du hast recht!

PeterPanino 7. Apr 2007 10:34

Re: StrToDate Fehler
 
Somit funktioniert auch ReadDate aus IniFiles nicht, wenn im System die lokalen Regionaleinstellungen für Kurzes Datum auf 'TT-MMM-JJJJ' eingestellt sind, denn ReadDate verwendet implizit StrToDate! (Beispiel: WriteDate schreibt bei diesen Systemeinstellungen z.B. '05-Apr-2007', was dann bei ReadDate prompt zu einem EConvertError-Fehler führt).

Somit sind ReadDate und WriteDate aus IniFiles prinzipiell unbrauchbar!

PeterPanino 7. Apr 2007 10:49

Re: StrToDate Fehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von hoika
DateToStr benutzt die lokalen Ländereinstellungen (lang),
StrToDate nicht.
Heiko

Stimmt so nicht. StrToDate führt bei mir zu einem Fehler, auch wenn der Datum-String nur aus Zahlen besteht: S. angehängte Fehlermeldung.

Bearbeitet 1: Eigenartigerweise tritt dieser Fehler (s. angehängter Screenshot der Fehlermeldung) nur bei der Ausführung im Debugger auf, bei der normalen Ausführung des Programms tritt er nicht auf! Weiß jemand wieso?

Bearbeitet 2: Berichtigung: Der Fehler tritt sowohl bei der normalen Programmausführung als auch im Debugger auf. Nur die Fehlermeldung erscheint nur im Debugger!

Hobby-Programmierer 7. Apr 2007 22:39

Re: StrToDate Fehler
 
Nabend ..,
vielleicht hilft
Delphi-Quellcode:
ShortDateFormat:= 'dd.mm.yyyy';
DateSeparator:= '.';
Mich irritiert allerdings deine Fehlermeldung!
Zitat:

Im Projekt ... mit der Meldung "25.09.2006' ist kein gültiges Datum' ...
:gruebel:
Sind die 'Gänsefüßchen' etwa auch in dem Datumsstring drin?

LG Mario

PeterPanino 8. Apr 2007 01:29

Re: StrToDate Fehler
 
Zitat:

Zitat von Hobby-Programmierer
Nabend ..,
vielleicht hilft
Delphi-Quellcode:
ShortDateFormat:= 'dd.mm.yyyy';
DateSeparator:= '.';
Mich irritiert allerdings deine Fehlermeldung!
Zitat:

Im Projekt ... mit der Meldung "25.09.2006' ist kein gültiges Datum' ...
:gruebel:
Sind die 'Gänsefüßchen' etwa auch in dem Datumsstring drin?
LG Mario

Nein, natürlich nicht! Ich hab alles haarklein ausprobiert. Offensichtlich funktioniert StrToDate nur dann, wenn die im String enthaltenen Datum-Separatoren mit dem im System definierten Datum-Separator übereinstimmt. Dabei wird die globale Variable DateSeparator offensichtlich durch das ERSTE Separatorzeichen definiert, das im Definitionsstring für das kurze Datum in den lokalen Regionaleinstellungen enzhalten ist! (Es kann ja auch sein, dass der Anwender einen kurzen Datumstring mit unterschiedlichen Separatoren definiert, z.B. "TT.MMM JJJJ" = Punkt und Leerzeichen).

Ich schreibe gerade eine Erweiterung der StrToDate-Funktion, die all diese Fälle abdeckt und stelle sie dann hier rein.

Ach ja, das alles unter Vista.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:05 Uhr.
Seite 1 von 2  1 2      

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