![]() |
Zeiten vergleichen
Hi dpler,
Habe leider wieder Mal ein kleines Problem. Und zwar habe ich einen Button beim klick startet dieser einen von zwei Timern. Dieser Timer soll jetzt jede sekunde überprüfen ob DateTimePicker1.Time und now gleich sind. DateTimePicker1.Time = now geht da natürlich nicht, desshalb habe ich mir diesen Code gebastelt:
Delphi-Quellcode:
In meinem Testprogramm funktionierte dieser Code auch.
procedure Tfrme_ausschalten.Timer1Timer(Sender: TObject);
begin If DateTimePicker1.Time < now then begin If DateTimePicker1.Time+0.00001 > now then begin //hier der code der ausgeführt wird end; end; end; Aber dann im echten Programm funktioniert dieser nicht mehr. Kann mir vielleicht jemand den richtigen Code geben? Vielen vielen dank greez headi |
Re: Zeiten vergleichen
Hi, du könntest dafür auch das Gleichheitszeichen nehmen. Und zwar dann, wenn du im NOW die darin enthaltenen Millisekunden jedesmal auf Null zurückstellst:
Delphi-Quellcode:
if DateTimePicker1.Time = RecodeMilliSecond(Now, 0) then ...
|
Re: Zeiten vergleichen
Es wird wohl einfach nur so sein, das die Diverenz größer als 0,00001 ist.
Speicher einfach, ob der Code schon ausgeführt wurde
Delphi-Quellcode:
oder schalte einfach den Timer aus
Var ausgefuehrt: Boolean;
procedure Tfrme_ausschalten.Timer1Timer(Sender: TObject); begin If (DateTimePicker1.Time < now) and not ausgefuehrt then begin ausgefuehrt := True; //hier der code der ausgeführt wird end; end; // ausgefuehrt muß natürlich vorher FALSE sein
Delphi-Quellcode:
procedure Tfrme_ausschalten.Timer1Timer(Sender: TObject);
begin If DateTimePicker1.Time < now then begin Timer1.Enabled := False; //hier der code der ausgeführt wird end; end; |
Re: Zeiten vergleichen
Hallo Pascal,
in Now ist auch der aktuelle Tag enthalten, darum würde ich den Vergleich so ausführen:
Delphi-Quellcode:
Grüße vom marabu
if DateTimePicker.Time < Frac(Now) then ...
|
Re: Zeiten vergleichen
|
Re: Zeiten vergleichen
Zitat:
Zitat:
Geht leider auch nicht, ausschalten kann ich ja sowieso, aber er vergleicht ja nicht richtig. Bei diesem code ist immer jenachdem nach oben oder unten offen. Auch wenn ich die Diverenz grösser mache, funktioniert es nicht. Zitat:
Liegt das wirklich an mir? Kann mir mal jemand sagen was ich falsch mache? greez headi |
Re: Zeiten vergleichen
Zitat:
|
Re: Zeiten vergleichen
Wenn ein Vergleich nicht so funktioniert, wie du es erwartest, dann schaue dir die Werte mal an, welche du miteinander vergleichen willst.
Delphi-Quellcode:
marabu
ShowMessage(DateTimeToStr(DateTimePicker.Time));
|
Re: Zeiten vergleichen
Zitat:
Also habe ich recodemillisecond auch mal beim DateTimePicker angewandt aber ging immer noch nicht :cry: Zitat:
Das komische ist das beim testprogramm alles ging mit meinem code, nur immer wenn ich den Code in mein eigentliches Programm einbaue geht er nicht mehr :cry: was mache ich nur falsch? greez headi |
Re: Zeiten vergleichen
Zitat:
Wenn du 'Time' (für den Test) allerdings selbst wieder von NOW ableitest (z.B. im Click-Eventhandler eines Buttons):
Delphi-Quellcode:
dann ist dafür natürlich auch wieder die RecodeMillisecond-Funktion nötig.
DateTimePicker1.Time := frac(RecodeMillisecond(NOW, 0) + 5*oneSecond);
|
Re: Zeiten vergleichen
Liste der Anhänge anzeigen (Anzahl: 1)
hmm... versteh jetzt irgendwie nicht so genau was du meinst.
Also im OnCreate der form1 weise ich DateTimePicker den Wert now zu. Beim Test dann ändere ich die zeit logischerweise weil ich sonst ca. 23stunden 59 minuten warten müsste. Weist du was, ich lade mal schnell das Frame hier hoch: |
Re: Zeiten vergleichen
Höchstwahrscheinlich liegt es daran, wie du das DateTimePicker1.Time im Creater lädst bzw. es danach einstellst (das ist im Frame ja leider nicht mit dabei). Diese Time-Property des DateTimePickers verhält sich nämlich beim Lesen und Schreiben etwas unterschiedlich. Beim Auslesen gibt sie zwar den gesamten DateTime-Wert zurück, beim Beschreiben allerdings kann man nur den 'Time'-Anteil neu laden. Das könnte also heißen, dass du beim Laden von 'Time' im Creater (oder danach) den Date-Anteil dabei gar nicht mit überladen hast und dieser danach also immer noch einen alten Date-Wert (etwa von Gestern) intus hatte. Bei der Initialisierung dieses Wertes im Creater (oder eben kurz bevor du das testen möchtest) solltest du also auch den 'Date'-Anteil nochmal zusätzlich mit laden:
Delphi-Quellcode:
Durch diese +5*oneSecond müsste das gewünschte Event dann ca. 5 Sekunden nach dem Ausführen dieser Zeilen eintreten.
procedure TForm1.FormCreate(Sender: TObject);
begin DateTimePicker1.Date := NOW; DateTimePicker1.Time := RecodeMillisecond(NOW, 0) +5*oneSecond; end; Übrigens: Diese Timer arbeiten doch nie so absolut exakt wie sie eigentlich sollten. Es könnte also durchaus mal sein, dass eine Sekunde auch gerade mal schieferweise 1001 Millisekunden lang ist und dann könntest du das Pech haben, dass deine gesuchte Sekunde damit gerade übersprungen wird, also gar nicht abgefragt wird. Ergo, den Timer.Interval-Wert auf etwas weniger als 1000 einstellen, wäre hier wahrscheinlich etwas sicherer. |
Re: Zeiten vergleichen
Es gibt doch noch "Time()" oder? Ist das in diesem Fall nicht sinnvoller als "Now"?
Mit einem Timer jede Sekunde zu prüfen ob die Zeit gleich ist find ich im Übrigen nich so das große.. denk mal daran was passiert wenn das Programm rechnet und der Timer dadurch verzögert wird. dann wird die Sekunde vllt. übersprungen und du erhälst nie deine Ausgabe. (Korrigiert mich wenn ich mich täusche) Was genau willst du in deinem Programm denn erreichen? :gruebel: *nur mal so frag* |
Re: Zeiten vergleichen
Zitat:
Irgendwie muss ich ja die vom Benuzer eingegebene Zeit mit der jetzigen vergleichen, und das kann ich ja wohl fast nur mit einem Timer machen. Oder wie würdest du das Problem angehen? @TStringlist: Vielen vielen dank, es geht jetzt entlich. Hat wohl wirklich am Datum gelegen, was wohl auch der Grund war, warum es im Testprogramm ging und nachher nicht mehr. Auch allen anderen nochmals vielen dank! :thumb: :thumb: greez headi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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