Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeit addieren (https://www.delphipraxis.net/14914-zeit-addieren.html)

TimmA 18. Jan 2004 02:00


Zeit addieren
 
Hi,

habe mal wieder ein Problem :oops:

und zwar möchte ich beliebig viele Zeiten addieren können nur ich bekomme das nicht hin
kleines Beispiel :

x dauert 1 Stunden 43 Minuten und 32 Sekunden -> im Format 01:43:32
y dauert 4 Stunden 32 Minuten und 29 Sekunden -> im Format 04:32:29
z dauert 5 Stunden 54 Minuten und 12 Sekunden -> im Format 05:54:12

und daraus dann die Insgesamtdauer das habe ich schon mit DateTimePicker hinbekommen nur wenn das Ergebnis dann über 23 Stunden ist fängt es ja wieder bei 00 an aber ich will das der weitergeht oder eine andere lösung möchte die verschiedenen Zeiten einfach nur zusammenzählen können ... gib da doch bestimmt bessere u einfachere Lösungen oder ?




gruß TimmA.

Sharky 18. Jan 2004 07:06

Re: Zeit addieren
 
Hai TimmA,

hier mal eine Idee. Ist aber nicht getestet *gg*

Delphi-Quellcode:
var
  aZeiten: array[1..10] of tTime; //Array mit den Zeiten
  iTage, // Summe Tage
  iStunden, // Summe Stunden
  iMinuten, // Summe Minuten
  iSekunden: Integer; //Summe Sekunden

procedure TForm1.Button1Click(Sender: TObject);
var
  ndx: Integer;
  Hour, Min, Sec, MSec: Word; // Temp Variablen
begin
  iTage := 0;
  iStunden := 0;
  iMinuten := 0;
  iSekunden := 0;
  for ndx := Low(aZeiten) to High(aZeiten) do
    begin
      DecodeTime(aZeiten[ndx], Hour, Min, Sec, MSec);
      // Die Einzelnen Zeilteile addieren;
      iStunden := iStunden + Hour;
      iMinuten := iMinuten + Min;
      iSekunden := iSekunden + Sec;
    end;
  iMinuten := iMinuten + (iSekunden div 60);
  iSekunden := iSekunden mod 60;
  iStunden := iStunden + (iMinuten div 60);
  iMinuten := iMinuten mod 60;
  iTage := iStunden div 24;
  iStunden := iStunden mod 24;
end;
In diesem Demo müssen die Zeiten als tTime in dem Array gespeichert sein.
Dann addiere ich ersteinmal alle Stunden,Minuten und Sekunden. (For-Schleife)
Im letzen Teil werden die Überlaufe berücksichtigt.

z.B.: 123 sekunden sind 2 Minuten und 3 Sekunden. Die Minuten werden also um 2 erhöht und die sekunden auf 3 gesetzt.

TimmA 18. Jan 2004 12:12

Re: Zeit addieren
 
Hi,


danke schonmal !

Ich werden das jetzt gleich mal ausprobieren :P

Leuselator 18. Jan 2004 13:07

Re: Zeit addieren
 
das sollte einfacher gehen, da TDateTime Zeiten in der Form: TageSeitStartDatum.MillisekSeitMitternacht speichert:

Delphi-Quellcode:
type
  TimeRec = Record
    Stunden : Integer;
    Minuten : Integer;
    Sekunden : Integer;
    Millisek : Integer;
  end;

function AddTimes(Zeiten : Array of TTime) : TimeRec;
var TempTime : TDateTime;
    Hour,
    Min,
    Sec,
    MSec : Word;
    i : Integer;
begin
  TempTime := 0.0;
  for i := Low(Zeiten) to High(Zeiten) do TempTime := TempTime+Zeiten[i];
  DecodeTime(TempTime,Hour,Min,Sec,MSec);
  Result.Stunden := Trunc(TempTime)*24+Hour; // 
  Result.Minuten := Min;
  Result.Sekunden := Sec;
  Result.Millisek := MSec;
end;
Du übergibst einfach ein Array von TTime-werten und bekommst das Ergebnis in der Form des TimRec-Rekords.
Gruß


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