AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Zeiten-Addition

Ein Thema von DoktorD · begonnen am 24. Nov 2009 · letzter Beitrag vom 24. Nov 2009
Antwort Antwort
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#1

Problem mit Zeiten-Addition

  Alt 24. Nov 2009, 10:23
Servus.

Also ich habe mich jetzt schon seit mehreren Tagen mit der Addition von Zeiten beschäftigt, und stoße aber immer wieder an meine Grenzen.

Ausgangssituation:
Ich will die komplette Messzeit einer Anlage erfassen. Ich muss es Ablaufbedingt so lösen, dass ich einen String aus einer Datenbank mit der aktuellen Laufzeit bekomme (z.B. 65:55:12 -> 65 Stunden 55 Minuten 12 Sekunden) und dann immer Zeiten dazu addiere.
Dafür habe ich folgende Funktion geschrieben:
Delphi-Quellcode:
function TFrmMain.AddTimes(Time1, Time2: TTime; var TimeSum: TTime): Boolean;
var
  Std, Min, Sec : Integer;
  stdStr, MinStr: String;
  Uebertrag : Integer;
begin
  Sec := SecondOf(Time1) + SecondOf(Time2);
  Min := MinuteOf(Time1) + MinuteOf(Time2);
  Std := HourOf(Time1) + HourOf(Time2);

  if (Sec mod 60) > 0 then
  begin
    Sec := Sec mod 60;
    Min := Min + 1
  end;

  if (Min mod 60) > 0 then
  begin
    Min := Min mod 60;
    Std := Std + 1
  end;

  TimeSum := EncodeTime(Std,Min,Sec,0);

  Result := TRUE;
end;
Das Problem ist nun, dass TTime nur maximal 24 Stunden unterstützt und dann gibts Konvertierungsfehler. Nun könnte ich ja alles auf Stringbasis berechnen, aber das wird dann ja immer komplizierter. Wie würdet Ihr das denn lösen?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Problem mit Zeiten-Addition

  Alt 24. Nov 2009, 10:32
Du könntest entweder mit dem kompletten DateTime arbeiten (hast dann halt noch Tage mit drin) oder die nen eigenen Typen definieren - oder einfach alle Zeiten in Sekunden seit Messbeginn umwandeln (mit Integer kannste dann 68 Jahre in die Zukunft gehen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#3

Re: Problem mit Zeiten-Addition

  Alt 24. Nov 2009, 11:35
Wenn in Time wirklich nur Zeiten und kein Datum enthalten ist, dann
Delphi-Quellcode:
function TFrmMain.AddTimes(Time1, Time2: TTime; var TimeSum: TTime): Boolean;
begin
  TimeSum := Time1 + Time2;
  Result := TRUE;
end;
vor dem Komma wären die Tage, statt dem Datum (Datum = Tage seit 30.12.1899)


Delphi-Quellcode:
function TFrmMain.AddTimes(Time1, Time2: TTime; var TimeSum: TTime): Boolean;
var
  Day, Std, Min, Sec: Integer;
begin
  Day := Trunc(Time1) + Trunc(Time2);
  Sec := SecondOf(Time1) + SecondOf(Time2);
  Min := MinuteOf(Time1) + MinuteOf(Time2);
  Std := HourOf(Time1) + HourOf(Time2);

  Min := Min + Sec div 60;
  Sec := Sec mod 60;

  Std := Std + Min div 60;
  Min := Min mod 60;

  Day := Day + Std div 24;
  Std := Std mod 24;

  TimeSum := Day + EncodeTime(Std, Min, Sec, 0);

  Result := TRUE;
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit Zeiten-Addition

  Alt 24. Nov 2009, 12:15
Was bringt eigentlich ein Rückgabewert, der immer wahr ist?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.080 Beiträge
 
Delphi 12 Athens
 
#5

Re: Problem mit Zeiten-Addition

  Alt 24. Nov 2009, 12:28
k.A., aber vielleicht war mal sowas geplant?
Delphi-Quellcode:
...
  Result := Std < 24;
  if Result then TimeSum := EncodeTime(Std,Min,Sec,0);
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#6

Re: Problem mit Zeiten-Addition

  Alt 24. Nov 2009, 12:49
Den Rückgabewert habe ich erstmal nur so reingemacht, da ich noch am testen bin.

Danke erstmal für Eure Antworten. Aber bei den Lösungen habe ich immer noch das Problem, dass wenn ich den Wert wieder aus der Datenbank auslesen will und dann etwas dazu addieren will, kann ich ihn nicht mehr in TTime umwandeln. Dann müsste ich wieder die Tage und die restliche Zeit trennen.

Die Idee alles in Sekunden umzustellen finde ich bis jetzt am Besten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 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