본문 바로가기

코딩 이야기/델파이 코딩

델파이 날짜/시간 함수 종류 및 예시

델파이 날짜/시간 함수 종류 및 예시

델파이에서 날짜와 시간을 다루는 함수들은 주로 두 개의 유닛에 나뉘어 있습니다. 날짜/시간 값은 기본적으로 TDateTime 타입(실수형)으로 저장됩니다.

아래에서 각 유닛별 주요 함수와 예시를 확인해 보세요.

1. SysUtils 유닛 (기본 날짜/시간 처리)

이 유닛에는 현재 날짜/시간을 가져오거나, 문자열과 TDateTime 값을 서로 변환하고, 날짜/시간 값을 구성하거나 분해하는 등의 기본적인 함수들이 포함되어 있습니다.

uses SysUtils;

Now 함수

기능: 현재 시스템의 날짜와 시간을 TDateTime 값으로 반환합니다.

var
  CurrentDateTime: TDateTime;
begin
  CurrentDateTime := Now;
  ShowMessage('현재 날짜 및 시간: ' + FormatDateTime('yyyy-mm-dd hh:nn:ss', CurrentDateTime));
end;

Date 함수

기능: 현재 시스템의 날짜만 TDateTime 값으로 반환합니다. 시간 부분은 0입니다.

var
  TodayDate: TDateTime;
begin
  TodayDate := Date;
  ShowMessage('오늘 날짜: ' + FormatDateTime('yyyy/mm/dd', TodayDate));
end;

Time 함수

기능: 현재 시스템의 시간만 TDateTime 값으로 반환합니다. 날짜 부분은 0입니다.

var
  CurrentTime: TDateTime;
begin
  CurrentTime := Time;
  ShowMessage('현재 시간: ' + FormatDateTime('hh:nn:ss', CurrentTime));
end;

StrToDate 함수

기능: 날짜 형식 문자열을 TDateTime으로 변환합니다. 시스템 설정을 따르며, 실패 시 예외 발생.

var
  InputDateStr: string;
  ParsedDate: TDateTime;
begin
  InputDateStr := '2023-10-26';
  try
    ParsedDate := StrToDate(InputDateStr);
    ShowMessage('변환된 날짜: ' + FormatDateTime('yyyy년 mm월 dd일', ParsedDate));
  except
    on EConvertError do ShowMessage('잘못된 날짜 형식입니다.');
  end;
end;

DateToStr 함수

기능: TDateTime 날짜 값을 시스템의 기본 짧은 날짜 형식 문자열로 변환합니다.

var
  SomeDate: TDateTime;
  DateString: string;
begin
  SomeDate := EncodeDate(2024, 1, 1); // 2024년 1월 1일
  DateString := DateToStr(SomeDate);
  ShowMessage('DateToStr 결과: ' + DateString); // 예: 2024-01-01 (시스템 설정 따름)
end;

StrToDateTime 함수

기능: 날짜 및 시간 형식 문자열을 TDateTime으로 변환합니다. 시스템 설정을 따르며, 실패 시 예외 발생.

var
  InputDateTimeStr: string;
  ParsedDateTime: TDateTime;
begin
  InputDateTimeStr := '2023-10-26 15:30:00';
  try
    ParsedDateTime := StrToDateTime(InputDateTimeStr);
    ShowMessage('변환된 날짜 및 시간: ' + FormatDateTime('yyyy/mm/dd tt hh:nn:ss', ParsedDateTime));
  except
    on EConvertError do ShowMessage('잘못된 날짜/시간 형식입니다.');
  end;
end;

DateTimeToStr 함수

기능: TDateTime 값을 시스템의 기본 날짜 및 시간 형식 문자열로 변환합니다.

var
  SomeDateTime: TDateTime;
  DateTimeString: string;
begin
  SomeDateTime := Now;
  DateTimeString := DateTimeToStr(SomeDateTime);
  ShowMessage('DateTimeToStr 결과: ' + DateTimeString); // 예: 2023-10-26 오후 3:30:15 (시스템 설정 따름)
end;

EncodeDate 함수

기능: 연도, 월, 일을 받아 TDateTime 날짜 값을 만듭니다.

var
  SpecificDate: TDateTime;
begin
  SpecificDate := EncodeDate(2025, 4, 21); // 2025년 4월 21일
  ShowMessage('지정된 날짜: ' + FormatDateTime('yyyy-mm-dd', SpecificDate));
end;

DecodeDate 프로시저

기능: TDateTime 값에서 연도, 월, 일을 추출합니다.

var
  SomeDate: TDateTime;
  Year, Month, Day: Word;
begin
  SomeDate := Now;
  DecodeDate(SomeDate, Year, Month, Day);
  ShowMessage(Format('오늘은 %d년 %d월 %d일 입니다.', [Year, Month, Day]));
end;

EncodeTime 함수

기능: 시, 분, 초, 밀리초를 받아 TDateTime 시간 값을 만듭니다.

var
  SpecificTime: TDateTime;
begin
  SpecificTime := EncodeTime(10, 30, 0, 500); // 10시 30분 0초 500밀리초
  ShowMessage('지정된 시간: ' + FormatDateTime('hh:nn:ss.zzz', SpecificTime));
end;

DecodeTime 프로시저

기능: TDateTime 값에서 시, 분, 초, 밀리초를 추출합니다.

var
  SomeTime: TDateTime;
  Hour, Min, Sec, MSec: Word;
begin
  SomeTime := Now;
  DecodeTime(SomeTime, Hour, Min, Sec, MSec);
  ShowMessage(Format('현재 시간은 %d시 %d분 %d초 %d밀리초 입니다.', [Hour, Min, Sec, MSec]));
        end;

DayOfWeek 함수

기능: TDateTime 값의 요일을 정수(1=일요일 ~ 7=토요일)로 반환합니다.

var
  Today: TDateTime;
  DayIdx: Integer;
  DayNames: array[1..7] of string;
begin
  Today := Now;
  DayIdx := DayOfWeek(Today);

  DayNames[1] := '일요일'; DayNames[2] := '월요일'; DayNames[3] := '화요일';
  DayNames[4] := '수요일'; DayNames[5] := '목요일'; DayNames[6] := '금요일';
  DayNames[7] := '토요일';

  ShowMessage('오늘은 ' + DayNames[DayIdx] + ' 입니다.');
end;

FormatDateTime 함수

기능: TDateTime 값을 지정된 포맷 문자열에 따라 포맷된 문자열로 반환합니다.

var
  CurrentDateTime: TDateTime;
  FormattedString: string;
begin
  CurrentDateTime := Now;
  FormattedString := FormatDateTime('yyyy년 mm월 dd일 tt hh시 nn분 ss초', CurrentDateTime);
  ShowMessage('포맷된 날짜 및 시간: ' + FormattedString);
end;

2. System.DateUtils 유닛 (날짜/시간 유틸리티)

이 유닛에는 날짜/시간 값을 특정 단위만큼 증감시키거나, 두 날짜/시간 사이의 차이를 계산하거나, 특정 기간(일, 월, 년 등)의 시작 또는 끝 날짜/시간을 구하는 등 좀 더 복잡한 유틸리티 함수들이 포함되어 있습니다.

uses System.DateUtils; // 또는 DateUtils;

IncDay, IncMonth, IncYear 등의 함수

기능: TDateTime 값에 지정된 단위(일, 월, 년 등)만큼을 더하거나 빼서 새로운 TDateTime 값을 반환합니다. 음수 값을 사용하여 시간을 거슬러 갈 수 있습니다.

var
  Today, Tomorrow, LastMonth: TDateTime;
begin
  Today := Date;
  Tomorrow := IncDay(Today, 1);       // 오늘로부터 1일 후
  LastMonth := IncMonth(Today, -1);   // 오늘로부터 1개월 전

  ShowMessage('내일 날짜: ' + FormatDateTime('yyyy-mm-dd', Tomorrow));
  ShowMessage('지난달 오늘: ' + FormatDateTime('yyyy-mm-dd', LastMonth));
end;

DaysBetween, HoursBetween 등의 함수

기능:TDateTime 값 사이의 지정된 단위(일, 시, 분 등) 차이를 정수로 반환합니다.

var
  Date1, Date2: TDateTime;
  DaysDiff: Integer;
begin
  Date1 := EncodeDate(2023, 10, 26);
  Date2 := EncodeDate(2023, 11, 15);
  DaysDiff := DaysBetween(Date2, Date1); // Date2 - Date1 의 일수 차이

  ShowMessage(Format('%s 부터 %s 까지 %d일 차이납니다.',
    [FormatDateTime('yyyy-mm-dd', Date1), FormatDateTime('yyyy-mm-dd', Date2), DaysDiff])); // 결과 예시: 20일 차이
end;

StartOfTheDay, EndOfTheMonth 등의 함수

기능: 주어진 TDateTime 값이 속한 지정된 기간의 시작 또는 끝에 해당하는 TDateTime 값을 반환합니다.

var
  Today, FirstDayOfMonth: TDateTime;
begin
  Today := Now;
  FirstDayOfMonth := StartOfTheMonth(Today);

  ShowMessage('이번 달의 첫째 날: ' + FormatDateTime('yyyy-mm-dd', FirstDayOfMonth));
end;

델파이에서 날짜/시간을 다룰 때는 이러한 함수들을 조합하여 사용하시면 됩니다. 어떤 기능을 사용하느냐에 따라 SysUtils 또는 System.DateUtils 유닛을 추가해야 한다는 점을 기억하시면 됩니다.