델파이/프로그래밍 Tip

델파이 날짜관련 작성 함수

지병철 2018. 1. 3. 12:01

델파이(Delphi)로 작성한 날짜(Date) 관련 함수들입니다.

// 요일 이름 구하기
function dateDayOfWeekStr(D: TDateTime): String;
const
  DayNames: array[1..7] of string = ('월', '화', '수', '목', '금', '토', '일');
begin
  result := DayNames[System.DateUtils.DayOfTheWeek(D)];
end;

// 긴 요일 이름 구하기
function dateDayOfWeekStrLong(D: TDateTime): String;
begin
  Result := dateDayOfWeekStr(D)+'요일';
end;

// 주어진 일자가 포함된 분기의 시작일
function dateBeginOfQuarter(D: TDateTime): TDateTime;
var
  Year, Month, Day: Word;
begin
  DecodeDate(D, Year, Month, Day);
  Result := EncodeDate(Year, (((Month-1) div 3) * 3)+1, 1);
end;

// 주어진 일자가 포함된 분기의 마지막일
function dateEndOfQuarter(D: TDateTime): TDateTime;
begin
  Result := dateBeginOfQuarter(dateBeginOfQuarter(D)+(3*31)) - 1;
end;

// 주 첫째 요일이 월요일인 해당 월의 주수 구하기
function dateWeeksInTheMonth(ADate: TDate): integer;
begin
  result := WeeksBetween(StartOfTheMonth(ADate), EndOfTheMonth(ADate)) + 1;
end;

// 주 첫째 요일이 일요일인 해당 월의 주수 구하기
function dataWeeksInTheMonth(ADate: TDate): integer;
begin
  result := dateSundayWeekOf(EndOfTheMonth(ADate)) - dateSundayWeekOf(StartOfTheMonth(ADate)) + 1;
end;

function dateSundayWeekOf(const AValue: TDateTime): Integer;
var
  AYear, AWeekOfYear, ADayOfWeek: Word;
begin
  DecodeDateWeek(AValue, AYear, AWeekOfYear, ADayOfWeek);
  if ADayOfWeek = 7 then  // 7은 일요일을 나타냅니다.
    Inc(AWeekOfYear);
  Result := AWeekOfYear;
end;