// 한주의 첫 번째 날짜 구하기
function getFirstDayOfWeek(aYear, aMonth, aWeek:SmallInt):ShortInt;
var
dtTmpDate : TDateTime;
ii, liDays, liFirstDayOfYear, liOffsetDay, liResult : SmallInt;
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
begin
if (y mod 100 = 0) then
begin
if (y mod 400 = 0) then Result := 29
else Result := 28;
end else
Result := 29;
end else
Result := 28;
end;
end;
end;
begin
liDays := 0;
dtTmpDate := StrToDateTime(IntToStr(aYear) + '-01-01');
liFirstDayOfYear := DayOfTheWeek(dtTmpDate); // 그해 1월 1일이 무슨 요일인지 계산.
// 원하는 달 전달까지의 날짜 구하기.
for ii := 1 to aMonth-1 do
begin
liDays := liDays + getDaysOfMonth(aYear, ii);
end;
liOffsetDay := liFirstDayOfYear + (liDays mod 7); //요일의 변화를 구한다.
liOffsetDay := liOffsetDay mod 7; //7일보다 클 경우에 다음주로 간주. 실제로는 입력한 달의 1일의 요일이 나옴.
// 그 주의 첫째 날을 구한다.
if(aWeek = 1) then liResult := 1
else
liResult := 7*(aWeek-2) + (7-liOffsetDay) + 1; //월요일 기준 -> 일요일 기준.
// 날짜를 검증한다. 입력한 주차가 해당 달에 없을 경우에는 0을 Return.
if(liResult > getDaysOfMonth(aYear, aMonth)) then
liResult := 0;
Result := liResult;
end;
//한 주의 마지막 날짜 구하기
function getLastDayOfWeek(aYear, aMonth, aWeek:Smallint):ShortInt;
var
dtTmpDate : TDateTime;
ii, liDays, liFirstDayOfYear, liOffsetDay, liResult : SmallInt;
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
begin
if (y mod 100 = 0) then
begin
if (y mod 400 = 0) then Result := 29
else Result := 28;
end else
Result := 29;
end else
Result := 28;
end;
end;
end;
begin
liDays := 0;
dtTmpDate := StrToDateTime(IntToStr(aYear) + '-01-01');
liFirstDayOfYear := DayOfTheWeek(dtTmpDate); // 그해 1월 1일이 무슨 요일인지 계산.
// 원하는 달 전달까지의 날짜 구하기.
for ii := 1 to aMonth-1 do
begin
liDays := liDays + getDaysOfMonth(aYear, ii);
end;
liOffsetDay := liFirstDayOfYear + (liDays mod 7); //요일의 변화를 구한다.
liOffsetDay := liOffsetDay mod 7; //7일보다 클 경우에 다음주로 간주. 실제로는 입력한 달의 1일의 요일이 나옴.
// 그 주의 마지막 날을 구한다.
liResult := 7*(aWeek-1) + (7-liOffsetDay); //월요일 기준 -> 일요일 기준.
// 날짜를 검증한다. 입력한 주차가 해당 달에 없을 경우에는 마지막 날짜를 Return.
if(liResult > getDaysOfMonth(aYear, aMonth)+6) then
liResult := 0
else if(liResult > getDaysOfMonth(aYear, aMonth)) then
liResult := getDaysOfMonth(aYear, aMonth);
Result := liResult;
end;
'知 > Delphi' 카테고리의 다른 글
IP, OS, CPU 정보 알아오기 (0) | 2012.11.09 |
---|---|
마우스 움직이는 범위를 패널 안으로 제약하기 (0) | 2012.05.03 |
작업관리자에서 프로세서 안보이게 하기(검증안함) (0) | 2009.10.26 |
[펌] 명도 또는 채도 조절하는 칼라코드들 (0) | 2009.10.12 |
특정 서비스가 실행되는지 여부 체크하기 (0) | 2009.10.05 |