Fehlermeldung 00:05 is not a valid Time

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
USchoch
Beiträge: 45
Registriert: Do 16. Mär 2017, 14:01

Fehlermeldung 00:05 is not a valid Time

Beitrag von USchoch »

Hallo
Ich bin am Schreiben einer Anwendung, welche einige Datums- und Zeitwerte brauch.
Ich brauch oft die Function StrToDateTime. Das funktioniert, auch Das Compilieren der Anwendung geht auch.
Zur Laufzeit kommt aber irgendwann die Fehlermeldung ‚00:05‘ is not a valide Time.
Das ist schon klar, es müsste ‚00:05:00‘ heissen, also Std, Min, Sek.
Ich rufe aber nirgends in der Anwendung die Function StrToDateTime mit einem String ‚00:05‘ auf. Ich habe alle .PAS-Dateien nach diesem String untersucht, aber nirgends gefunden. Auch in den LFM-Dateien steht der String nirgends in einer Label- oder Edit-Komponente.
Meine Frage: Wo wird dieser Fehler ausgelöst?

Gruss
Uli

Benutzeravatar
theo
Beiträge: 11007
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehlermeldung 00:05 is not a valid Time

Beitrag von theo »

Wie sollen wir das wissen können?

Benutzt du den Debugger nicht?
Schau dir an, wohin er bei "Break" springt.
Schau dir den Aufrufstack an (Ansicht -> Debuggerfenster -> Aufrufstack).
Setze Breakpoints.

EDIT: Und lass dir mal die Einstellung von "TimeSeparator" anzeigen.
StrToDateTime('00:05') sollte sonst eigentlich keinen Fehler auslösen. Nur wenn kein Doppelpunkt erwartet wird.

charlytango
Beiträge: 1163
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Fehlermeldung 00:05 is not a valid Time

Beitrag von charlytango »

Ich kann dir direkt nicht helfen, aber vielleicht den einen oder anderen Tip geben.

Verwendest du StrToDateTime mit oder ohne FormatSettings? StrToDateTime gibt es in drei Versionen.
Ctrl-Mausklick bringt dich zu der die du verwendest, die anderen stehen gleich drunter oder drüber.

Wenn ich Probleme miz Umwandlungen habe, versuche ich, ob es auch Try-Funktionen gibt.
In deinem Fall TryStrToDateTime.
Damit bekommt man zumindest eine grobe Info ob die Umwandlung erfolgreich war und es hilft beim Fehlersuchen

Hope that helps

wp_xyz
Beiträge: 5271
Registriert: Fr 8. Apr 2011, 09:01

Re: Fehlermeldung 00:05 is not a valid Time

Beitrag von wp_xyz »

USchoch hat geschrieben: Mi 3. Sep 2025, 10:59 Ich brauch oft die Function StrToDateTime. [...] Zur Laufzeit kommt aber irgendwann die Fehlermeldung ‚00:05‘ is not a valide Time.
Das ist schon klar, es müsste ‚00:05:00‘ heissen, also Std, Min, Sek.
Wieso ist das klar? StrToDateTime kommt unter den normalen FormatSettings durchaus mit dem String '00:05' klar:

Code: Alles auswählen

program Project1;
uses
  SysUtils;
var
  dt: TDateTime;
begin
  // FormatSettings.TimeSeparator := '-';  <--- Fehler mit dieser Zeile
  dt := StrToDateTime('00:05');
  WriteLn(TimeToStr(dt));
  ReadLn;
end. 
Hast du die Formatsettings verändert? Wenn du, wie oben angedeutet, den TimeSeparator auf etwas anderes als ':' verstellst, dann kommt genau deine Fehlermeldung.

USchoch
Beiträge: 45
Registriert: Do 16. Mär 2017, 14:01

Re: Fehlermeldung 00:05 is not a valid Time

Beitrag von USchoch »

Hallo

Ich habe mal in den Aufrufstack hineingeschaut. Dort habe ich gesehen, eine bestimmte Procedure aufgerufen wurde. Dort habe ich provisorisch getestet, ob der String für StrToDateTime '00:05' war. Das war aber nicht der Fall. auch mit Breakpoints konnte ich den Fehler nicht ermitteln.
Ich habe noch In einem Testprogramm festgestellt, dass StrToDateTime mit '00:05' klar kommt. Wenn ich diesen String in TDateTime umwandle und dann diesen Wert wieder mit DateTimeToStr in einen String verwandle, bekomme ich 30.12.1899 00:05:00, also 5 Minuten am Tag Null.
Der Fehler passiert also nicht bei StrToDateTime. Wo denn?

Gruss
Uli

Benutzeravatar
theo
Beiträge: 11007
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehlermeldung 00:05 is not a valid Time

Beitrag von theo »

Ohne den Code zu sehen, fällt mir dazu nichts ein.

USchoch
Beiträge: 45
Registriert: Do 16. Mär 2017, 14:01

Re: Fehlermeldung 00:05 is not a valid Time

Beitrag von USchoch »

Hallo
Der Code ist sehr umfangreich und ich benutze Komponenten, die du nicht hast.
Ich such mal weiter, ob ich eine Lösung finde

Gruss und besten Dank
Uli

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6948
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Fehlermeldung 00:05 is not a valid Time

Beitrag von af0815 »

USchoch hat geschrieben: Mi 3. Sep 2025, 15:18 Ich habe noch In einem Testprogramm festgestellt, dass StrToDateTime mit '00:05' klar kommt. Wenn ich diesen String in TDateTime umwandle und dann diesen Wert wieder mit DateTimeToStr in einen String verwandle, bekomme ich 30.12.1899 00:05:00, also 5 Minuten am Tag Null.
Zitat von hier https://wiki.freepascal.org/TDateTime
TDateTime is stored as a double, the integer part representing days and the fractional part being fraction of a day. The integer part is the number of days that have passed since December 30, 1899, and can be a negative number. The fractional part reflects the fraction of a 24-hour day without regard to the sign of the TDateTime value, so care must be taken when computing negative TDateTime values with a fractional part.
Daher ist klar, wenn der ganzahlige Teil 0 ist, das du das Datum als 30.12.1899 bekommst. Wenn du nur den Zeitanteil haben willst, so brauchst du TimeToStr. Sihe auch hier https://www.freepascal.org/docs-html/rt ... tines.html
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten