StartprogrammingusingObjectPascal:DateAndTime

From 흡혈양파의 번역工房
Jump to: navigation, search

날짜와 시간

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


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


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.