AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komme nicht weiter mit Zeitvergleichen?

Ein Thema von AlexII · begonnen am 19. Okt 2009 · letzter Beitrag vom 19. Okt 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:12
Hallo,
ich möchte einen Wecker schreibe und hab folgendes geschrieben:

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

procedure TForm4.Timer1Timer(Sender: TObject);
begin
if DateTimePicker2.Time=Now then ShowMessage('Ok');
end;
Die if Abfrage funktioniert komischerweise nicht, verstehe nicht wieso, ist doch alles richtig geschrieben. Timer.Interval :=1 sek. Wer weiß da weiter? Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:18
Der Wert von Now ist genauer als der Wert, den du angibst. 15.42 Uhr ist halt nicht derselbe Zeitpunkt wie 15.42 Uhr, 13 Sekunden und 123 Millisekunden.

Außerdem: TDatetime ist ein Float-Typ - die sollte man generell nicht auf Gleichheit überprüfen.
The angels have the phone box.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:22
Also DateTimePicker2.Time zeigt auch Sekunden an.... hm... und Timer vergleicht auch Millisekunden ah..jah...
Wie vergleicht man dann am besten eine Uhrzeit? Auch so, dass es auf Fremdsprachwindows läuft.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:24
Und wenn man etwas nicht versteht, dann gibt man sich die Werte mal in einer Memo aus und schaut, ob der Vergleich wirklich passen könnte
Delphi-Quellcode:
procedure TForm4.Timer1Timer(Sender: TObject);
var
  Vergleich : TDateTime;
begin
  Vergleich := now; // Merken, weil now ja weiter läuft!!!
  Memo1.Lines.Add( Format( 'DateTimePicker: %s Now: %s', [ FloatToStr( DateTimePicker2.Time ), FloatToStr( Vergleich ) ] );
  if ( DateTimePicker2.Time = Vergleich ) then ShowMessage('Ok');
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:24
Zitat von AlexII:
... Wie vergleicht man dann am besten eine Uhrzeit? ...
In diesem Fall einfach mit >= vergleichen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:25
Zitat von Sharky:
Zitat von AlexII:
... Wie vergleicht man dann am besten eine Uhrzeit? ...
In diesem Fall einfach mit >= vergleichen.
Plus einem Deltawert, sonst stimmt der Vergleich 23 Stunden und 59 Minuten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:33
Zitat von Sir Rufo:
Und wenn man etwas nicht versteht, dann gibt man sich die Werte mal in einer Memo aus und schaut, ob der Vergleich wirklich passen könnte
Delphi-Quellcode:
procedure TForm4.Timer1Timer(Sender: TObject);
var
  Vergleich : TDateTime;
begin
  Vergleich := now; // Merken, weil now ja weiter läuft!!!
  Memo1.Lines.Add( Format( 'DateTimePicker: %s Now: %s', [ FloatToStr( DateTimePicker2.Time ), FloatToStr( Vergleich ) ] );
  if ( DateTimePicker2.Time = Vergleich ) then ShowMessage('Ok');
end;
Now muss ja auch weiterlaufen, DateTimePicker2.Time bleibt konstant eingestellt und vergleichen tust du genauso wie ich, was genauso nicht funktioniert.
  Mit Zitat antworten Zitat
TheFrog

Registriert seit: 24. Mär 2009
145 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:41
Vielleicht kommst Du ja mit der Delphi-Procedure DecodeTime() weiter. Diese zerlegt Dir den Zeitwert in Stunden, Minuten, ..., welche Du dann vergleichen kannst.

Hans.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:44
Zitat von AlexII:
Zitat von Sir Rufo:
Und wenn man etwas nicht versteht, dann gibt man sich die Werte mal in einer Memo aus und schaut, ob der Vergleich wirklich passen könnte
Delphi-Quellcode:
procedure TForm4.Timer1Timer(Sender: TObject);
var
  Vergleich : TDateTime;
begin
  Vergleich := now; // Merken, weil now ja weiter läuft!!!
  Memo1.Lines.Add( Format( 'DateTimePicker: %s Now: %s', [ FloatToStr( DateTimePicker2.Time ), FloatToStr( Vergleich ) ] );
  if ( DateTimePicker2.Time = Vergleich ) then ShowMessage('Ok');
end;
Now muss ja auch weiterlaufen, DateTimePicker2.Time bleibt konstant eingestellt und vergleichen tust du genauso wie ich, was genauso nicht funktioniert.
Du sollst Dir ja auch die Werte !!ansehen!! und dann wirst du !!sehen!! warum das nicht funktioniert!!!
Und der Wert von Now wird sich deshalb gemerkt, damit auch das ausgegeben wird, was danach dann auch verglichen wird!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#10

Re: Komme nicht weiter mit Zeitvergleichen?

  Alt 19. Okt 2009, 13:47
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
Oliver
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.
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