Einzelnen Beitrag anzeigen

Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: mit Zeiten rechnen / vergleichen / erkennen

  Alt 24. Apr 2012, 23:56
Ich benötige derartige Funktionen eigentlich immer nur in Datenbanken für Massenkalkulationen, ich habe den komplizierteren Teil der Zuschlagsfindung mal exemplarisch für Delphi skizziert
Delphi-Quellcode:
uses Math;
{$R *.dfm}


Function GetLappingHours(von1,bis1,von2,bis2:TDateTime):TdateTime;
var
 von,bis:TDateTime;
begin
Result := 0;
  If (bis1>von2) and (bis1 <bis2) or ((von1>von2) and (von1<bis2)) or ((von1<=von2) and (bis1>=bis2)) then
  begin
      if Von1 >Von2 then Von := Von1 else Von := Von2;
      if Bis1 < Bis2 then Bis := Bis1 else Bis := Bis2;
      Result := RoundTo((Bis - Von) * 24,-2);
  end
end;

procedure TForm2.Button1Click(Sender: TObject);
var
v1,b1,v2,b2:TdateTime;

begin
    v1 := StrToDateTime('01.01.2012 12:00');
    b1 := StrToDateTime('01.01.2012 20:12');
    v2 := Trunc(v1) + StrToTime('18:00');
    b2 := Trunc(v2) + StrToDateTime('23:00');
    Caption := 'Stunden mit Zuschlag x%=' + FloatToStr(GetLappingHours(v1,b1,v2,b2));

end;
Generell würde ich mit TDatetimes arbeiten, ob in Array,Listen oder Tabellen ..
Zeit=Bis-Von Vorkommateil entspricht Tagen
(wobei Delphi bei der Darstellung als Datum bei 30.12.1899 beginnt ( Caption := DateToStr(0) was für die Rechnerei aber unerheblich ist)
Der Nachkommateil ist ebenfalls in Tagen zu interpretieren, also 0.5=12:00 etc.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat