Delphi-PRAXiS
Seite 3 von 4     123 4      

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)

Sir Rufo 19. Okt 2009 13:18

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von AlexII
Wusste gar nicht, dass einfach zwei Zeiten zu vergleichen so kompliziert ist. :lol:

Ist es ja auch nicht ... aber es gibt halt Milliarden falsche Wege und nur wenig richtige Wege.

Um auf das kleine Beispiel mit dem Wecker zu kommen, das geht so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender:TObject);
begin
  if Frac( Now ) >= StrToTime( '15:00' ) then
    begin
      Timer1.Enabled := False;
      ShowMessage( 'Jetzt sollte ich Dich wecken!' );
    end;
end;

Tyrael Y. 19. Okt 2009 13:20

Re: Komme nicht weiter mit Zeitvergleichen?
 
Ich habs grad getestet, mein Code funktioniert.

WICHTIG!
Beim TDateTimePicker die Eiegnschaft Date im ObjektInspektor löschen.
Dann wird dort 30.12.1899 automatisch eingetragen und dann passt es.

Edit:
Zum setzen der Zeit für den DateTimePicker beim FormShow ist suboptimal.
FormShow wird bei jedem anzeigen aufgerufen.
D.h. du minimierst das Fenster und holst es wieder -> FormShow

mleyen 19. Okt 2009 13:20

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von Tyrael Y.
Zitat:

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

Wozu das?

Weil der Wecker dann 24/7 klingelt. :zwinker:

@AlexII:
Eigentlich ist das gar nicht schwer, man muss nur einmal das Problem erkennen.

Du vergleichst 2 Werte mit unterschiedlicher Genauigkeit.
Um diese trotzdem auf "Gleichheit" prüfen zu können, musst du ein bisschen ungenauer werden.
In deinem Fall musst du dazu eine zeitrange einbauen.
Also einen bestimmten Zeitintervall, indem gesagt wird, die Zeit stimmt mit der anderen überein.

Als Beispiel mal Floatwerte:
Delphi-Quellcode:
procedure TBluppForm.button1Click(Sender: TObject);

  function SingleEquals(const AVal1, AVal2: Single; const Precision: Single = 1.0): Boolean;
  begin
    Result :=
      (AVal2 > AVal1 - Precision) and
      (AVal2 < AVal1 + Precision)
  end;

begin
  if SingleEquals(2.0, 3.2) then
    MessageDlg('1. Equals', mtInformation, [mbOK], 0);
  if SingleEquals(2.0, 3.2, 1.5) then
    MessageDlg('2. Equals', mtInformation, [mbOK], 0);
end;

Ich hoffe das Problem ist jetzt verständlicher geworden :)

AlexII 19. Okt 2009 13:30

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von Tyrael Y.
Zum setzen der Zeit für den DateTimePicker beim FormShow ist suboptimal.

Was heißt bei dir suboptimal?

Und wieso vergleichst du mit >= und nicht einfach = ? :gruebel:

Sir Rufo 19. Okt 2009 13:34

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von AlexII
Und wieso vergleichst du mit >= und nicht einfach = ? :gruebel:

Liest du auch, was hier in dem Thread geschrieben steht?

Es gibt mehrere Antworten, die sich genau darauf beziehen.

DeddyH 19. Okt 2009 13:35

Re: Komme nicht weiter mit Zeitvergleichen?
 
Nochmal: man vergleicht keine 2 Double-Werte mit =, da die Wahrscheinlichkeit gering ist, dass sie wirklich exakt übereinstimmen.

AlexII 19. Okt 2009 13:36

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von Sir Rufo
Zitat:

Zitat von AlexII
Und wieso vergleichst du mit >= und nicht einfach = ? :gruebel:

Liest du auch, was hier in dem Thread geschrieben steht?

Es gibt mehrere Antworten, die sich genau darauf beziehen.

Wenn man bei 25 Posts 30 verschiedene Meinungen hört kommt man durcheinander. :roteyes:

DeddyH 19. Okt 2009 13:39

Re: Komme nicht weiter mit Zeitvergleichen?
 
Wirf doch einfach mal einen Blick in die Unit DateUtils, da steht viel Nützliches für Deine Zwecke drin.

AlexII 19. Okt 2009 13:40

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von DeddyH
Nochmal: man vergleicht keine 2 Double-Werte mit =, da die Wahrscheinlichkeit gering ist, dass sie wirklich exakt übereinstimmen.

Ich muss das leider genau haben, also = :gruebel: Dann muss ich wohl die Sekunden streichen.

AlexII 19. Okt 2009 13:41

Re: Komme nicht weiter mit Zeitvergleichen?
 
Zitat:

Zitat von DeddyH
Wirf doch einfach mal einen Blick in die Unit DateUtils, da steht viel Nützliches für Deine Zwecke drin.

Wo kriegt man sie her? :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr.
Seite 3 von 4     123 4      

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