procedure TForm1.btn1Click(Sender: TObject);
var yr, mn, dy, i, days : word;
function getDaysOfMonth(y, m : Word): Integer;
begin
case m of
1,3,5,7,8,10,12 : Result := 31;
4,6,9,11 : Result := 30;
2 : begin
if (y mod 4 = 0) then Result := 29;
if (y mod 100 = 0) then Result := 28;
if (y mod 400 = 0) then Result := 29;
end;
end;
end;
begin
DecodeDate(Now, yr, mn, dy);
days := 0;
for i:= 1 to pred(mn) do
inc(days, getDaysOfMonth(yr, mn));
inc(days, dy);
ShowMessage(IntToStr(days div 7));
end;
주차를 구하는 방식이 몇가지 있는데요.
델파이 컴퍼넌트중 datetTimePicker ?든가. 달력보는 컴퍼넌트에서 보면 좌측에 주차가 나와있습니다.
나라마다 매년 1월1일부터 1주차가 시작되는 곳이 있고, 1월1일이 요일의 기점에 따라 1주차가 될지, 전년 마지막주차가 될지 틀린 iso8091?방식이 있습니다.
델파이 컴퍼넌트에선 iso8091방식을 사용하고 있기 때문에 일반적으로 일자만 계산해서 구하면 상이하게 나오는것이죠.
procedure TForm1.btn1Click(Sender: TObject);
var yr, mn, dy, i, days : word;
function getDaysOfMonth(y, m : Word): Integer;
begin
case m of
1,3,5,7,8,10,12 : Result := 31;
4,6,9,11 : Result := 30;
2 : begin
if (y mod 4 = 0) then Result := 29;
if (y mod 100 = 0) then Result := 28;
if (y mod 400 = 0) then Result := 29;
end;
end;
end;
begin
DecodeDate(Now, yr, mn, dy);
days := 0;
for i:= 1 to pred(mn) do
inc(days, getDaysOfMonth(yr, mn));
inc(days, dy);
ShowMessage(IntToStr(days div 7));
end;
바라시는게 맞는지. 도움이 되셨으면 좋겠네요.