Q&A

  • 날짜에서 달로도 계산이 되나요?
현재날짜가 20070131 이고 현재일부터 1달후 계산을 하려고 하는데 잘 안되네요
날짜로 30일로하면 2월 28일 인경우 날짜가 넘어가서요 달 계산방법좀 알려주세요
2  COMMENTS
  • Profile
    델초 2007.10.10 23:02
    오늘일자의 1달후 날짜 => IncMonth(Now,  1);
    오늘일자의 1달전 날짜 => IncMonth(Now, -1);




  • Profile
    구창민 2007.10.10 20:15
    안녕하세요...

    오래전 박후선 님의 강좌가 공부하시는데 도움이 될거 같네요..

    보시고즐거운 프로그래밍 하시길..

    [강좌] TDateTime 01. 날짜와 시간의 연산
    775 OSOLGIL 박후선 1997-11-14 1590 67


    TDateTime형의 정복(01)

                                 날짜와 시간의 연산

                                                             글:박후선(OSOLGIL)
                                                       osolgil@bora.dacom.co.kr

    델파이가 날짜와 시간을 담기 위해 사용하는 기본형은 TDateTime형이다.  이것은
    System.pas 안에 다음과 같이 선되어 있다.

            type TDateTime = type Double;

    델파이의 TDateTime형은 1899년 12월 30일 자정(12:00 AM)부터의 날짜와  시간을
    담고 있다. 1이 하루를 의미한다. 즉,1은 1900년 1월 1일 12:00 AM이 된다. 2는
    1900년 1월 2일 12:AM이 된다. 이런식으로 해서 1997년 1월 1일은 35431이 된다.

    하루가 1이기 때문에 TDateTime끼리의 연산은 아주 쉽게 이루어진다. 자신이  현
    재 몇일을 살아왔는가를 알려주는 함수를 작성해보자.

    // 자신이 살아온 날수, GetLivingDates('70-04-20')
    function GetLivingDates( ABirthDay : String) : Integer;
    begin
      Result := Trunc( Date - StrToDate( ABirthDay ) );
    end;

    너무 간단한가?  Date 함수는  오늘일자를 TDateTime형으로  되돌리는  함수이고
    Trunc는 Real형을 Integer형으로 바꾸어주는 함수이다.

    하루를 1로   잡음으로 인해서   시간의 단위는  아주  복잡하게  되어 버렸다.
    TDateTime형과 관련해 다음의 등식이 성립한다.

            24시간 = 1
            1시간 = 0.04166666666667
            1분 = 6.944444444444e-4
            1초 = 1.157407407407e-5

    1초가 1.157407407407e-5라는 것은 언 듯 외우기에도 쉽지 않다. 하지만  이것은
    여러분이 인지하기가 힘들다는 것 뿐이기 연산은 날짜와 마찬가지로 아주 간단하
    게 이루어진다. 그럼 여러분이 현재 몇 시간을 살았는지를알아보는 함수를 작성
    해 보자.

    // 자신이 살아온 시간, GetLivingTimes( '97-04-20 14');
    function GetLivingTimes( ABirthDateTime : String) : Integer;
    begin
      Result := Trunc(((Now - StrToDateTime( ABirthDateTime ))*24));
    end;

    Now는 현재 일자와 시간을 TDateTime형으로 되돌리는 함수이다. 24를 곱해준  이
    유는 1일이 24시간이므로 시간으로 환산해 주는 것이다. 결과 값 1.25는  하루와
    6시간이 지난 시간이므로 1.25*24는 24+6 즉, 30시간이 된다. 분과 초 역시 다음
    과 같이 아주 간단하게 연산이 된다.

    // 자신이 살아온 분, GetLivingMinutes('71-04-20 14:32');
    function GetLivingMinutes( ABirthDateTime : String) : Integer;
    begin
      Result := Trunc(((Now-StrToDateTime( ABirthDateTime ))*24*60));
    end;
    // 자신이 살아온 초, GetLivingSeconds('71-04-20 14:32:33');
    function GetLivingSeconds( ABirthDateTime : String) : Integer;
    begin
      Result := Trunc(((Now-StrToDateTime( ABirthDateTime ))*24*60*60));
    end;

    TDateTime을 이용함에 있어서 1이 하루다라는 개념만 파악하면 모든 날짜,  시간
    연산을 자유자재로 할 수 있게 된다. 하지만 이 연산이 자유로운 것은 Date, Now
    등 TDateTime형   관련 함수나   프로시져가 있기  때문이다.  다음  강좌에서는
    TDateTime 관련 함수와 프로시져에 대해서 살펴본다.