if Else Bedingung mit ausgerechneten Zeiten

Für Fragen von Einsteigern und Programmieranfängern...

if Else Bedingung mit ausgerechneten Zeiten

Beitragvon Donny3583 » 1. Mai 2017, 16:40 if Else Bedingung mit ausgerechneten Zeiten

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
Donny3583
 
Beiträge: 2
Registriert: 28. Apr 2017, 09:47

Beitragvon Mathias » 1. Mai 2017, 17:39 Re: if Else Bedingung mit ausgerechneten Zeiten

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 2666
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Michl » 1. Mai 2017, 18:34 Re: if Else Bedingung mit ausgerechneten Zeiten

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; 
Michl
 
Beiträge: 2086
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon Donny3583 » 1. Mai 2017, 18:57 Re: if Else Bedingung mit ausgerechneten Zeiten

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

@Michl, Danke dir, läuft jetzt.
Donny3583
 
Beiträge: 2
Registriert: 28. Apr 2017, 09:47

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 2 Gäste

porpoises-institution
accuracy-worried