![]() |
Re: Uhrzeiten vergleichen
@DeddyH
DAS IST SPITZE!!! GENAU WAS ISCH GESUCHT HABE! @ himitsu Deine Lösung funktionierte auch (damit will ich nur sagen, dass ich sie bei der Übernahme nicht verpfuscht habe), aber die Lösung von DeddyH verstehe ich besser. Ich werden mir aber Deine Erklärung noch sehr genau ansehen, um sie zu verstehen! Vielen Dank für die ausführlichen Informationen! @Anonymos Danke für den Hinweis, da hast Du sicherlich recht. Werde es berücksichtigen! Danke :-D :cyclops: Edit: Was ist denn, wenn ich Minuten und Sekunden weglasse und den Timer auf eine Stunde einstelle? |
Re: Uhrzeiten vergleichen
dann wird (z.B. wenn das TimerIntervall auf 1000 steht die Nachricht bis zu 3600 Mal pro Stunde angezeigt?
|
Re: Uhrzeiten vergleichen
Dann muss man sich halt merken, ob das innerhalb der aktuellen Stunde bereits passiert ist.
|
Re: Uhrzeiten vergleichen
wenn es nicht ganz genau sein muß, dann geht auch sowas (falls ich mich nicht verrechnet hab)
Delphi-Quellcode:
// Timer1.Enabled per Default auf False
Procedure TForm1.Timer1Timer(Sender: TObject); Begin Timer.Enabled := False; Showmessage(TimeToStr(Now)); Timer1.Intervall := 24*60*1000 - (Trunc(Now * 24*60*1000) - Trunc(Now * 24)*60*1000); Timer1.Enabled := True; End; // Timer das erste Mal starten Timer1.Intervall := 24*60*1000 - (Trunc(Now * 24*60*1000) - Trunc(Now * 24)*60*1000); Timer1.Enabled := True; ohne langsamen StrToTime und etwas langsameren DecodeTime
Delphi-Quellcode:
Var LastTime: Integer; // 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) >= 0.25{6:00}) and (Frac(Time) < 0.8{19:12}) and (Trunc(Time * 24) > LastTime) Then Begin LastTime := Trunc(Time * 24); Showmessage(TimeToStr(Time)); End; End; // und nicht vergessen LastTime zu initalisieren // LastTime := 0; // // ist es aber in Private von TForm1 deklariert, // dann ist es automatisch schon initialisiert |
Re: Uhrzeiten vergleichen
Hallo,
DeddyH hat den richtigen Tip. Merke dir einfach, das das Ereignis für eine bestimmte Stunde schon gefeuert hatte in einer Liste. Dann kannst du sogar sowas wie " + 2 Minuten ist auch noch OK" einbauen. Heiko |
Re: Uhrzeiten vergleichen
Hallo Zusammen,
vielen Dank für die vielen guten Antworten! Ich muss gestehen, dass ich die Berechnung der Zeiten nicht ganz verstehe - ich hatte noch nie damit zu tun... Was haltet ihr denn davon:
Delphi-Quellcode:
Damit habe ich meinen Timerintervall auf 1h festgelegt (ich muss mir also nicht mehr merken, ob schon eine Aktualisierung in der aktuellen Stunde durchgeführt wurde), aber eventuelle Verzögerungen werden durch die Minutentoleranz wieder abgefangen.
procedure TForm1.Timer1Timer(Sender: TObject);
var aHour,aMin,aSec,aMSec: Word; begin Timer1.Interval:=3600000; Label1.Caption := TimeToStr(Time); DecodeTime(now,aHour,aMin,aSec,aMSec); if (aHour in [6..19]) and (aMin in [0..10]) then ShowMessage('Volle Stunde'); if (aHour = 5) and (aMin in [0..10]) then //Damit, wenn das Programm sehr lange begin //läuft, ich nicht irgendwann durch Timer2.Enabled:=true; //sehr sehr viele Hänger aus dem Timer1.Enabled:=false; //10 Minutenfenster falle... end; end; Und damit das Programm nicht immer nur in den ersten 10 Minuten einer Stunde gestartet werden sollte, schicke ich das vorab:
Delphi-Quellcode:
Wie ist eure Meinung dazu?
procedure TForm1.Timer2Timer(Sender: TObject);
var aHour,aMin,aSec,aMSec: Word; begin Timer2.Interval:=1000; Label1.Caption := TimeToStr(Time); Timer1.Enabled:=false; DecodeTime(now,aHour,aMin,aSec,aMSec); if (aMin in [0..5]) then //Wird ja nach dem ersten Durchlaufen der begin //IF-Schleife abgeschlatet... Timer1.Enabled:=true; Timer2.Enabled:=false; showmessage('Timer2 false'); end; end; Danke |
Re: Uhrzeiten vergleichen
Hatte hier noch einmal alles gepostet, bevor ich den edit-Button gefunden hatte... :wall: :cheers:
|
AW: Re: Uhrzeiten vergleichen
Zitat:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
Var Time,LastTime: TDateTime; begin If (Frac(Time) <= StrToTime('06:00:00')) and (Frac(Time) > StrToTime('14:00:00')) Then LastTime := now; edit1.Text:= 'Frühschicht'; If (Frac(Time) <= StrToTime('14:00:01')) and (Frac(Time) > StrToTime('22:00:00')) Then edit1.Text:= 'Spätschicht'; LastTime := Now ; end; end. |
AW: Re: Uhrzeiten vergleichen
Zitat:
Delphi-Quellcode:
, bzw. umgestellt
If (x <= 6) and (x > 14)
Delphi-Quellcode:
(6 >= x > 14)
If (6 >= x) and (x > 14)
Lösung: Also entweder ODER oder du müsstest die Vergleichsoperatoren umdrehen. PS: Schau auch mal in die neue DateUtils. ![]() ![]() ![]() |
AW: Uhrzeiten vergleichen
Erst mal formatieren, dann schauen, dann denken
Delphi-Quellcode:
Welchen Wert hat
procedure*TForm1.Timer1Timer(Sender: TObject);
Var* Time, LastTime: TDateTime; begin **If*(Frac(Time) <= StrToTime('06:00:00'))*and*(Frac(Time) > StrToTime('14:00:00')) **Then ****LastTime := now; edit1.Text:= 'Frühschicht'; If*(Frac(Time) <= StrToTime('14:00:01'))*and*(Frac(Time) > StrToTime('22:00:00')) **Then edit1.Text:= 'Spätschicht'; LastTime := Now ; end; end.
Delphi-Quellcode:
? - Irgendeinen, also ein Zufallsgenerator?
Time
Wofür wird
Delphi-Quellcode:
ein Wert zugeordnet? Für nix.
LastTime
Ich würde es mal damit probieren
Delphi-Quellcode:
Verwenden dann so
function GetShiftNameFromTime ( ATime : TTime ): string;
var LTime : TTime; begin LTime := Frac ( ATime ); if LTime < EncodeTime ( 6, 0, 0 ) then Result := 'Nachtschicht' else if LTime < EncodeTime ( 14, 0, 0 ) then Result := 'Frühschicht' else if LTime < EncodeTime ( 22, 0, 0 ) then Result := 'Spätschicht' else Result := 'Nachtschicht'; end;
Delphi-Quellcode:
procedure TForm1.Timer1Timer ( Sender : TObject );
begin Edit1.Text := GetShiftNameFromTime ( Now ); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz