Visual Basic, C & C++
분류 Delphi

델파이 날짜구현 함수 모음들

페이지 정보

본문

날짜를 처리하는 함수 모음 

 

unit Unit1;

 

interface

 

uses

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

Dialogs,

StdCtrls;

 

type

TDayOfWeek = 

(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);

 

type

TForm1 = class(TForm)

private

{ Private declarations }

public

{ Public declarations }

function dateYear(D: TDateTime): Integer;

function dateMonth(D: TDateTime): Integer;

function dateDay(D: TDateTime): Integer;

function dateBeginOfYear(D: TDateTime): TDateTime;

function dateEndOfYear(D: TDateTime): TDateTime;

function dateBeginOfMonth(D: TDateTime): TDateTime;

function dateEndOfMonth(D: TDateTime): TDateTime;

function dateWeekOfYear(D: TDateTime): Integer;

function dateDayOfYear(D: TDateTime): Integer;

function dateDayOfWeek(D: TDateTime): TDayOfWeek;

function dateLeapYear(D: TDateTime): Boolean;

function dateBeginOfQuarter(D: TDateTime): TDateTime;

function dateEndOfQuarter(D: TDateTime): TDateTime;

function dateBeginOfWeek(D: TDateTime;Weekday: Integer): 

TDateTime;

function dateDaysInMonth(D: TDateTime): Integer;

end;

 

var

Form1: TForm1;

 

implementation

{$R *.DFM}

 

// 날짜의 년도만 발취

function TForm1.dateYear(D: TDateTime): Integer;

var

Year, Month, Day: Word;

begin

DecodeDate(D, Year, Month, Day);

Result := Year;

end;

 

// 날짜의 월만 발취

function TForm1.dateMonth(D: TDateTime): Integer;

var

Year, Month, Day: Word;

begin

DecodeDate(D, Year, Month, Day);

Result := Month;

end;

 

// 날짜의 일만 발취

function TForm1.dateDay(D: TDateTime): Integer;

var

Year,Month,Day : Word;

begin

DecodeDate (D,Year,Month,Day);

Result := Day;

end;

 

// 년의 시작일자

function TForm1.dateBeginOfYear(D: TDateTime): TDateTime;

var

Year, Month, Day: Word;

begin

DecodeDate(D, Year, Month, Day);

Result := EncodeDate(Year, 1, 1);

end;

 

// 년의 마지막일자

function TForm1.dateEndOfYear(D: TDateTime): TDateTime;

var

Year, Month, Day: Word;

begin

DecodeDate(D, Year, Month, Day);

Result := EncodeDate(Year, 12, 31);

end;

 

// 월의 시작일자

function TForm1.dateBeginOfMonth(D: TDateTime): TDateTime;

var

Year, Month, Day: Word;

begin

DecodeDate(D, Year, Month, Day);

Result := EncodeDate(Year, Month, 1);

end;

 

// 월의 마지막일자

function TForm1.dateEndOfMonth(D: TDateTime): TDateTime;

var

Year, Month, Day: Word;

begin

DecodeDate(D, Year, Month, Day);

if Month = 12 then

begin

Inc(Year);

Month := 1;

end

else

Inc(Month);

 

{월의 다음월의 시작일에서 1을 뺀다}

Result := EncodeDate(Year, Month, 1) - 1;

end;

 

// 년을 기준으로 몇번째 주인지

function TForm1.dateWeekOfYear(D: TDateTime): Integer;

const

t1: array[1..7] of ShortInt = ( -1, 0, 1, 2, 3, -3, -2);

t2: array[1..7] of ShortInt = ( -4, 2, 1, 0, -1, -2, -3);

var

doy1, doy2: Integer;

NewYear: TDateTime;

begin

NewYear := dateBeginOfYear(D);

doy1 := dateDayofYear(D) + t1[DayOfWeek(NewYear)];

doy2 := dateDayofYear(D) + t2[DayOfWeek(D)];

if doy1 <= 0 then

Result := dateWeekOfYear(NewYear-1)

else if (doy2 >= dateDayofYear(dateEndOfYear(NewYear))) then

Result:= 1

else

Result:=(doy1-1) div 7+1;

end;

 

// 년을 기준으로 몇번째 일인지

function TForm1.dateDayOfYear(D: TDateTime): Integer;

begin

Result := Trunc(D-dateBeginOfYear(D)) + 1;

end;

 

// 요일 번호

function TForm1.dateDayOfWeek(D: TDateTime): TDayOfWeek;

begin

Result := TDayOfWeek(Pred(DayOfWeek(D)));

end;

 

// 윤년인지 검사

function TForm1.dateLeapYear(D: TDateTime): Boolean;

var

Year, Month, Day: Word;

begin

DecodeDate(D, Year, Month, Day);

Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 

= 0));

end;

 

// 주어진 일자가 포함된 분기의 시작일

function TForm1.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 TForm1.dateEndOfQuarter(D: TDateTime): TDateTime;

begin

Result := dateBeginOfQuarter(dateBeginOfQuarter(D)+(3*31)) - 1;

end;

 

// 주의 시작일

function TForm1.dateBeginOfWeek(D: TDateTime; Weekday: Integer): 

TDateTime;

begin

Result := D;

while DayOfWeek(Result) <> Weekday do

Result := Result - 1;

end;

 

// 월의 마지막 일

function TForm1.dateDaysInMonth(D: TDateTime): Integer;

const

DaysPerMonth: array[1..12] of Byte= 

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

var

Month: Integer;

begin

Month := dateMonth(D);

Result := DaysPerMonth[Month];

if (Month=2) and dateLeapYear(D) then

Inc(Result);

end;

 

end.

관련자료

등록된 댓글이 없습니다.
프로그래밍
Today's proverb
“무릇 물이란 지세를 따라 흐르되 작은 틈도 놓치지 않고 적시니 지혜를 갖춘 자와 같고, 움직이면서 아래로 흘러가니 예를 갖춘 자와 같으며, 어떤 깊은 곳도 머뭇거리지 않고 들어가니 용기를 가진 자와 같고 장애물이 막혀서 갇히면 고요히 맑아지니 천명을 아는 자와 같으며, 험한 곳을 거쳐 멀리 흐르지만 끝내 남을 허물어뜨리는 법이 없으니 덕을 가진 자와 같다. 천지는 이것으로 이루어지고, 만물은 이것으로 살아가며, 나라는 이것으로 안녕을 얻고, 만사는 이것으로 평안해지며, 만물은 이것으로 바르게 되는 것이다. 이것이 지혜로운 자가 물을 좋아하는 이유이다.” (한영, <<한시외전>>)