Q&A

  • TDateTime 의 초단위값 차이 계산을 어떻게 하나요?
나름대로 머리를 쓴다고 계산을 두개의 TDateTime 값을 아래와 같이 계산했는데

Formatdatetime('nn:ss:zz', timeEnd-timeStart);
값이 01:10:10 으로 나와버리네요.


제가 원하는것은

ex1)
timeStart = 1:10:10
timeEnd = 2:20:20

결과 = 70:10


ex2)
timeStart = 1:10:10
timeEnd = 3:20:20

결과 = 130:10

이 나오는 것이거든요.
쉬운 방법이 있을꺼 같은데 좋은 방법이 없을까요?
3  COMMENTS
  • Profile
    steps 2008.05.20 02:27
    님이 바라는 동작을 한번에 하는 표준함수는 없습니다.
    초단위차계산은 secondsbetween(now, then: tdatetime)으로 하니까 요걸 div 60 하면 분, mod 60 하면 초가 나오겠지요.
    130:10은 Tdatatime형으로 표시못하니까 strtodate같은 함수를 쓸 필요는 없을겁니다.

    그때 := time;
    ...
    초수 := secondsbetween(time, 그때);
    분 := 초수 div 60;
    초 := 초수 mod 60;

  • Profile
    dbwrite 2008.05.20 04:22



    function ADDMinutesSeconds(ATime: String; RowNum : Integer = 0 ): String;
    var
            H, M, S : word;
    begin
            result := Formatdatetime('YYYYMMDDHHMMSS',now);

            try
                 if pad_Icode(ATime) = 0 then
                         ATime := Result ;

                 case RowNum of
                         0 :
                         begin
                            H := StrToInt(Copy(Result, 9,2));
                            M := StrToInt(Copy(Result,11,2));
                            S := StrToInt(Copy(Result,13,2));

                            S := S + StrToInt(copy(ATime,3,2));
                            if S > 60 then
                            begin
                                    S := S - 60;
                                    M := M +  1;
                            end;


                            M := M + StrToInt(copy(ATime,1,2));
                            if M > 60 then
                            begin
                                    M := M - 60;
                                    H := H +  1;
                            end;

                            if H < 24 then
                            begin
                                    Result := formatdatetime('YYYYMMDD',now );
                            end else
                            begin
                                    H := H - 24;
                                    Result := formatdatetime('YYYYMMDD',now + 1 );
                            end;

                            Result := Result + fn_0RJ(2,IntToStr(H)) + fn_0RJ(2,IntToStr(M)) + fn_0RJ(2,IntToStr(S));
                        end;
                   end;
            except
                   {null}
            end;
    end;
  • Profile
    강태원 2008.05.21 18:23
    오호 이런 방법이 있었군요.

    다른 방법으로 해결하기는 했으나 다음에 작업시 참고 하도록 하겠습니다.

    감사합니다~~