Thema: TDateTime

Einzelnen Beitrag anzeigen

Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 

Re: TDateTime

  Alt 23. Jan 2006, 06:21
Moin, Moin
@ibp ... Nicht ganz richtig !
Wenn ich das Datum zur Verfügung habe geht das natürlich so in Ordnung und sogar noch einfacher, aber darüber stand nichts in der Frage. O.g. Beispiel sollte nur den 'Weg' aufzeigen. Der OP wollte lediglich Aufklärung wie er die Differenz von 2 Uhrzeiten richtig ermitteln kann. Ermitteln deswegen, weil errechnen durch einfache Subtraktion scheidet ja wohl aus !!
Beim rechnen mit Uhrzeiten ohne Datum muss man einfach dem Datumssprung Rechnung tragen !!
Selbst wenn ich zur Uhrzeit das Datum seperat mit einfüge, muss ich trotzdem - ob es Dir passt oder nicht - dafür Sorge tragen das das Ende.Datum um einen Tag höher liegt als das Start.Datum.
Sprich: Ende.Zeit < Start.Zeit = (Ergebnis.Zeit + 24 Stunden) ...

bei folgender Function gehts mit oder ohne Datum:
Delphi-Quellcode:
Function TimeDif(Start, Ende: TDateTime): TTime;
var H, M: Integer;
    R: Real;
begin
  if Start > Ende then
    Ende:= IncDay(Ende);
  R:= HourSpan(Start,Ende);
  H:= Round(Int(R)); // Stunden
  M:= Round(Frac(R)* 60); // Minuten
  if M = 60 then begin // aus 60 Min wird 1 volle Stunde
    M:= 0;
    Inc(H);
  end;
  Result:= StrToTime(Format('%d:%.2d',[H, M]));
end;
... und der Aufruf wie folgt:
Delphi-Quellcode:
var ABeg, AEnd: TTime;
    Saz: TTime;
    Iaz: TTime;
    S: String;
begin
  ABeg:= StrToTime('8:00'); // ArbeitsBeginn
  AEnd:= StrToTime('16:00'); // ArbeitsEnde
  Saz:= StrToTime('8:30'); // Soll-Arbeitszeit
  Iaz:= TimeDif(ABeg, AEnd); // Ist-Arbeitszeit
  if Iaz > Saz then // Soll erfüllt ? = Überzeit
    S:= 'Überzeit ' + FormatDateTime('t', TimeDif(Saz, Iaz))
   else // sonst RestArbeitszeit
    S:= 'Rest '+ FormatDateTime('t', TimeDif(Iaz, Saz));

  ShowMessage('ArbZeit '+ FormatDateTime('t', ABeg)+ ' - '+
                            FormatDateTime('t', AEnd)+ #10#13#13+
              'Az (Soll) '+ FormatDateTime('t', Saz)+ #10#13+
              'Az (Ist) '+ FormatDateTime('t', Iaz)+ #10#13+
              S);
end;
Gruss Mario
Mario
  Mit Zitat antworten Zitat