Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: Habe den überblick verloren....

  Alt 13. Jan 2009, 02:30
Hmmm Schwierigkeiten eigentlich nicht. Man muss nur immer die Grenzen von Tag- und Nachtzeiten anspringen und addieren.

WorkCalc berechnet die Tag- und Nachtzeiten jeweils minutengenau und gibt diese als Stundenwerte zurück. Der Zeitraum kann hierbei auch über mehrere Tage gehen (wer's durchhält).
Delphi-Quellcode:
uses DateUtils;

procedure WorkCalc( const StartTime, EndTime : TDateTime; out DayTime, NightTime : Extended );
var
  Time1, Time2 : TDateTime;
  IsNight : Boolean;
begin
  DayTime := 0;
  NightTime := 0;
  Time1 := StartTime;
  while
    ( Time1 < EndTime )
  do
    begin
      IsNight := False;
      // Wir machen Nachtschicht
      if
        ( FormatDateTime( 'hh:nn:ss', Time1 ) >= '20:00:00' )
      then
        begin
          Time2 := StrToDateTime( DateToStr( IncDay( Time1, 1 ) ) + ' 06:00:00' );
          if Time2 > EndTime then
            Time2 := EndTime;
          IsNight := True;
        end;
      if
        ( FormatDateTime( 'hh:nn:ss', Time1 ) < '06:00:00' )
      then
        begin
          Time2 := StrToDateTime( DateToStr( IncDay( Time1, 0 ) ) + ' 06:00:00' );
          if Time2 > EndTime then
            Time2 := EndTime;
          IsNight := True;
        end;
      if
        IsNight
      then
        begin
          NightTime := NightTime + MinutesBetween( Time1, Time2 ) / 60;
        end
      else
        begin
          Time2 := StrToDateTime( DateToStr( IncDay( Time1, 0 ) ) + ' 20:00:00' );
          if
            ( EndTime < Time2 )
          then
            Time2 := EndTime;
          DayTime := DayTime + MinutesBetween( Time1, Time2 ) / 60;
        end;
      Time1 := Time2;
    end;
end;
cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat