Q&A

  • 날짜계산?
질문이 있습니다.
예를 들어 시작날짜/시간이 1999년 12월 31일 23시 30분  완료날짜가 2000년 01월 01일 24시 00분입니다.
그러면 걸린 시간(분) 30분 이렇게 나와야 하는데 잘 되질 않습니다.
현재는 각각 년 월 일 시 분 을 변수에 저장하여 문자열로 붙였는데

200001012400 - 199912312330 이것이 30분 으로 나오려면 어떤 로직을 써야 하며,
함수가 있는지 알려주세요..저는 델파이 초보자입니다.
3  COMMENTS
  • Profile
    방극선 2006.03.21 01:20

    01월 01 일 24시 00분은 01-02 00:00으로 해야 합니다.
    Date Type 은 Double형이라 이를 TimeStamp 타입으로 바꾸어서 계산해야 합니다.

    아래의 코드를 참고 해 주세요

    함수에 시작일과 마감일을 넘기는데
    형식은 '06-03-20 15:35:40' 으로 맞추어야 합니다.

    function TForm1.DateCalculate(b_Date, e_Date: TDateTime): string;
    var
       dt1: TDateTime;
       ts1,ts2,ts3: TTimeStamp;
       ahh,amm,ass,ams: word;
       s: string;
    begin
       ts1:= DateTimeToTimeStamp(b_Date);
       ts2:= DateTimeToTimeStamp(e_Date);
       // ts2.time 이 ts1.time 보다 적으면 이를 늘린다
       if ts2.Time < ts1.Time then
       begin
          ts2.Date := ts2.Date -1; //하루를 빼서 시간에 더한다.
          ts2.Time := ts2.Time + 86400000 ;      //하루가 밀리세칸드로 86400000

       end;
       ts3.Time := ts2.Time - ts1.Time;
       ts3.Date := ts2.Date - ts1.Date;

       //ts3.Date 가 0이면 DateTime으로 변환시 에러가 나와서 임시 더함
       // delphi 5.0 에서는 에러 없이 되었슴
       if ts3.Date < 100 then
           ts3.Date := ts3.Date + 100;
       dt1 := TimeStampToDateTime(ts3);
       s:= IntToStr(ts3.Date-100 ) + '일 ';   //다시 빼고 계산
       //s:= s + FormatDateTime ('hh:mm:ss',dt1);
       DecodeTime(dt1,ahh,amm,ass,ams);
       s:= s + IntToStr(ahh) + '시간 ';
       s := s + IntToStr(amm) + '분 ';
       s := s + IntToStr(ass) + '초';
       Result := s;

          
    end;
  • Profile
    천희택 2006.03.20 20:42



    TDateTime, TTimeStamp를 검색하면 예제가 많이 나올겁니다. 또는 UnixTime을 써도 됩니다

    자세한 것은 DateUtils 에 있는 함수들을 확인해보세요
  • Profile
    박홍재 2006.03.18 10:09
    음 우선 하루를 1로 했을때 1을 24로 나눈 값이 시간의 값이구요. 그 값을 다시 2로 나눈 값이 30분이 되겠지요. 따라서 시간은 값으로 치면 0.0416666 이구요....

    컴에서 표시되는 날짜라는 것이 우리에게 보이는 것이 아닌 실수형이던가 더블형이던가 정확하지 않지만 수치로 표시되기 때문에 이런 현상이 나오는 거 같습니다.

    다른 부분은 전문가들이 아마도 답변해 주실 겁니다. 그럼