При разработке приложений часто возникает необходимость получить текущее системное время. Несмотря на то, что 2000 год, кажется, прошел благополучно, нам все еще нужно быть осторожными с проблемой «времени» в наших недавно разработанных приложениях.
На странице 89 книги «Интеграция - Практические навыки Delphi 4.0» (далее «книга») конкретно представлены два метода получения текущего системного времени, но оба метода имеют недостатки или ошибки, которые будут обсуждаться ниже.
Первый метод в этой книге — использовать функцию Time() для получения текущего системного времени, а возвращаемый результат — переменная структурного типа TDateTime. Например:
PROcedure TForm1.Button2Click(Отправитель: TObject);
вар
ДатаВремя:TDateTime;
начинать
ДатаВремя:=Время();
Caption:=DateToStr(DateTime)+' '+TimeToStr(DateTime);
конец;
Но независимо от даты, результат будет 99-12-30 xx:xx:xx. Очевидно, дата неправильная. Анализируя справку Delphi, Time() используется для возврата правильного «времени — часов, минут и секунд», то есть TimeToStr (DateTime), и не должен использоваться для возврата «даты». Фактически, единственная системная функция, используемая для возврата дат, — это Date.
Так что же может вернуть правильный «час, минуту, секунду» и правильный «год, месяц, день»? Вы можете использовать функцию Now, например:
процедура TForm1.Button1Click(Отправитель: TObject);
вар
мое время: TDateTime;
начинать
mytime:=Сейчас;
Caption:=DateToStr(mytime)+' '+TimeToStr(mytime);
//Или используйте Caption напрямую := DateTimeToStr(Now);
конец;
Формат даты, возвращаемый Now, содержит только две цифры года, то есть 2000 год отображается как 00, что кажется неудовлетворительным. Кроме того, Now и Time могут получать время только с точностью до секунд. время на уровне миллисекунд. Вы можете использовать функцию API GetSystemTime, а соответствующий ей тип TSystemTime определяется как:
TSystemTime = запись
wГод: Слово;
wМесяц: Слово;
вДайОфНеделя: Слово;
вДэй: Слово;
ЧАС: Слово;
wМинута: Слово;
wSecond: Слово;
wМиллисекунды: Слово;
конец;
Очевидно, что его структуру также можно удобно использовать в логике программы для формирования времени --- различных значений времени, поэтому использование функции GetSystemTime имеет большие преимущества. Однако использование этой функции в книге неверно. Обратившись к справке Windows SDK, мы видим, что прототип этой функции:
VOID GetSystemTime(LPSYSTEMTIME lpst), указатель параметра lpst получает системное время, поэтому его можно реализовать в виде следующего сегмента программы:
процедура TForm1.Button3Click(Отправитель: TObject);
вар
Систиме: Тсистемтиме;
начинать
GetSystemTime(SysTime);
Caption:=IntToStr(SysTime.wYear)+' '+IntToStr(SysTime.wMonth);
//если SysTime.wYear>2000, то
//...Используем различные значения времени, полученные в логике программы
конец;
Судя по вышеизложенному, более удобно и гибко получать текущее системное время с помощью функции GetSystemTime.