StartprogrammingusingObjectPascal:DateAndTime

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

날짜와 시간

날짜와 시간은 프로그래밍에 있어 가장 중요한 두 가지 요소입니다. 어떠한 상점 거래 또는 작업 정보, 구매, 청구서 지불 등처럼, 이런 거래에 대해 날짜와 시간을 저장해야하는 응용 프로그램에서 중요한 요소입니다. 이후 지난 달 또는 현재 달 동안 일어난 거래 및 작업에 대한 트랜잭션을 날자와 시간을 통해 확인할 수 있습니다.


프로그램들의 로그는 날짜/시간 기록과 관련된 일종의 처리 내용입니다. 어떤 프로그램이 언제 시작하고, 멈추고, 오류가 발생하거나 깨졌는지 알 필요가 있습니다.


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.