Q&A

  • 날짜범위를 비교하는방법이 틀린건지 조언부탁드립니다..(참조소스포함)
제가 구현하고자하는 바는 이렇습니다.

시작일 : 년 월 일 시 (2002020607) 지정
종료일 : 년 월 일 시 (2002030511) 지정

년,월,일,시에 관련된 문자열은 콤보박스로 만들어서 각각호출합니다.

위의 시작일과 종료일의 범위를 지정한후 저장하는데..

궁극적인 목적은 시작일과 종료일 범위를 지정하여 범위안의 기간에만 이벤트가 수행되게 하려는것입니다.

또한 지정된범위에서 종료일이 시작일보다 앞선 범위일때 에러메시지를 출력하려고 하였습니다. ('시작일보다 앞선날이 지정되었음')

그런데 저장버튼을 누르면 아래와 같은 에러메시지가 납니다.

'2002020606 is not a vaild date'..Process Stop이란 메시지가 뜹니다.

어디가 문제인지 경험자분들의 조언부탁드립니다..

[소스]
procedure TForm.SaveBtnClick(Sender: TObject);
var
  StxDateStr  : String;
  EtxDateStr  : String;
  StxDate,EtxDate :TDateTime;

begin
   StxDateStr:=Trim(StxYear.Text)+Trim(cbstxMonth.Text)+Trim(cbStxday.Text)+Trim(cbStxHour.Text);
   EtxDateStr:=Trim(EtxYear.Text)+Trim(cbEtxMonth.Text)+Trim(cbEtxday.Text)+Trim(cbEtxHour.Text);
   StxDate:=StrToDate(StxDateStr); //이부분에서 에러가..
   EtxDate:=StrToDate(EtxDateStr);//여기도 마찬가지..
   if StrToDate(StxDateStr)<StrToDate(EtxDateStr) then showMessage('종료일이 시작일보다 큽니다..'); //위처럼 비교하는것이 잘못된건 아닌지요..





2  COMMENTS
  • Profile
    gudwhrla 2002.02.07 10:59
    procedure TForm.SaveBtnClick(Sender: TObject);
    var
      StxDateStr  : String;
      EtxDateStr  : String;
      StxDate,EtxDate :TDateTime;

    begin
       StxDateStr:=Trim(StxYear.Text)+'-' +Trim(cbstxMonth.Text)+'-' +Trim(cbStxday.Text)+' ' +Trim(cbStxHour.Text)+':00';
       EtxDateStr:=Trim(EtxYear.Text)+'-' +Trim(cbEtxMonth.Text)+'-' +Trim(cbEtxday.Text)+' ' +Trim(cbEtxHour.Text)+':00';
      
       try
          StxDate:=StrToDateTime(StxDateStr);
          EtxDate:=StrToDateTime(EtxDateStr);
       except
          showMessage('날짜입력을 잘못 하셨습니다.');
          Exit;
       end;

       if StxDate<EtxDate then showMessage('종료일이 시작일보다 큽니다..');





  • Profile
    윤종경 2002.02.07 07:12
    꼭 날짜형식으로 변환해서 비교할 필요가 있을지요?
    그냥 스트링값을 비교해도 원하시는 처리를 할 수 있겠네요 ^^

    procedure TForm1.SaveBtnClick(Sender: TObject);
    var
      StxDateStr  : String;
      EtxDateStr  : String;
    begin
      StxDateStr:=Trim(StxYear.Text)+Trim(cbstxMonth.Text) +
         Trim(cbStxday.Text)+Trim(cbStxHour.Text);
      EtxDateStr:=Trim(EtxYear.Text)+Trim(cbEtxMonth.Text) +
         Trim(cbEtxday.Text)+Trim(cbEtxHour.Text);
      if stxDateStr > EtxDateStr then
         ShowMessage('종료일이 시작일보다 큽니다..');
    end;