Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komme nicht weiter mit Zeitvergleichen? (https://www.delphipraxis.net/141933-komme-nicht-weiter-mit-zeitvergleichen.html)

AlexII 19. Okt 2009 12:52

Re: Komme nicht weiter mit Zeitvergleichen?
 
Ich verstehe jetzt die Logik nicht wie Delphi mit der Zeit umgeht.

Das hier funkt nicht:
Delphi-Quellcode:
Label2.Caption:=TimeToStr(Now);
Label3.Caption:=TimeToStr(DateTimePicker2.Time);
if Now=DateTimePicker2.Time then showmessage('ja');
aber das:
Delphi-Quellcode:
Label2.Caption:=TimeToStr(Now);
Label3.Caption:=TimeToStr(DateTimePicker2.Time);
if Label2.Caption=Label3.Caption then showmessage('ja');
obwohl das ja gleich ist. :roteyes:

AlexII 19. Okt 2009 12:55

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von Sherlock
OK, weils keiner wirklich erklärt hat, versuch ich mich mal daran:

Wissenswerte Voraussetzungen:
  • Ein DateTime erfasst auch Millisekunden.
  • Now ist natürlich auch auf die Millisekunde genau.
  • Der Timer ist nicht Millisekunden genau, da windows keine Echtzeitsystem ist.

Wenn Du also (millisekunden-)genaue Gleichheit prüfen möchtest ist es extrem wahrscheinlich, daß Du nicht die korrekte Millisekunde erwischst. Deshalb soltlest Du vielleicht nur Sekunden- oder Minutengenau prüfen. Wie Du das anstellst überlass ich mal Deiner Phantasie.

Sherlock

Wow das nenne ich fachmännisch. :thumb:

Tyrael Y. 19. Okt 2009 12:55

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von Luckie
Plus einem Deltawert, sonst stimmt der Vergleich 23 Stunden und 59 Minuten. ;)

Wozu das?

Wenn man zwei TDateTime hat und mit größer gleich abfragt stimmt, die Abfrage in jedem Fall.
Das wichtige ist bei reiner Uhrzeitabfrage, daß man auch NUR die Uhrzeit vergleicht.

Delphi-Quellcode:
procedure TForm4.FormShow(Sender: TObject);
begin
  DateTimePicker2.Time := TimeOf(Now())
end;

procedure TForm4.Timer1Timer(Sender: TObject);
begin
   if TimeOf(Now()) >= DateTimePicker2.Time then
     ShowMessage('Ok');
end;
Habs nicht getestet, aber sollte so richtig sein.

Sir Rufo 19. Okt 2009 12:56

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von AlexII
Ich verstehe jetzt die Logik nicht wie Delphi mit der Zeit umgeht.

Das hier funkt nicht:
Delphi-Quellcode:
Label2.Caption:=TimeToStr(Now);
Label3.Caption:=TimeToStr(DateTimePicker2.Time);
if Now=DateTimePicker2.Time then showmessage('ja');
aber das:
Delphi-Quellcode:
Label2.Caption:=TimeToStr(Now);
Label3.Caption:=TimeToStr(DateTimePicker2.Time);
if Label2.Caption=Label3.Caption then showmessage('ja');
obwohl das ja gleich ist. :roteyes:

Nein, ist es nicht!

In Now steht z.B. 2009-10-19 13:56:25.123 => TimeToStr(Now) => 13:56:25 !!!!!!

Wenn Du diesen Code (auf einen Button legen) ausführst ( auf der Form musst du natürlich ein MemoFeld mit Namen Memo1 haben! )
Delphi-Quellcode:
begin
  Memo1.Lines.Add( FloatToStr( Now ) );
  Label1.Caption := TimeToStr( Now );
  Memo1.Lines.Add( FloatToStr( Now ) );
  Label2.Caption := TimeToStr( now );
  Memo1.Lines.Add( FloatToStr( Now ) );
end;
Dann erscheint im Memo1 folgende Ausgabe:
Code:
40105,5863273264
40105,5863273611
40105,5863273727
Die Interpretation überlasse ich Dir!

AlexII 19. Okt 2009 13:04

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Undefinierter Bezeichner: TimeOf
Was soll den in die Uses rein? :gruebel:

Tyrael Y. 19. Okt 2009 13:05

Re: Komme nicht weiter mit Zeitvergleichen?
 
Delphi-Quellcode:
uses DateUtils;

hoika 19. Okt 2009 13:09

Re: Komme nicht weiter mit Zeitvergleichen?
 
Hallo,

noch mal zu deinem Code.

Delphi-Quellcode:
Label2.Caption:=TimeToStr(Now);
Label3.Caption:=TimeToStr(DateTimePicker2.Time);
if Now=DateTimePicker2.Time then showmessage('ja');
In Zeile 3 ist Now schon wieder etwas weiter
als in Zeile 1.

Wenn es wirklich nur ein Wecker sein soll,
der genau einmal weckt, vergleiche mit >=

Delphi-Quellcode:
Label1.Caption:= TimeToStr('15:00'); // wir wollen 15:00 wecken

procedure Timer1OnTimer
begin
  if Now>=StrToTime(Label1.Caption) then
  begin
    ShowMessage('klingellllll');
    Timer1.Enabled:= False;
  end;
end;

Heiko

AlexII 19. Okt 2009 13:09

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von Tyrael Y.

Delphi-Quellcode:
procedure TForm4.FormShow(Sender: TObject);
begin
  DateTimePicker2.Time := TimeOf(Now())
end;

procedure TForm4.Timer1Timer(Sender: TObject);
begin
   if TimeOf(Now()) >= DateTimePicker2.Time then
     ShowMessage('Ok');
end;

Funkt auch nicht :wall:

Sir Rufo 19. Okt 2009 13:11

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von hoika
Delphi-Quellcode:
if Now>=StrToTime(Label1.Caption) then

Öh, der Vergleich ist aber immer True!
StrToTime( '15:00' ) => 0.625
Now ist aber irgendwie immer > 1.0 (aktuell > 40105.0)

AlexII 19. Okt 2009 13:16

Re: Komme nicht weiter mit Zeitvergleichen?
 
Wusste gar nicht, dass einfach zwei Zeiten zu vergleichen so kompliziert ist. :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 Uhr.
Seite 2 von 4     12 34      

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