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 2 von 4     12 34      
Ykcim

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

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 17:19
@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

Edit:

Was ist denn, wenn ich Minuten und Sekunden weglasse und den Timer auf eine Stunde einstelle?
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 17:22
dann wird (z.B. wenn das TimerIntervall auf 1000 steht die Nachricht bis zu 3600 Mal pro Stunde angezeigt?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 17:23
Dann muss man sich halt merken, ob das innerhalb der aktuellen Stunde bereits passiert ist.
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
43.116 Beiträge
 
Delphi 12 Athens
 
#14

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 17:34
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Uhrzeiten vergleichen

  Alt 22. Jan 2009, 17:58
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
Heiko
  Mit Zitat antworten Zitat
Ykcim

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

Re: Uhrzeiten vergleichen

  Alt 23. Jan 2009, 08:24
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:
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;
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.

Und damit das Programm nicht immer nur in den ersten 10 Minuten einer Stunde gestartet werden sollte, schicke ich das vorab:
Delphi-Quellcode:
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;
Wie ist eure Meinung dazu?

Danke
Patrick
  Mit Zitat antworten Zitat
Ykcim

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

Re: Uhrzeiten vergleichen

  Alt 23. Jan 2009, 08:27
Hatte hier noch einmal alles gepostet, bevor ich den edit-Button gefunden hatte...
Patrick
  Mit Zitat antworten Zitat
Tango

Registriert seit: 17. Apr 2011
Ort: Aachen
64 Beiträge
 
Delphi XE2 Starter
 
#18

AW: Re: Uhrzeiten vergleichen

  Alt 17. Okt 2014, 18:48
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;
Um das ganze zu verstehen habe ich mal eine Beispiel erstellt, leider bekomme ich immer falsches Wert

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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Re: Uhrzeiten vergleichen

  Alt 17. Okt 2014, 19:02
If (Frac(Time) <= StrToTime('06:00:00')) and (Frac(Time) > StrToTime('14:00:00'))
Kleiner-gleich 6 Uhr (vor 7 Uhr) UND größer/nach 14 Uhr

If (x <= 6) and (x > 14) , bzw. umgestellt If (6 >= x) and (x > 14) (6 >= x > 14)
Lösung: Also entweder ODER oder du müsstest die Vergleichsoperatoren umdrehen.

PS: Schau auch mal in die neue DateUtils.
Delphi-Referenz durchsuchenTimeOf ist bestimmt verständlicher als Delphi-Referenz durchsuchenFrac und es gibt noch viele weitere praktische Funktionen dort, wie z.B. Delphi-Referenz durchsuchenTimeInRange.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Okt 2014 um 19:13 Uhr)
  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
 
#20

AW: Uhrzeiten vergleichen

  Alt 17. Okt 2014, 19:25
Erst mal formatieren, dann schauen, dann denken
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.
Welchen Wert hat Time ? - Irgendeinen, also ein Zufallsgenerator?
Wofür wird LastTime ein Wert zugeordnet? Für nix.

Ich würde es mal damit probieren
Delphi-Quellcode:
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;
Verwenden dann so
Delphi-Quellcode:
procedure TForm1.Timer1Timer ( Sender : TObject );
begin
  Edit1.Text := GetShiftNameFromTime ( Now );
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
Antwort Antwort
Seite 2 von 4     12 34      


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 05:10 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