Delphi-PRAXiS

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 Uhrzeiten vergleichen (https://www.delphipraxis.net/128008-uhrzeiten-vergleichen.html)

Ykcim 22. Jan 2009 15:44


Uhrzeiten vergleichen
 
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

DeddyH 22. Jan 2009 15:49

Re: Uhrzeiten vergleichen
 
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.

himitsu 22. Jan 2009 15:49

Re: Uhrzeiten vergleichen
 
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
Delphi-Quellcode:
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;

Ykcim 22. Jan 2009 16:39

Re: Uhrzeiten vergleichen
 
Hallo,

ersteinmal vielen Dank für die Antworten!!!

Ich muss aber mein Verständnis noch hinterfragen:

Delphi-Quellcode:
 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?


Delphi-Quellcode:
        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

Ykcim 22. Jan 2009 16:48

Re: Uhrzeiten vergleichen
 
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?

DeddyH 22. Jan 2009 16:57

Re: Uhrzeiten vergleichen
 
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;

Anonymos 22. Jan 2009 17:03

Re: Uhrzeiten vergleichen
 
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

himitsu 22. Jan 2009 17:04

Re: Uhrzeiten vergleichen
 
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:
Delphi-Quellcode:
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.
Delphi-Quellcode:
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

DeddyH 22. Jan 2009 17:11

Re: Uhrzeiten vergleichen
 
Die Sekunden hatte ich erst draußen, aber ich weiß ja nicht, wie genau das nun werden soll.

himitsu 22. Jan 2009 17:15

Re: Uhrzeiten vergleichen
 
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 :stupid:

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.

Ykcim 22. Jan 2009 17:19

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?

himitsu 22. Jan 2009 17:22

Re: Uhrzeiten vergleichen
 
dann wird (z.B. wenn das TimerIntervall auf 1000 steht die Nachricht bis zu 3600 Mal pro Stunde angezeigt?

DeddyH 22. Jan 2009 17:23

Re: Uhrzeiten vergleichen
 
Dann muss man sich halt merken, ob das innerhalb der aktuellen Stunde bereits passiert ist.

himitsu 22. Jan 2009 17:34

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

hoika 22. Jan 2009 17:58

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

Ykcim 23. Jan 2009 08:24

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

Ykcim 23. Jan 2009 08:27

Re: Uhrzeiten vergleichen
 
Hatte hier noch einmal alles gepostet, bevor ich den edit-Button gefunden hatte... :wall: :cheers:

Tango 17. Okt 2014 18:48

AW: Re: Uhrzeiten vergleichen
 
Zitat:

Zitat von himitsu (Beitrag 871824)
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
Delphi-Quellcode:
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.

himitsu 17. Okt 2014 19:02

AW: Re: Uhrzeiten vergleichen
 
Zitat:

Zitat von Tango (Beitrag 1276460)
Delphi-Quellcode:
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

Delphi-Quellcode:
If (x <= 6) and (x > 14)
, bzw. umgestellt
Delphi-Quellcode:
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.

Sir Rufo 17. Okt 2014 19:25

AW: Uhrzeiten vergleichen
 
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
Delphi-Quellcode:
Time
? - Irgendeinen, also ein Zufallsgenerator?
Wofür wird
Delphi-Quellcode:
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;

Tango 17. Okt 2014 23:16

AW: Uhrzeiten vergleichen
 
Danke an euch beiden.sobald ich von der Arbeit komme werde ich es genauer studieren und testen.

hstreicher 18. Okt 2014 10:15

AW: Uhrzeiten vergleichen
 
mal ein Alternativvorschlag ,
anstatt die Zeiten zu vergleichen ,
prüf doch einfach wies spät ist es, wann ist die nächste Aktion fällig
und setzt den Timer auf die Differenz

hathor 18. Okt 2014 13:04

AW: Uhrzeiten vergleichen
 
Den Stundenwechsel kann man einfach so erfassen:

Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var aHour,aMin,aSec,aMSec: Word;
begin
repeat
  Label1.Caption := TimeToStr(Time);
  DecodeTime(now,aHour,aMin,aSec,aMSec);
  sleep(1000);
until (aHour in [6..19]) and (aMin = 0);
 Winapi.Windows.Beep(1500,200); // ----ab hier ACTION !
end;

Dejan Vu 18. Okt 2014 18:57

AW: Uhrzeiten vergleichen
 
Oder so:

Delphi-Quellcode:
Const
  SixAM = 6/24;
  SevenPM=19/24;

var
  theTime : Double;

begin
  theTime := Fract(Now);
  if (theTime >= sixAM) and (theTime <=SevenPM) then
    ShowMessage('Es ist irgendwann zwischen 06:00 und 19:00');

Tango 18. Okt 2014 18:58

AW: Uhrzeiten vergleichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Sir Rufo (Beitrag 1276463)
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
Delphi-Quellcode:
Time
? - Irgendeinen, also ein Zufallsgenerator?
Wofür wird
Delphi-Quellcode:
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;

So habe es mal ausprobiert, bekomme Fehlermeldung, nicht des so Trotzt so wie ich es verstanden habe überprüft der Timer ob es exakt 6:00 oder 14:00 ist
es sollte aber zwischen 6:00-14:00, 14:01-22:00, 22:01-6:00 unterscheiden.

Sir Rufo 18. Okt 2014 19:22

AW: Uhrzeiten vergleichen
 
Ein Blick in die Doku Delphi-Referenz durchsuchenEncodeTime oder ein STRG-Click hätte dir sofort geholfen. :roll:

Kein Wunder, dass Emba sich damit Zeit lässt, denn gefühlt schaut da niemand rein.

Und nein es wird nicht exakt auf den Zeitpunkt geprüft, sondern in welchem Bereich der übergebene Zeitpunkt liegt.
Code:
Wenn Vor 06:00 dann Nachtschicht
Sonst Wenn Vor 14:00 dann Frühschicht
Sonst Wenn Vor 22:00 dann Spätschicht
Sonst Nachtschicht
Ach ja, der Timer prüft gar nichts, sondern der sorgt nur dafür, dass das Edit-Control die Schicht-Bezeichnung zur aktuellen Uhrzeit bekommt. Oder was heisst wohl GetShiftNameFromTime? Wenn man das noch sprechender gestalten will, dann benötigt man wohl zusätzliche externe Hardware (Holzhammer) ;)

Tango 18. Okt 2014 20:05

AW: Uhrzeiten vergleichen
 
Danke, dank deiner Link habe ich gesehen das die Millisekunde gefehlt hat, eingetragen schon lief alles wie es soll.
Nur das mit dem Strg+click funktioniert nicht, sobald ich auf dem Code draufgehe und Strg+Click passiert bei mir nichts. Es soll so wie ich verstanden habe mir die Doku öffnen für das passende Befehl.

Sir Rufo 18. Okt 2014 20:13

AW: Uhrzeiten vergleichen
 
Mit gedrückter STRG Taste auf das Wort klicken und es öffnet sich die Unit und der Cursor steht direkt im Quelltext auf der Definition. Man kann also sofort sehen, wie das deklariert ist und was da genau passiert.

himitsu 18. Okt 2014 20:17

AW: Uhrzeiten vergleichen
 
In der Starter gibt es keine RTL/VCL-Quellcodes,
aber das Help-Insight gibt es hoffentlich (Mauszeiger 'nen paar Sekunden über den Befehl halten)
und natürlich das F1. :roll:

Im Debugger fehlt das Insight "Wert der Variable anzeigen" im Starter, so wie vieles Andere ebenfalls.

Tango 18. Okt 2014 20:25

AW: Uhrzeiten vergleichen
 
Danke an euch allen, ja mit Starter hat es wie du sagtest mit Befehl auswählen und f1 drücken geklappt :) habe heute vieles gelernt.

Tango 19. Okt 2014 20:05

AW: Uhrzeiten vergleichen
 
Habe mal etwas experimentiert, aber eins verstehe ich nicht (obwohl es klappt) im Doku steht

Code:
EncodeTime codiert die angegebenen Werte für Stunde, Minute, Sekunde und Millisekunde in einen Wert des Typs TDateTime.

[B]Für Hour sind Werte von 0 bis 23 zulässig.[/B]

Die gültigen Werte für Min und Sec liegen zwischen 0 und 59.

Die gültigen Werte für MSec liegen zwischen 0 und 999.
Wenn ich h=23 einstelle bekomme ich 23:xx falsches Wert wenn ich aber h=24 eingebe funktioniert es.

Delphi-Quellcode:
function GetShiftNameFromTime ( ATime : TTime ): string;
var
  LTime : TTime;
begin
  LTime := Frac ( ATime );
  if LTime < EncodeTime ( 6, 0, 0, 0 )
  then
    Result := 'Nachtscicht'
  else if LTime < EncodeTime ( 14, 0, 0, 0 )
  then
    Result := 'Frühschicht'
  else if LTime < EncodeTime ( 22, 0, 0, 0 )
  then
    Result := 'Spätschicht'
  else
    Result := 'Nachtschicht';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Edit1.Text := GetShiftNameFromTime ( Now );
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var
h, m, s, ms: Word;
begin
DecodeTime(Time, h, m, s, ms);
if (h >= 6) and (h< 24) then edit2.Text:=DateToStr(now)
else
edit2.Text:=DateToStr(now -1);
end;

end.

Sir Rufo 19. Okt 2014 20:13

AW: Uhrzeiten vergleichen
 
:wiejetzt:
Wo geht was nicht, wo hast du
Delphi-Quellcode:
EncodeTime
mit h=23?

Tango 19. Okt 2014 20:19

AW: Uhrzeiten vergleichen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1276614)
:wiejetzt:
Wo geht was nicht, wo hast du
Delphi-Quellcode:
EncodeTime
mit h=23?

Nee, EncodeTime meine ich nicht DecodeTime wenn ich h(stunde)< wie 23 Stunden schreibe (soll ja von 0-23 sein) bekomme ich nicht das Resultat was ich haben wollte.
Ich habe es auch falsch formuliert, wenn die Zeit zwischen 22:00 bis 6:00 ist ist es Nachtschicht.

Angenommen Heute haben wir 20.10.2014 ,ab 0:00Uhr wird es 21.10.2014 es soll aber erst ab 6:00 21.10.2014 werden weil von 0:00-6:00 noch zur Nachtschicht gehört.
deswegen habe ich es so eingestellt zwischen 6:00-24:00 eingegeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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-2025 by Thomas Breitkreuz