Fehlermeldung 00:05 is not a valid Time
Fehlermeldung 00:05 is not a valid Time
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
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
Re: Fehlermeldung 00:05 is not a valid Time
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.
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.
-
- 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
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
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
Re: Fehlermeldung 00:05 is not a valid Time
Wieso ist das klar? StrToDateTime kommt unter den normalen FormatSettings durchaus mit dem String '00:05' klar: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.
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.
Re: Fehlermeldung 00:05 is not a valid Time
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
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
Re: Fehlermeldung 00:05 is not a valid Time
Ohne den Code zu sehen, fällt mir dazu nichts ein.
Re: Fehlermeldung 00:05 is not a valid Time
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
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
- 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
Zitat von hier https://wiki.freepascal.org/TDateTimeUSchoch 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.
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.htmlTDateTime 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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).