Q&A

  • 날짜 처리관련한 몇가지...
관리하는 데이타 중에 매년 데이타를 업데이트해야하는 필드가 있는데, 이를 효율적으로 관리할 수 있는 방안을 찾고자 합니다.



자세히 말씀드리면 필드1에 하나의 날짜가 입력되면 이 날짜와 현재 시스템 날짜(원래는 년도만 의미있음)의 차 값 + 1을 관리하여야 합니다. 즉 시스템 날짜가 2001년도이고 필드1의 날짜가 2001이면 1, 시스템 날짜가 2002이면 2 하는 형태입니다.



현재는 무식하게 필드1 입력시 초기값으로 필드2값을 1로 두고, 매년 필드2+1 하는 방식으로 일괄처리하고 있는데, 이 또한 번거롭고 해서 좀더 효율적인 방안이 있으면 합니다.



또한가지, 디비에디트1에 하나의 날짜를 입력하고, 엔터키를 입력하면 디비에디트2의 값을 디비에디트1의 값 + 2달(또는 60일)인 값으로 입력을 하고 싶습니다.이리저리 StrTodate, DateToStr을 써서 만들어도 원하는 값이 나오지 않는군요.



제발, 바쁘시더라두 많은 조언 부탁드립니다.

1  COMMENTS
  • Profile
    김지태 2001.10.24 07:10
    급한 초보 wrote:

    > 관리하는 데이타 중에 매년 데이타를 업데이트해야하는 필드가 있는데, 이를 효율적으로 관리할 수 있는 방안을 찾고자 합니다.

    >

    > 자세히 말씀드리면 필드1에 하나의 날짜가 입력되면 이 날짜와 현재 시스템 날짜(원래는 년도만 의미있음)의 차 값 + 1을 관리하여야 합니다. 즉 시스템 날짜가 2001년도이고 필드1의 날짜가 2001이면 1, 시스템 날짜가 2002이면 2 하는 형태입니다.

    >

    > 현재는 무식하게 필드1 입력시 초기값으로 필드2값을 1로 두고, 매년 필드2+1 하는 방식으로 일괄처리하고 있는데, 이 또한 번거롭고 해서 좀더 효율적인 방안이 있으면 합니다.

    >

    > 또한가지, 디비에디트1에 하나의 날짜를 입력하고, 엔터키를 입력하면 디비에디트2의 값을 디비에디트1의 값 + 2달(또는 60일)인 값으로 입력을 하고 싶습니다.이리저리 StrTodate, DateToStr을 써서 만들어도 원하는 값이 나오지 않는군요.

    >

    > 제발, 바쁘시더라두 많은 조언 부탁드립니다.





    안냐세영? UserSpace입니당.



    우선 질문이 정확하게 이해가 안가는 관계로 제가 이해한 만큼만 설명할께영.



    괜찮죠?



    첫번째는 ...



    var

    szDate1, szDate2 : String;

    begin

    // Edit1.Text = '2001' 이라 가정

    DateTimeToString( szDate1, 'YYYY', Edit1.Text );

    DateTimeToString( szDate2, 'YYYY', Now );

    Edit2.Text := IntToStr( StrToInt( szDate1 ) - StrToInt( szDate2 ) + 1 );

    end;



    이라고 하면 될것 같은데... 쩝.





    다른 하나는 제가 가지고 있는 정보인데 좀 보세여



    // 주어진 날짜를 disc 만큼 더하거나 빼는 함수

    function TForm1.IncDec_date(yyyy,mm,dd: Integer; disc: Real): String;

    var

    MyDate: TDateTime;

    Convert_OK: Boolean;

    begin

    if (yyyy <= 0) or (mm <= 0) or (dd <= 0) then

    begin

    IncDec_date := '';

    System.exit;

    end;



    if disc = 0 then

    begin

    try

    Convert_OK := True;

    MyDate := EncodeDate(yyyy, mm, dd);

    except // 예외가 발생했다는 것은 날짜가 잘못 되었다는 의미입니다

    on EConvertError do

    Convert_OK := False;

    end;

    if Convert_OK then

    begin

    IncDec_date := FormatDateTime('yyyymmdd', MyDate);

    end

    else

    begin

    IncDec_date := '';

    end;

    end

    else

    begin

    Convert_OK := True;

    try

    MyDate := EncodeDate(yyyy, mm, dd);

    except

    on EConvertError do

    Convert_OK := False;

    end;

    if Convert_OK then

    begin

    IncDec_date := FormatDateTime('yyyymmdd', MyDate+disc);

    end

    else

    begin

    IncDec_date := '';

    end;

    end;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    // 정확히 입력된 날짜인지를 검사

    if IncDec_date(StrToIntDef(Copy(Edit1.Text,1,4),0),

    StrToIntDef(Copy(Edit1.Text,5,2),0),

    StrToIntDef(Copy(Edit1.Text,7,2),0),

    0) = '' then

    begin

    MessageBox(Handle, '날짜를 정확히 입력하세요.', '입력오류', MB_ICONWARNING);

    System.Exit;

    end;



    // 아래 365 * 2 가 2년 후를 일수로 바꾸어서 날짜를 증가시킨 예제입니다

    // 반대로 음수를 지정하면 날짜를 빼는 효과가 있겠죠

    Edit2.Text := IncDec_date(StrToIntDef(Copy(Edit1.Text,1,4),0),

    StrToIntDef(Copy(Edit1.Text,5,2),0),

    StrToIntDef(Copy(Edit1.Text,7,2),0),

    365 * 2);



    end;