AGB  ·  Datenschutz  ·  Impressum  







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

Uhrzeiten vergleichen

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

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#1

Uhrzeiten vergleichen

  Alt 22. Jan 2009, 16:44
Hallo,

ich habe eine wahrscheinlich simple Frage:

Ich möchte ein Programm schreiben, dass von 06:00Uhr bis 19:00Uhr immer zur vollen Stunde etwas ausführt. Ich wollte dazu den Timer verwenden und die aktuelle Zeit mit einer vorgegebenen Zeit(en) vergleichen.

Aber irgendwie klappt das nicht!

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var DateTime:TDateTime;

begin
   label1.Caption:=timetostr(now);
   If Now() = strtotime('16:40:50')then
   showmessage(timetostr(now));

end;
Kann mir da jemand helfen?

Danke
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.626 Beiträge
 
Delphi 12 Athens
 
#2

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 16:49
Ein TDateTime besteht aus dem Vorkommaanteil für das Datum und dem Nachkommaanteil für die Zeit. Um also nur Zeiten zu vergleichen, darfst Du nur den Nachkommaanteil betrachten (den bekommt man mit Frac()). Andere Möglichkeit: EncodeDate() und DecodeDate() und/oder die Funktionen aus der Unit DateUtils verwenden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 16:49
Da du ja deinen Timer nicht im Millisekundenrythmus ausführen kannst, wirst du nicht geneu vergleichen lassen können.

nimm die nächste Zeit (nächste volle stunde) und prüf so
If Trunc(Now) >= strtotime('16:00:00') then Ach ja, Now enthält auch noch die Tage(Monate,Jahre) ... die müßtest du erstmal rausrechnen.



[add]
ungetestet ... mal sehn, ob ich 'nen Denkfehler hab

(Frac(Time) >= StrToTime('06:00:00')) and (Frac(Time) < StrToTime('20:00:00'))
prüfen ob es ab 6°° und vor 20°° (also bis kurz nach 19°°) ist

Trunc(Frac(Time) * 24) > Trunc(Frac(LastTime) * 24)
Zeiten in Stunden umrechnen und vergleichen

Delphi-Quellcode:
Var LastTime: TDateTime; // am Besten im Private-Abschnitt von TForm1 deklarieren

Procedure TForm1.Timer1Timer(Sender: TObject);
  Var Time: TDateTime;

  Begin
    Time := Now;
    Label1.Caption := TimeToStr(Time);
    If (Frac(Time) >= StrToTime('06:00:00')) and (Frac(Time) < StrToTime('20:00:00'))
        and (Trunc(Frac(Time) * 24) > Trunc(Frac(LastTime) * 24)) Then Begin
      LastTime := Time;
      Showmessage(TimeToStr(Time));
    End;
  End;

// und nicht vergessen LastTime zu initalisieren
// LastTime := Now;
$2B or not $2B
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 17:39
Hallo,

ersteinmal vielen Dank für die Antworten!!!

Ich muss aber mein Verständnis noch hinterfragen:

 If (Frac(Time) >= StrToTime('06:00:00')) and (Frac(Time) < StrToTime('20:00:00')) Damit wird geprüft, es gerade zwischen 06:00 und kleiner 19:00 Uhr ist?


        and (Trunc(Frac(Time) * 24) > Trunc(Frac(LastTime) * 24)) Then Begin Damit wird geprüft, dass die aktuelle Uhrzeit größer ist als die bei der Aktion gespeicherten Uhrzeit?

Aber wo wird jede volle Stunde geprüft?

Danke im Voraus
Patrick
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 17:48
Warum kann ich eigentlich nicht bei der aktuelle Uhrzeit nur die Stunden, Minuten und Sekunden vergleichen und die Milisekunden unberücksichtigt lassen, wenn mein Timer alle Sekunde läuft?
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.626 Beiträge
 
Delphi 12 Athens
 
#6

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 17:57
Versuch es mal so:
Delphi-Quellcode:
var aHour,aMin,aSec,aMSec: Word;
begin
  DecodeTime(now,aHour,aMin,aSec,aMSec);
  if (aHour in [6..19]) and (aMin = 0) and (aSec = 0) then
    ShowMessage('Volle Stunde');
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#7

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 18:03
Des mit den Sekunden würd ich lieber weglassen, wenn er dann nähmlich wegen CPU-Verzögerungszeiten dese Sekunde "vergisst" stehste dumm da.

nun du kannst ja einfach prüfen, ob die neue Zeit in Stunden (min) >= die letzte Stunde ist.

Es ist jedoch nicht sinnvoll einen Timer jede Sekunde zu starten wenn er eigentlich nur jede Stunde arbeiten sollte. Da hat dein PC viel zu viel zu tun, ohne eigentlich was zu tun.

Stelle ihn doch lieber auf 30-45 min, un lass ihn sich dann selbst dynamisch auf den Zeitverbrauch reagieren, damit der dann genau zur Vollen Stunde seine Aktion ausführt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 18:04
warum das nicht geht?
laß mal dein Programm, bei DeddyH's Code für einen Sekündchen hängen ... schwußt, die x:00:00 würde übersprungen und es passiert nix

und bei Now = StrToTime('16:00:00') wird, wenn das nicht "fast" auf die Millisekunde genau um 16°° verglichen wird, auch nie was passieren.


bei "meinem" Code kannst du den Timer auch locker im Minuten-Interval laufen lassen,
aber selbst ein 1-Sekundenintervall würde nicht wirklich viele Systemresourcen verbrauchen.
bei DeddyH's Code sollte der Timer schon sicherheitshalber mehrmals pro Sekunde diesen Vergleich ausführen und selbs da ist es nicht sicher, daß das Ereignis ausgelöst wird (wie gesagt, da braucht nur der Rechner mal kurz etwas zu sehr ausgelastet sein)





Da du ja 19°° auch noch haben möchtest, wird also auf kleiner 20°° geprüft.

theoretisch würde es auch ausreichen, wenn z.B. etwa so geprüft würde:
If (Stunde >= '06:00:00') and (Stunde < '19:05:00') aber ganze Zahlen sehen auch nett aus

Die Prüfung ob es Zeit zur Anzeige ist, erfollgt meißt kurz nach der vollen Stunde,
also könnte bei (Frac(Time) <= StrToTime('19:00:00')) das 19°°-Ereignis ausfallen

aber mir fällt grad was auf ... das Frac bei der Stundenprüfung macht kleine Probleme bei Tageswechsel, also wenn das Programm die Nacht durchläuft.
and (Trunc(Time * 24) > Trunc(LastTime * 24)) Then Begin hier werden jeweils die Stunden vor das Komma (siehe Delphi-Referenz durchsuchenTDateTime) verschoben und dann verglichen
und sobald sich die errechnete Zahl(Zeit) ändert, wird die Nachricht angezeigt.

(x = Anzahl der Tage seit 30.12.1899)
12:00 = x.5 ... x.5 * 24 = 12.0
6:00 = x.25 ... x.25 * 24 = 6.0
6:12 = x.2583 ... x.2583 * 24 = 6.2 ... Trunc(6.2) = 6
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.626 Beiträge
 
Delphi 12 Athens
 
#9

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 18:11
Die Sekunden hatte ich erst draußen, aber ich weiß ja nicht, wie genau das nun werden soll.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 18:15
OK, dann laß mal die Sekunden weg, aber was glaubst du denn, was dann passiert?

ja richtig: die Nachricht wird mehrmals angezeigt
OK, der Timer auf 1 Minute , da kommt dann die Nachricht maximal einmal an, oder auch garnicht

So oder so, das Intervall muß (bei deinem Code) kürzer sein, als seine Vergleichtdistanz und es immer muß das letze Ereignis gespeichert und beachtet werden.
$2B or not $2B
  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 02:58 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