StartprogrammingusingObjectPascal:DateAndTime
날짜와 시간
날짜와 시간은 프로그래밍에 있어 가장 중요한 두 가지 요소들 입니다. 구매사항이나, 고지서 납부 등 트랜잭션에 대한 날짜와 시간을 저장할 필요가 있는 트랜잭션이나 어떤 처리 정보를 저장하는 프로그램에게 중요합니다. 그런 다음에 이 프로그램들이 예를 들어 지난 달 또는 이번 달 동안 일어난 처리사항들과 트랜잭션을 결정할 수 있습니다.
프로그램들의 로그는 날짜/시간 기록과 관련한 하나의 처리사항입니다. 어떤 프로그램이 언제 시작하고, 멈추고, 오류가 발생하거나 깨졌는지 알 필요가 있습니다.
TDateTime은 날짜/시간 정보를 저장할 때 사용할 수 있는 오브젝트 파스칼에 있는 형식입니다. 메모리에서 8바이트를 차지하는 배 정밀도 부동 소숫점입니다. 이 형식의 정밀도 부분은 시간을 표현하며, 전체적인 부분은 1899년 12월 13일 이후로 며칠이 지났는지에 대한 날짜를 표현합니다.
다음 예제에서 Now 함수를 이용하여 어떻게 현재의 날짜/시간 값을 표시하는지 보여줄 것입니다.
Program DateTime;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes , SysUtils
{ you can add units after this };
begin
Writeln('Current date and time: ', DateTimeToStr(Now));
Write(‘Press enter key to close’);
Readln;
end.
Now 함수가 되돌려주는 TDateTime 형식을 바꾸기 위해 SysUtils 유닛에 들어있는 DateTimeToStr 함수를 사용했습니다.
이 변환을 사용하지 않으면, 실수 형태로 표시하는 인코딩한 날짜/시간을 얻게 됩니다.
Writeln('Current date and time: ', Now);
또한 날짜 부분과 시간 부분만 표시해주는 두 가지의 날짜/시간 변환 함수도 있습니다.
Writeln('Current date is: ', DateToStr(Now));
Writeln('Current time is: ', TimeToStr(Now));
Date 함수는 오늘의 날짜 부분만 되돌려주고 Time 함수는 현재시간 부분만 되돌려줍니다.
Writeln('Current date is: ', DateToStr(Date));
Writeln('Current time is: ', TimeToStr(Time));
이 두 가지 함수들은 제각기 다른 부분에 0을 놓는데, 예를 들어 Date 함수는 현재 날짜를 되돌리면서 시간 부분에 0(시간 부분에서의 0은 12:00 am(자정) 을 의미)을 놓고, Time 함수는 현재 시스템 시간을 되돌리면서 날짜 부분에 0(날짜 부분에서의 0은 1899년 12월 30일을 의미)을 놓습니다.
이 사실은 DateTimeToStr 함수를 통해 확인해볼 수 있습니다.
Writeln('Current date is: ', DateTimeToStr(Date));
Writeln('Current time is: ', DateTimeToStr(Time));
DateTimeToStr은 컴퓨터의 날짜/시간 설정에 따라 날짜/시간을 보여줍니다. 이 결과는 두 가지의 컴퓨터 시스템 사이에서 변동되겠지만, FormatDateTime 함수라면 컴퓨터 설정과는 상관 없이 프로그래머가 작성한 형식대로 날짜와 시간을 표시할 것입니다.
Writeln('Current date is: ', FormatDateTime(‘yyyy-mm-dd hh:mm:ss’, Date));
Writeln('Current time is: ', FormatDateTime(‘yyyy-mm-dd hh:mm:ss’,Time));
다음 예제에서는 날짜/시간을 실수형태로 다룰 것이며, 이 값들에 대한 값을 더하고 빼보겠습니다.
begin
Writeln('Current date and time is ',
FormatDateTime('yyyy-mm-dd hh:nn:ss', Now));
Writeln('Yesterday time is ',
FormatDateTime('yyyy-mm-dd hh:nn:ss', Now - 1));
Writeln('Tomorrow time is ',
FormatDateTime('yyyy-mm-dd hh:nn:ss', Now + 1));
Writeln('Today + 12 hours is ',
FormatDateTime('yyyy-mm-dd hh:nn:ss', Now + 1/2));
Writeln('Today + 6 hours is ',
FormatDateTime('yyyy-mm-dd hh:nn:ss', Now + 1/4));
Write('Press enter key to close');
Readln;
end.
날짜로부터 하나를 더하거나 빼면, 하루를 완전히 더하거나 뺄 것입니다. ½ 이나 0.5와 같은 것을 더한다면, 반나절(12 시간)을 더하게 됩니다.
다음 예제에서는 연, 월, 일을 사용하여 날짜를 만들어보겠습니다.
var
ADate: TDateTime;
begin
ADate:= EncodeDate(1975, 11, 16);
Writeln('My date of birth is: ', FormatDateTime('yyyy-mm-dd', ADate));
Write('Press enter key to close');
Readln;
end.
EncodeDate 함수는 연, 월, 일을 입력으로 받아들이며, TDateTime 형식의 하나의 값으로 연/월/일 값을 되돌립니다.
EncodeTime 함수는 시, 분, 초 그리고 밀리초를 받아들이며, 하나의 TDateTime 값으로 시간 값을 되돌립니다.
var
ATime: TDateTime;
begin
ATime:= EncodeTime(19, 22, 50, 0);
Writeln('Almughrib prayer time is: ', FormatDateTime('hh:mm:ss', ATime));
Write('Press enter key to close');
Readln;
end.