Q&A

  • 에디트박스에서 받은 날짜 경과일 계산하려면...
"19991231"과 "20000101"이라는 두 값으로 경과일을 계산하여 1일이라고

Edit Box에 나타내려고 합니다...

어떻게 해야하는지 궁금하군요...

고수님들의 여러 답변 부탁드립니다..

2  COMMENTS
  • Profile
    Mr.Q 2000.11.14 05:27
    이원택 wrote:

    > "19991231"과 "20000101"이라는 두 값으로 경과일을 계산하여 1일이라고

    > Edit Box에 나타내려고 합니다...

    > 어떻게 해야하는지 궁금하군요...

    > 고수님들의 여러 답변 부탁드립니다..





    방법은 여러가지인데...



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, Mask;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    MaskEdit1: TMaskEdit;

    MaskEdit2: TMaskEdit;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    Function GetGapDays(bbDate,aaDate:TDateTime):integer;

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    Function TForm1.GetGapDays(bbDate,aaDate:TDateTime):integer;

    begin

    result:=DateTimeToTimeStamp(bbDate).Date-DateTimeToTimeStamp(aaDate).Date;

    end;



    {Procedure TForm1.Button1Click(Sender:TObject);

    var

    aYear, aMonth, aDay, aDate:string;

    bYear, bMonth, bDay, bDate:string;

    sbDate, saDate:TDateTime;

    iGapDays:integer;

    begin

    aDate:=maskedit1.text; //20000301(aDate)

    bDate:=maskedit2.text; //20000411(bDate)



    //----10001010형식을--"1000-10-10"형식으로변환----------------

    aYear:=copy(aDate,1,4); //2000

    aMonth:=copy(aDate,5,2); //03

    aDay:=copy(aDate,7,2); //01

    aDate:=aYear+'-'+aMonth+'-'+aDay; //2000-03-01

    bYear:=copy(bDate,1,4); //2000

    bMonth:=copy(bDate,5,2); //04

    bDay:=copy(bDate,7,2); //01

    bDate:=bYear+'-'+bMonth+'-'+bDay; //2000-04-11

    //-------------예외처리(시작)----------------------------------

    try

    saDate:=StrToDateTime(aDate);

    except

    //begin

    Application.MessageBox('유효하지 못한 날짜를 입력하셨습니다','첫번째날짜입력

    란', mb_ok);

    exit;

    //end;



    try

    sbDate:=StrToDateTime(bDate);

    except

    //begin

    Application.MessageBox('유효하지 못한 날짜를 입력하셨습니다' ,'두번째날짜입력

    란', mb_ok);

    exit;

    //end;

    //-------------예외처리(끝)-----------------------------------





    iGapDays:=GetGapDays(sbDate,saDate);

    ShowMessage(IntToStr(iGapDays));

    end; }



    procedure TForm1.Button1Click(Sender: TObject);

    var

    aYear, aMonth, aDay, aDate:string;

    bYear, bMonth, bDay, bDate:string;

    sbDate, saDate:TDateTime;

    iGapDays:integer;

    begin

    aDate:=maskedit1.text; //20000301(aDate)

    bDate:=maskedit2.text; //20000411(bDate)

    //----10001010형식을--"1000-10-10"형식으로변환----------------

    aYear:=copy(aDate,1,4); //2000

    aMonth:=copy(aDate,5,2); //03

    aDay:=copy(aDate,7,2); //01

    aDate:=aYear+'-'+aMonth+'-'+aDay; //2000-03-01

    bYear:=copy(bDate,1,4); //2000

    bMonth:=copy(bDate,5,2); //04

    bDay:=copy(bDate,7,2); //01

    bDate:=bYear+'-'+bMonth+'-'+bDay; //2000-04-11

    //-------------예외처리(시작)----------------------------------

    try

    saDate:=StrToDateTime(aDate);

    except on EConvertError do

    begin

    Application.MessageBox('유효하지 못한 날짜를 입력하셨습니다','첫번째날짜입

    력란', mb_ok);

    exit;

    end;

    end;

    try

    sbDate:=StrToDateTime(bDate);

    except on EConvertError do

    begin

    Application.MessageBox('유효하지 못한 날짜를 입력하셨습니다' ,'두번째날짜입

    력란', mb_ok);

    exit;

    end;

    end;

    //-------------예외처리(끝)-----------------------------------



    iGapDays:=GetGapDays(sbDate,saDate);

    ShowMessage(IntToStr(iGapDays));

    end;



    end.







  • Profile
    nilriri 2000.11.14 04:29
    질문을 하시기 전에 먼저 자료실과 팁란을 검색하시면 보다 다양한 답변을

    빨리 얻을 수 있을것 같군요...

    그럼...





    샬롬!



    자료실에 있는 '유틸마인드'인가하는 홈에서 만든 날짜계산 프로그램이...

    제가 하고자 하는 작업과는 좀 거리가 멀어서....



    처음에는 그걸 어떻게 뜯어 고쳐보려고 했는데...



    기간을 주면 그 기간이 시작일로부터 몇년 몇개월 몇일인지를 계산하는...

    음 그러니까 인사관리프로그램등에서... 근무년수 계산을 한다든지...



    그래서 혹 저와 같은 필요를 느끼시는 분들께 도움이 될까해서...



    오랜만에 델파이 프로그램 수정하느라 고생입니다. 근 1년가 파빌만 했더니...



    그럼...



    헉 여기는 파일첨부가 안되네요~



    아래는 소스코드이구요 자료실에 파일 올리죠...



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, Mask;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    MaskEdit1: TMaskEdit;

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    MaskEdit2: TMaskEdit;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;

    YY, MM, DD : Word;



    implementation



    {$R *.DFM}

    Function Year(iDate:TDateTime):Word;

    begin

    DecodeDate(iDate, Result, MM, DD)

    end;



    Function Month(iDate:TDateTime):Word;

    begin

    DecodeDate(iDate, YY, Result, DD)

    end;



    Function Day(iDate:TDateTime):Word;

    begin

    DecodeDate(iDate, YY, MM, Result)

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    CHKDATE, FDATE, TDATE : TDateTime;

    YY, MM, DD : LongInt;

    CHK : INTEGER;

    begin



    FDATE := strtodate(formatmasktext('####-##-##;0;', maskedit1.Text));

    TDATE := strtodate(formatmasktext('####-##-##;0;', maskedit2.Text));



    CHK := 0;

    IF (MONTH(TDATE) < MONTH(FDATE)) OR ((MONTH(TDATE) = MONTH(FDATE)) AND (DAY(TDATE) < DAY(FDATE))) THEN

    BEGIN

    CHK := 1;

    END;

    YY := YEAR(TDATE)-YEAR(FDATE) - CHK;

    EDIT1.TEXT := INTTOSTR(YY);



    CHK := 0;

    IF (MONTH(TDATE) <= MONTH(FDATE)) AND (DAY(TDATE) < DAY(FDATE)) THEN CHK := 11;

    IF (MONTH(TDATE) < MONTH(FDATE)) AND (DAY(TDATE) >= DAY(FDATE)) THEN CHK := 12;

    IF (MONTH(TDATE) > MONTH(FDATE)) AND (DAY(TDATE) < DAY(FDATE)) THEN CHK := -1;

    MM := MONTH(TDATE)-MONTH(FDATE) + CHK;

    EDIT2.Text := INTTOSTR(MM);





    CHK := 0;

    IF DAY(TDATE) < DAY(FDATE) THEN CHK := 1;



    CHKDATE := ENCODEDATE(YEAR(TDATE), MONTH(TDATE) - CHK, DAY(FDATE) );



    DD := STRTOINT(FLOATTOSTR(TDATE - CHKDATE)) + 1;

    EDIT3.TEXT := INTTOSTR(DD);

    end;



    end.



    이원택 wrote:

    > "19991231"과 "20000101"이라는 두 값으로 경과일을 계산하여 1일이라고

    > Edit Box에 나타내려고 합니다...

    > 어떻게 해야하는지 궁금하군요...

    > 고수님들의 여러 답변 부탁드립니다..