Q&A

  • 데이트 타임 피치에서
데이트 타임 피치에서 날짜 선택시 그날짜가 속하는 1주간을 어떻게 받아오나요



1  COMMENTS
  • Profile
    이재식 2000.02.29 07:08
    초보맨 wrote:

    > 데이트 타임 피치에서 날짜 선택시 그날짜가 속하는 1주간을 어떻게 받아오나요

    >



    이재식 Wrote :

    안녕하세요?



    위 문제는 제가 일전에 두 날짜사이의 기간차이를 구해서 그것을

    x년xx개월x일로 표현하는 코딩을 올려놓은적이 있습니다.

    그것을 찾아서 약간만 응용하시면 해결됩니다.

    아래에 위 문제에대해 나름대로 작성한 코딩입니다.

    소스를 보시면 폼위에 무엇을 올려놓고 테스해 보아야 하는지

    알 것입니다. 제가 테스트 해보기로는 특정일자에대해 해당 1주간의 일자를

    잘 가져옵니다.



    그런데, 가져오되 1주간의 일자들만 가져옵니다.

    가져오는 1주간이 반드시 7이 아닐수 있습니다. 그렇죠?

    어떤 주는 1개, 어떤주는 3개 등등 다양할 것입니다.



    아래의 소스는 메모장에 1주간의 일자를 가져오되

    요일은 표현하지 않습니다.



    즉,만약에 2000년 2월 3일을 선택하면 1, 2, 3, 4, 5를 가져올 것입니다.

    그러나, 이들에대한 요일을 표현하지 않았습니다.

    표현방법은 역시 WeekOfDay를 쓰시면 금방 구현할 수 있을 것입니다.

    여기까지 필요하시다면 변경하시면 될 것입니다.



    unit Unit1;



    interface



    uses

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

    StdCtrls, ComCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    DateTimePicker1: TDateTimePicker;

    Memo1: TMemo;

    procedure DateTimePicker1CloseUp(Sender: TObject);

    private

    { Private declarations }

    function HowDaysPerMonth (myYear, myMonth : integer) : integer ;

    function IsYeunYear (myYear : integer) : integer ;

    public

    { Public declarations }

    end;





    var

    Form1: TForm1;

    Week : array[1..7] of integer ;



    implementation



    {$R *.DFM}



    procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);

    var

    year, month, Day : integer ;

    Days : integer ;



    Curyeoil : integer ;



    TempDay : integer ;

    i, index : integer ;

    begin

    Memo1.Lines.Clear ;



    for i := 1 to 7 do

    Week[i] := 0 ;



    index := 1 ;

    year := StrToInt(formatDateTime ('YYYY', DateTimePicker1.date)) ;

    month := StrToInt(formatDateTime ('MM', DateTimePicker1.date)) ;

    Day := StrToInt(FormatDateTime('DD', DateTimePicker1.Date)) ;



    Days := HowDaysPerMonth (year, month) ;



    Curyeoil := DayOfWeek (DateTimePicker1.Date) ;



    i := CurYeoil ;

    TempDay := Day ;

    for i := CurYeoil downto 1 do

    begin

    Week[i] := TempDay ;

    TempDay := TempDay - 1 ;

    end ;



    TempDay := Day ;

    for i := CurYeoil + 1 to 7 do

    begin

    TempDay := TempDay + 1 ;

    Week[i] := TempDay ;

    end ;



    for i := 1 to 7 do

    begin

    if (Week[i] <= 0) or (Week[i] > Days) then

    continue

    else

    Memo1.Lines.Add(IntToStr(Week[i])) ;

    end ;

    end;



    function TForm1.HowDaysPerMonth(myYear, myMonth: integer): integer;

    Const

    DaysPerMonth : array[1..12] of integer

    = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) ;

    begin

    if (myMonth = 2) and (IsYeunYear(myYear) = 1) then

    result := DaysPerMonth[myMonth] + 1

    else

    result := DaysPerMonth[myMonth] ;

    end;



    function TForm1.IsYeunYear(myYear: integer): integer;

    begin

    if (myYear mod 4 = 0) and

    (myYear mod 100 <> 0) or (myYear mod 400 = 0) then

    result := 1

    else

    result := 0 ;

    end;



    end.