Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Berechnung einer bestimmten Prüfdauer (https://www.delphipraxis.net/43443-berechnung-einer-bestimmten-pruefdauer.html)

LaNtHaN 4. Apr 2005 09:42


Berechnung einer bestimmten Prüfdauer
 
Hallo

Ich hänge momentan an einem kleinen Problem mit der Berechnung einer Prüfdauer.

Delphi-Quellcode:
L_TestTime1_1.Caption := TimeToStr(Time() - StrToTime(Beginn_T_T1));
Das Problem dabei ist, sobald 23:59:59 überschritten wird zählt es von unten her zurück (logisch).
Gibt es ne einfach Möglichkeit, dass dies über das 24h System hinaus geht?
Hab momentan Mühe dies zu lösen.

Vielen Dank

Michael_Bayer 4. Apr 2005 09:44

Re: Berechnung einer bestimmten Prüfdauer
 
Versuch mal die SecondsBetween Funtion

LaNtHaN 4. Apr 2005 09:53

Re: Berechnung einer bestimmten Prüfdauer
 
Ist es möglich, dass es die Funktion in Delphi 4 nicht gibt?
Finde dazu nichts in der Hilfe...

Michael_Bayer 4. Apr 2005 09:57

Re: Berechnung einer bestimmten Prüfdauer
 
Mist, hast Recht! Tschuldige, die gibts erst ab Delphi 6.

Versuch das mal:
Delphi-Quellcode:
function SecondsBetween(const ANow, AThen: TDateTime): Int64;
begin
Result := Trunc(SecondSpan(ANow, AThen));
end;

LaNtHaN 4. Apr 2005 10:03

Re: Berechnung einer bestimmten Prüfdauer
 
hmm schade... SecondSpan kennt es auch nicht

himitsu 4. Apr 2005 10:11

Re: Berechnung einer bestimmten Prüfdauer
 
Diese Funktionen helfen eh nicht, selbst wenn es diese bei dir gäbe.

Du mußt erst vo dem Verglich die 2. Zeit anpassen, da sonst (slebst mit den oben genannten Funktionen) ein falsches Ergebnis rauskommt.
Denn du rechnest ja nur mit den Zeitanteilen, da aber die Zeit nach 23°° am nächsten Tag ist und Time() / StrToTime(...) nur mit dem Tag 0 rechnen, kann daraus nichts werden.

du mußt also, sobald die Endzeit kleiner als die Startzeit ist einen Tag dazurechnen, damit es stimmt.

Code:
Var Ts, Te: TDateTime;

Begin
  Ts := Time();
  Te := StrToTime(Beginn_T_T1);
  [color=#ff0000]If Te < Ts Then Te := Te + 1;[/color]
  L_TestTime1_1.Caption := TimeToStr(Ts - Te);
End;
PS: aber nicht vergessen, diese Art der Zeitberechnung geht nur, wenn die Dauer unter 24 Sunden liegt.

Michael_Bayer 4. Apr 2005 10:13

Re: Berechnung einer bestimmten Prüfdauer
 
Zitat:

Zitat von himitsu
Diese Funktionen helfen eh nicht, selbst wenn es diese bei dir gäbe.

Nuja - n TDateTime in die Funktionen gepackt und dann geht das schon...

LaNtHaN 4. Apr 2005 10:26

Re: Berechnung einer bestimmten Prüfdauer
 
Danke Himitsu...
Das ist eigentlich schon die Lösung des Problems...
Sobald Te = Ts ist zähle ich noch eine Tag Counter hoch und addier zum angezeigten String einfach 24 h dazu...

LaNtHaN 4. Apr 2005 12:27

Re: Berechnung einer bestimmten Prüfdauer
 
Falls es jemanden interessiert...
... sicher nicht die beste Möglichkeit aber soweit läufts!
Das ganze nun gelöst:

Delphi-Quellcode:
var
  Te,Ts           :TDateTime;                  
  Present         :TDateTime;
  Hour, Min, Sec, MSec: Word;
  Beginn_T_T1      :String;

begin
  Ts := StrToTime(Beginn_T_T1);
  Te := Time();
  if Te < Ts then Te := Te + 1;
  Present := (Ts - Te);
  if TimeToStr(Ts - Te) = '00:00:00' then inc(Day1);
  Case Day1 of
  0: L_TestTime1_1.Caption := TimeToStr(Present);
  1: begin
       DecodeTime(Present, Hour, Min, Sec, MSec);
       Hour := Hour + 24;
       if Sec < 10 then
       L_TestTime1_1.Caption := IntToStr(Hour)+':'+IntToStr(Min)+':0'+IntToStr(Sec);
       if Min < 10 then
       L_TestTime1_1.Caption := IntToStr(Hour)+':0'+IntToStr(Min)+':'+IntToStr(Sec);
       if (Min < 10) AND (Sec < 10) then
       L_TestTime1_1.Caption := IntToStr(Hour)+':0'+IntToStr(Min)+':0'+IntToStr(Sec);
     end;
  2: begin
       DecodeTime(Present, Hour, Min, Sec, MSec);
       Hour := Hour + 48;
       if Sec < 10 then
       L_TestTime1_1.Caption := IntToStr(Hour)+':'+IntToStr(Min)+':0'+IntToStr(Sec);
       if Min < 10 then
       L_TestTime1_1.Caption := IntToStr(Hour)+':0'+IntToStr(Min)+':'+IntToStr(Sec);
       if (Min < 10) AND (Sec < 10) then
       L_TestTime1_1.Caption := IntToStr(Hour)+':0'+IntToStr(Min)+':0'+IntToStr(Sec);
     end;
  3: begin
       DecodeTime(Present, Hour, Min, Sec, MSec);
       Hour := Hour + 72;
       if Sec < 10 then
       L_TestTime1_1.Caption := IntToStr(Hour)+':'+IntToStr(Min)+':0'+IntToStr(Sec);
       if Min < 10 then
       L_TestTime1_1.Caption := IntToStr(Hour)+':0'+IntToStr(Min)+':'+IntToStr(Sec);
       if (Min < 10) AND (Sec < 10) then
       L_TestTime1_1.Caption := IntToStr(Hour)+':0'+IntToStr(Min)+':0'+IntToStr(Sec);
     end;
  4: begin
       DecodeTime(Present, Hour, Min, Sec, MSec);
       Hour := Hour + 96;
       if Sec < 10 then
       L_TestTime1_1.Caption := IntToStr(Hour)+':'+IntToStr(Min)+':0'+IntToStr(Sec);
       if Min < 10 then
       L_TestTime1_1.Caption := IntToStr(Hour)+':0'+IntToStr(Min)+':'+IntToStr(Sec);
       if (Min < 10) AND (Sec < 10) then
       L_TestTime1_1.Caption := IntToStr(Hour)+':0'+IntToStr(Min)+':0'+IntToStr(Sec);
     end;
  end;

Binärbaum 4. Apr 2005 14:54

Re: Berechnung einer bestimmten Prüfdauer
 
Falls es dir hilft: ich hätte da eine Idee, wie man eine ähnliche Funktion wie SecondsBetween realisieren könnte:
Delphi-Quellcode:
function Sekunden(t1, t2: TDateTime): LongInt;
begin
  Result:= Round((t2-t1)*86400);
end;
Also die Funktion liefert die Sekunden zurück, die von t1 bis t2 vergangen sind.
Als Ergebnistyp könnte man auch Int64 verwenden, falls es den in deiner Delphi-Version gibt. LongInt reicht aber auch, falls die beiden Zeiten nicht mehr als ca. 60 Jahre auseinanderliegen.

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 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