델파이가 날짜와 시간을 담기 위해 사용하는 기본형은 TDateTime형이다. 이것은
System.pas 안에 다음과 같이 선되어 있다.
type TDateTime = type Double;
델파이의 TDateTime형은 1899년 12월 30일 자정(12:00 AM)부터의 날짜와 시간을
담고 있다. 1이 하루를 의미한다. 즉,1은 1900년 1월 1일 12:00 AM이 된다. 2는
1900년 1월 2일 12:AM이 된다. 이런식으로 해서 1997년 1월 1일은 35431이 된다.
하루가 1이기 때문에 TDateTime끼리의 연산은 아주 쉽게 이루어진다. 자신이 현
재 몇일을 살아왔는가를 알려주는 함수를 작성해보자.
// 자신이 살아온 날수, GetLivingDates('70-04-20')
function GetLivingDates( ABirthDay : String) : Integer;
begin
Result := Trunc( Date - StrToDate( ABirthDay ) );
end;
너무 간단한가? Date 함수는 오늘일자를 TDateTime형으로 되돌리는 함수이고
Trunc는 Real형을 Integer형으로 바꾸어주는 함수이다.
하루를 1로 잡음으로 인해서 시간의 단위는 아주 복잡하게 되어 버렸다.
TDateTime형과 관련해 다음의 등식이 성립한다.
24시간 = 1
1시간 = 0.04166666666667
1분 = 6.944444444444e-4
1초 = 1.157407407407e-5
1초가 1.157407407407e-5라는 것은 언 듯 외우기에도 쉽지 않다. 하지만 이것은
여러분이 인지하기가 힘들다는 것 뿐이기 연산은 날짜와 마찬가지로 아주 간단하
게 이루어진다. 그럼 여러분이 현재 몇 시간을 살았는지를알아보는 함수를 작성
해 보자.
// 자신이 살아온 시간, GetLivingTimes( '97-04-20 14');
function GetLivingTimes( ABirthDateTime : String) : Integer;
begin
Result := Trunc(((Now - StrToDateTime( ABirthDateTime ))*24));
end;
Now는 현재 일자와 시간을 TDateTime형으로 되돌리는 함수이다. 24를 곱해준 이
유는 1일이 24시간이므로 시간으로 환산해 주는 것이다. 결과 값 1.25는 하루와
6시간이 지난 시간이므로 1.25*24는 24+6 즉, 30시간이 된다. 분과 초 역시 다음
과 같이 아주 간단하게 연산이 된다.
// 자신이 살아온 분, GetLivingMinutes('71-04-20 14:32');
function GetLivingMinutes( ABirthDateTime : String) : Integer;
begin
Result := Trunc(((Now-StrToDateTime( ABirthDateTime ))*24*60));
end;
// 자신이 살아온 초, GetLivingSeconds('71-04-20 14:32:33');
function GetLivingSeconds( ABirthDateTime : String) : Integer;
begin
Result := Trunc(((Now-StrToDateTime( ABirthDateTime ))*24*60*60));
end;
TDateTime을 이용함에 있어서 1이 하루다라는 개념만 파악하면 모든 날짜, 시간
연산을 자유자재로 할 수 있게 된다. 하지만 이 연산이 자유로운 것은 Date, Now
등 TDateTime형 관련 함수나 프로시져가 있기 때문이다. 다음 강좌에서는
TDateTime 관련 함수와 프로시져에 대해서 살펴본다.
오늘일자의 1달전 날짜 => IncMonth(Now, -1);