if Else Bedingung mit ausgerechneten Zeiten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Donny3583
Beiträge: 2
Registriert: Fr 28. Apr 2017, 10:47

if Else Bedingung mit ausgerechneten Zeiten

Beitrag von Donny3583 »

Hallo,

seit einigen Wochen befasse ich mich nun mit Lazarus (v1.6). Hab auch schon einige Sachen hin bekommen. Da ich die meisten Sachen selber raus bekommen möchte hat mich das etliche Zeit in Foren und bei einem Namhaften Anbieter einer Suchmachine gekostet.

Allerdings hänge ich seit ca. 3 Tagen an einem Problem das ich einfach nicht gelöst bekomme.

Momentan schreibe ich an einem Programm bei dem ich meine Arbeitszeit eintragen kann, die Stundenanzahl zeigt es mir auch korekt an, ich möchte aber das aus der Arbeitszeit rausgelesen wird wieviel Pause ich (Gesetzlich) machen muss.
Z.B zw. 0 - 3h -> 0min Pause
zw. 3 - 6h -> 15min Pause
zw. 6 - 9h -> 30min Pause
zw. 9 - 12h -> 45min Pause

Ich versuche das die ganze Zeit über If Else, die wie folgt aussieht:

Code: Alles auswählen

begin //Pausenzeit
   Zeit4  := Zeit2 - Zeit1;
   if (Zeit4 >= 00) and (Zeit4 < 03) then
   LabeledEdit6.Text:= FormatDateTime ('hh:mm', 00)
   else if (Zeit4 >= 03) and (Zeit4 < 06) then
   LabeledEdit6.Text:= FormatDateTime ('hh:mm', 15)
   else if (Zeit4 >= 06) and (Zeit4 < 09) then
   LabeledEdit6.Text:= FormatDateTime ('hh:mm', 30)
   else if (Zeit4 >= 09) and (Zeit4 < 12)then
   LabeledEdit6.Text:= FormatDateTime ('hh:mm', 45);
end;

Zeit1, Zeit2 und Zeit4 sind als Variable TDateTime deklariert (auch schon als TTime probiert).
Ich habe bereits einige Konstelationen durch die ich so gefunden habe, allerdings haben die mir nicht wirklich weiter geholfen. Bekomme bei Pausenzeit immer 00:00 angezeigt.

Schonmal vielen Dank für Eure Hilfe.

Grüße Donny

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: if Else Bedingung mit ausgerechneten Zeiten

Beitrag von Mathias »

Dein Problem liegt nicht am if-Block, sondern an FormatDateTime.
Wen du folgendes probierst bekommst du auch 00:00

Code: Alles auswählen

  Caption := FormatDateTime('hh:mm', 15);


Mache es doch einfach

Code: Alles auswählen

LabeledEdit6.Text:=  '00:15';
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: if Else Bedingung mit ausgerechneten Zeiten

Beitrag von Michl »

Hallo Donny und willkommen in Lazarusforum!

TDateTime speichert ganzzahlig Tage, die Nachkommastellen sind für Stunden, Minuten, Sekunden usw. Du fragst nach Tagen und nicht, wie du möchstest, nach Stunden ab. Der Code müsste daher in etwa so aussehen:

Code: Alles auswählen

begin
  Zeit4  := Zeit2 - Zeit1;
  if (Zeit4 >= 00) and (Zeit4 < 03/24) then // hier in Stunden umwandeln (3h/24h je Tag)
  LabeledEdit6.Text:= FormatDateTime ('hh:mm', 00)
  else if (Zeit4 >= 03/24) and (Zeit4 < 06/24) then  // hier in Stunden umwandeln
  LabeledEdit6.Text:= FormatDateTime ('hh:mm', 15/24/60)  // auch hier in Minuten umwandeln
  else if (Zeit4 >= 06/24) and (Zeit4 < 09/24) then
  LabeledEdit6.Text:= FormatDateTime ('hh:mm', 30/24/60)
  else if (Zeit4 >= 09/24) and (Zeit4 < 12/24)then
  LabeledEdit6.Text:= FormatDateTime ('hh:mm', 45/24/60);
end;   

Übrigens lässt sich der Code auch etwas kürzen (ob es verständlicher ist, darüber kann man sicher streiten):

Code: Alles auswählen

begin
  Zeit4  := Zeit2 - Zeit1;
  LabeledEdit6.Text := FormatDateTime('hh:mm', Trunc(Zeit4 * 24/3) * 15/24/60);
end

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Donny3583
Beiträge: 2
Registriert: Fr 28. Apr 2017, 10:47

Re: if Else Bedingung mit ausgerechneten Zeiten

Beitrag von Donny3583 »

@Mathias, Danke dir, aber das war es leider nicht.

@Michl, Danke dir, läuft jetzt.

Antworten