애플리케이션을 개발할 때 현재 시스템 시간을 가져와야 하는 경우가 많습니다. Y2K가 무사히 통과된 것 같지만, 새로 개발된 애플리케이션의 "타이밍" 문제에 대해서는 여전히 주의가 필요합니다.
"Integration - Delphi 4.0 Practical Skills"(이하 "책")의 89페이지에서는 현재 시스템 시간을 얻는 두 가지 방법을 구체적으로 소개하고 있지만 두 방법 모두 단점이나 오류가 있으므로 이에 대해 아래에서 설명합니다.
이 책의 첫 번째 방법은 Time() 함수를 사용하여 현재 시스템 시간을 얻는 것이며, 반환 결과는 TDateTime 구조 유형의 변수입니다. 예를 들어:
PROcedure TForm1.Button2Click(Sender: TObject);
var
날짜시간:TDateTime;
시작하다
날짜시간:=시간();
캡션:=DateToStr(DateTime)+' '+TimeToStr(DateTime);
끝;
그러나 날짜가 무엇이든 결과는 99-12-30 xx:xx:xx입니다. 분명히 날짜가 잘못되었습니다. Delphi의 도움말을 분석하여 Time()은 올바른 "시간, 시, 분, 초", 즉 TimeToStr(DateTime)을 반환하는 데 사용되며 "날짜"를 반환하는 데 사용되어서는 안 됩니다. 실제로 날짜를 반환하는 데 사용되는 유일한 시스템 함수는 Date입니다.
그렇다면 올바른 "시, 분, 초"와 올바른 "년, 월, 일"을 반환할 수 있는 방법은 무엇입니까? 예를 들어 Now 함수를 사용할 수 있습니다.
절차 TForm1.Button1Click(Sender: TObject);
var
내 시간: TDateTime;
시작하다
mytime:=지금;
캡션:=DateToStr(mytime)+' '+TimeToStr(mytime);
//또는 직접 캡션을 사용합니다 := DateTimeToStr(Now);
끝;
Now에서 반환된 날짜 형식에는 연도가 2자리만 있습니다. 즉, 2000년이 00으로 표시되므로 만족스럽지 못한 것 같습니다. 또한 Now와 Time은 보다 정확한 시간을 얻기 위해 초 단위까지만 정확한 시간을 얻을 수 있습니다. 밀리초 수준의 시간, API 함수 GetSystemTime을 사용할 수 있으며 해당 TSystemTime 유형은 다음과 같이 정의됩니다.
TSystemTime = 기록
w년: 단어;
w월: 단어;
wDayOfWeek: 단어;
wDay: 단어;
wHour: 단어;
w분: 단어;
w둘째: 말씀;
w밀리초: 단어;
끝;
분명히 그 구조는 프로그램 논리에서 편리하게 사용되어 시간(다양한 시간 값)을 형성할 수 있으므로 GetSystemTime 함수를 사용하면 큰 이점이 있습니다. 그러나 이 책에서 이 함수의 사용법은 잘못되었습니다. Windows SDK 도움말을 참조하면 이 함수의 프로토타입이 다음과 같다는 것을 알 수 있습니다.
VOID GetSystemTime(LPSYSTEMTIME lpst), 매개변수 포인터 lpst는 시스템 시간을 가져오므로 다음 프로그램 세그먼트로 구현될 수 있습니다.
절차 TForm1.Button3Click(Sender: TObject);
var
SysTime: TsystemTime;
시작하다
GetSystemTime(SysTime);
Caption:=IntToStr(SysTime.wYear)+' '+IntToStr(SysTime.wMonth);
//SysTime.wYear>2000이면
//...프로그램 로직에서 얻은 다양한 시간값을 활용
끝;
위의 논의를 바탕으로 GetSystemTime 함수를 사용하여 현재 시스템 시간을 얻는 것이 더 편리하고 유연합니다.