2009. 12. 1. 16:19

TDateTime형 - 1

날짜와 시간의 연산

델파이가 날짜와 시간을 담기 위해 사용하는 기본형은 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형 관련 함수나 프로시져가 있기 때문이다.

'Delphi' 카테고리의 다른 글

단축키 모음  (0) 2010.03.22
TDateTime형 - 3  (0) 2009.12.01
TDateTime형 - 2  (0) 2009.12.01
델파이의 데이터형  (0) 2009.11.24
델파이의 개요  (0) 2009.11.24