![]() |
DateTimePicker: zu einer gewissen Uhrzeit Funktion ausführen
Hallo,
ich hätt da mal ne Frage: Ich möchte zu einer Gewissen Uhrzeit etwas durchführen. Bisher mach ich das so:
Delphi-Quellcode:
Was mir daran nicht gefällt ist die Konvertierung in einen String.
procedure TMainForm.Timer_UhrzeitTimer(Sender: TObject);
begin //prüfen ob Uhrzeit in Ordnung If TimeToStr(now) = TimeToStr(DateTimePicker_Uhr.Time) then begin //Timer disablen Timer_Uhrzeit.Enabled := false; //Procedure "Updaten" starten Updaten; //Timer enablen Timer_Uhrzeit.Enabled := true; end; end; Ich dachte mir, es müsse ja so auch gehen:
Delphi-Quellcode:
Nur leider wird so nie etwas ausgeführt.
If now = DateTimePicker_Uhr.Time then
Das:
Delphi-Quellcode:
kann ich leider nicht nehmen, da ja nur zu einer Gewissen Uhrzeit etwas ausgeführt werden soll, nicht einem Gewissen Zeitraum.
If now >= DateTimePicker_Uhr.Time then
Wie kann ich das auf Uhrzeit-Ebene prüfen? Oder soll ich bei den Strings bleiben? |
Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
Das Problem ist, dass die Uhrzeit ein Fließkommawert ist. Und Fließkommawerte lassen sich schlecht vergleichen.
Du müsstest die Uhrzeiten (also die Nachkommawerte) voneinander abziehen und prüfen, ob diese unterhalb einer gewissen Unschräftegrenze (z.B. 0,0001) liegen. Damit bist Du dann nah dran. Wenn die Auflösung des Timers dann so groß ist, dass Du genau einmal pro Tag in die Unschärfegrenze kommst passt das. |
Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
Du mußt beide Werte Runden, so daß der Vergleich funktioniert
|
Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
mmh
ich dachte das ginge einfacher. Da bleib ich ja lieber bei der String-Konvertierung - die funktioniert wenigstens :-) |
Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
das Runden sollte doch auch kein Problem sein.
|
Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
Zitat:
Delphi-Quellcode:
If Round(now) = Round(DateTimePicker_Uhr.Time) then
|
Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
Delphi-Quellcode:
procedure TMainForm.Timer_UhrzeitTimer(Sender: TObject);
var jetzt, bis : TDateTime; begin jetzt := Time; // jetzt noch die Intervalzeit (in ms) umrechnen in Tage // und zur aktuellen Zeit addieren bis := jetzt + Timer_Uhrzeit.Interval / MSecsPerDay; //prüfen ob Uhrzeit im gültigen Bereich if (DateTimePicker_Uhr.Time >= jetzt) and (DateTimePicker_Uhr.Time<= bis) then begin //Timer disablen Timer_Uhrzeit.Enabled := false; try //Procedure "Updaten" starten Updaten; finally // <== sicherstellen, dass der Timer auch bei Fehler weiterläuft //Timer enablen Timer_Uhrzeit.Enabled := true; end; end; end; |
Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
Hallo,
auch mit der Funktion DateUtils.SecondsBetween() lässt sich ein Time Slot testen:
Delphi-Quellcode:
Grüße vom marabu
const
DELTA_SECONDS = 1; // 0 entspräche dem String-Ansatz begin if (Now >= DTP.DateTime) and (DateUtils.SecondsBetween(Now, DTP.DateTime) <= DELTA_SECONDS) then begin { ... }; end; end; |
Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
Zitat:
Sherlock |
Re: DateTimePicker: zu einer gewissen Uhrzeit Funktion ausfü
mmh
also wenn ich mir das alles so anschaue, find ich meine String-Variante am Einfachsten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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