Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeiten vergleichen (https://www.delphipraxis.net/68558-zeiten-vergleichen.html)

Headi 1. Mai 2006 17:41


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:
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;
In meinem Testprogramm funktionierte dieser Code auch.
Aber dann im echten Programm funktioniert dieser nicht mehr.

Kann mir vielleicht jemand den richtigen Code geben?

Vielen vielen dank

greez headi

TStringlist 1. Mai 2006 17:58

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 ...

himitsu 1. Mai 2006 18:07

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:
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
oder schalte einfach den Timer aus
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;

marabu 1. Mai 2006 18:52

Re: Zeiten vergleichen
 
Hallo Pascal,

in Now ist auch der aktuelle Tag enthalten, darum würde ich den Vergleich so ausführen:

Delphi-Quellcode:
if DateTimePicker.Time < Frac(Now) then ...
Grüße vom marabu

ManuMF 1. Mai 2006 19:26

Re: Zeiten vergleichen
 
Hallo,

vielleicht hilft dir Delphi-Referenz durchsuchenCompareDateTime.

Gruß,
ManuMF

Headi 1. Mai 2006 19:26

Re: Zeiten vergleichen
 
Zitat:

Zitat von TStringlist
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 ...

Dieser Code funktioniert bei mir irgendwie nicht, da er RecodeMilliSecond nicht erkennt.


Zitat:

Zitat von himitsu
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:
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
oder schalte einfach den Timer aus
Delphi-Quellcode:
procedure Tfrme_ausschalten.Timer1Timer(Sender: TObject);
begin
  If DateTimePicker1.Time &lt; now then
  begin
    Timer1.Enabled := False;
    //hier der code der ausgeführt wird
  end;
end;


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:

Zitat von marabu
Hallo Pascal,

in Now ist auch der aktuelle Tag enthalten, darum würde ich den Vergleich so ausführen:

Delphi-Quellcode:
if DateTimePicker.Time < Frac(Now) then ...
Grüße vom marabu

Und bei diesem Code passiert irgendwie auch wieder nichts.

Liegt das wirklich an mir?

Kann mir mal jemand sagen was ich falsch mache?

greez headi

TStringlist 1. Mai 2006 19:35

Re: Zeiten vergleichen
 
Zitat:

Zitat von Headi
Zitat:

Zitat von TStringlist
Delphi-Quellcode:
if DateTimePicker1.Time = RecodeMilliSecond(Now, 0) then ...

Dieser Code funktioniert bei mir irgendwie nicht, da er RecodeMilliSecond nicht erkennt.

Dafür brauchst du die Unit 'DateUtils' in der Uses-Klausel.

marabu 1. Mai 2006 19:42

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:
ShowMessage(DateTimeToStr(DateTimePicker.Time));
marabu

Headi 1. Mai 2006 22:06

Re: Zeiten vergleichen
 
Zitat:

Zitat von TStringlist
Zitat:

Zitat von Headi
Zitat:

Zitat von TStringlist
Delphi-Quellcode:
if DateTimePicker1.Time = RecodeMilliSecond(Now, 0) then ...

Dieser Code funktioniert bei mir irgendwie nicht, da er RecodeMilliSecond nicht erkennt.

Dafür brauchst du die Unit 'DateUtils' in der Uses-Klausel.

Ok das habe ich jetzt gemacht, nur funktioniert es immer noch nicht.
Also habe ich recodemillisecond auch mal beim DateTimePicker angewandt aber ging immer noch nicht :cry:


Zitat:

Zitat von marabu
Wenn ein Vergleich nicht so funktioniert, wie du es erwartest, dann schaue dir die Werte mal an, welche du miteinander vergleichen willst.

Delphi-Quellcode:
ShowMessage(DateTimeToStr(DateTimePicker.Time));
marabu

Du wirst es nicht glauben, aber das habe ich schon X Mal gemacht, denn nur so konnte ich den code zusammenbasteln. :mrgreen:
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

TStringlist 2. Mai 2006 08:15

Re: Zeiten vergleichen
 
Zitat:

Zitat von Headi
Zitat:

Zitat von TStringlist
Zitat:

Zitat von Headi
Zitat:

Zitat von TStringlist
Delphi-Quellcode:
if DateTimePicker1.Time = RecodeMilliSecond(Now, 0) then ...

Dieser Code funktioniert bei mir irgendwie nicht, da er RecodeMilliSecond nicht erkennt.

Dafür brauchst du die Unit 'DateUtils' in der Uses-Klausel.

Ok das habe ich jetzt gemacht, nur funktioniert es immer noch nicht.
Also habe ich recodemillisecond auch mal beim DateTimePicker angewandt aber ging immer noch nicht :cry:

Hm, bei meinem kurzen Check klappte das aber. Ich nehme daher an, Du wirst DateTimePicker1.Time vorher nicht mit einer extra für deinen Test auch brauchbaren Uhrzeit geladen haben (siehe 'Time' im OI). Ansonsten, wenn man diese 'Time'-Property vorher im OI eingegeben hat oder das nachher per Maus tut (bei 'Kind' = dtkTime), dann sind in diesem Time-Anteil nämlich keine Millisekunden enthalten, ergo müsste das auch funktionieren.

Wenn du 'Time' (für den Test) allerdings selbst wieder von NOW ableitest (z.B. im Click-Eventhandler eines Buttons):

Delphi-Quellcode:
  DateTimePicker1.Time := frac(RecodeMillisecond(NOW, 0) + 5*oneSecond);
dann ist dafür natürlich auch wieder die RecodeMillisecond-Funktion nötig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 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