Q&A

  • 시간계산
시작시간이 08:00
첫번째 품목(A)의 작업시간이 분단위로 계산되어져 나와서 200분이고,
10:00-10:10분까지는 쉬는시간일 경우
작업시간이 08:00-11:50으로 나오고,
두번째 품목(B)의 작업시간이 100분인데, 첫번째 품목의 작업이 끝나는 시간인 11:50분 부터 점심시간 12:00 - 13:00을 제외하고 11:50-14:30으로 나오게 하는 방법

출력물
A 08:00-11:50
B 11:50-14:30

이것좀 가르켜주세요.
과제물 절대 아님.
회사에서 작업지시내릴때 몇시부터 몇시까지 작업하라는 시간을 표시하고 싶어서임.
1  COMMENTS
  • Profile
    홍성락 2002.09.11 07:26
    hsr///////////////////////////////////////////////////////////////
    A만 구하는걸 예로 했습니다.
    그리고 A는 08:00-11:30 아니가요, 출력포멧은 FormatDateTime류의 함수를 사용해보세요.
    procedure TForm1.Button1Click(Sender: TObject);
    var
        AStartTime, AEndTime, AJabTime, AdelayS, AdelayE, ADiffTime,
        TempEndTime : TTime;
        TotalMin, Hour, Min : integer;
    begin
        AStartTime := StrToTime('08:00');           //A 시작시간

        TotalMin := 200;
        Hour := TotalMin div 60;
        Min  := TotalMin mod 60;
        AJabTime := EncodeTime(Hour, Min, 0, 0);    //A 작업시간

        TempEndTime := AStartTime + AJabTime;       //A 예상종료시간

        AdelayS := StrToTime('10:00');              //A작업시 쉬는시작시간
        AdelayE := StrToTime('10:10');              //A작업시 쉬는종료시간

        //A작업시간동안 쉬는시간이 있는지 검색
        ADiffTime := 0;
        if not((AdelayS >= TempEndTime)or(AdelayE <= AStartTime)) then begin
           if AdelayS < AStartTime then AdelayS := AStartTime;
           if AdelayE > TempEndTime then AdelayE := TempEndTime;
           ADiffTime := AdelayE - AdelayS;
        end;
        AEndTime := TempEndTime + ADiffTime;
        showmessage('A: ' + TimeToStr(AStartTime) + '~' + TimeToStr(AEndTime));
    end;