Bei der Entwicklung von Anwendungen ist es häufig erforderlich, die aktuelle Systemzeit zu ermitteln. Auch wenn das Jahr 2000 hinter uns zu liegen scheint, müssen wir immer noch vorsichtig sein, wie wir mit dem Timing in unseren neu entwickelten Anwendungen umgehen.
Auf Seite 89 von „Integration – Delphi 4.0 Practical Skills“ (im Folgenden als „das Buch“ bezeichnet) werden speziell zwei Methoden zum Erhalten der aktuellen Systemzeit vorgestellt. Beide Methoden weisen jedoch Mängel oder Fehler auf, die im Folgenden erläutert werden.
Die erste Methode in diesem Buch besteht darin, die Funktion Time () zu verwenden, um die aktuelle Systemzeit zu erhalten. Das Rückgabeergebnis ist eine Variable vom Strukturtyp TDateTime. Zum Beispiel:
PROzedur TForm1.Button2Click(Sender: TObject);
var
DateTime:TDateTime;
beginnen
DateTime:=Time();
Caption:=DateToStr(DateTime)+' '+TimeToStr(DateTime);
Ende;
Aber egal, um welches Datum es sich handelt, das Ergebnis ist 99-12-30 xx:xx:xx. Offensichtlich ist das Datum falsch. Durch die Analyse der Hilfe von Delphi wird Time() verwendet, um die korrekte „Zeit – Stunden, Minuten und Sekunden“ zurückzugeben, also TimeToStr (DateTime), und sollte nicht verwendet werden, um „Datum“ zurückzugeben. Tatsächlich ist Date die einzige Systemfunktion, die zur Rückgabe von Datumsangaben verwendet wird.
Was kann also die richtige „Stunde, Minute, Sekunde“ und das richtige „Jahr, Monat, Tag“ zurückgeben? Sie können zum Beispiel die Now-Funktion verwenden:
procedure TForm1.Button1Click(Sender: TObject);
var
mytime: TDateTime;
beginnen
mytime:=Jetzt;
Caption:=DateToStr(mytime)+' '+TimeToStr(mytime);
//Oder Caption direkt verwenden := DateTimeToStr(Now);
Ende;
Das von Now zurückgegebene Datumsformat hat nur zwei Ziffern für das Jahr, das heißt, das Jahr 2000 wird als 00 angezeigt, was unbefriedigend erscheint. Darüber hinaus können sowohl Now als auch Time nur eine sekundengenaue Zeit ermitteln Genaue Zeit auf Millisekundenebene. Sie können die API-Funktion GetSystemTime verwenden. Der entsprechende TSystemTime-Typ ist wie folgt definiert:
TSystemTime = Datensatz
wJahr: Wort;
wMonth: Wort;
wDayOfWeek: Word;
wDay: Wort;
whoHour: Wort;
wMinute: Wort;
wZweitens: Wort;
wMillisekunden: Wort;
Ende;
Offensichtlich kann seine Struktur auch bequem in der Programmlogik zur Bildung verschiedener Zeitwerte verwendet werden, sodass die Verwendung der Funktion GetSystemTime große Vorteile bietet. Die Verwendung dieser Funktion im Buch ist jedoch falsch. Wenn wir die Windows SDK-Hilfe konsultieren, können wir sehen, dass der Prototyp dieser Funktion wie folgt aussieht:
VOID GetSystemTime(LPSYSTEMTIME lpst), der Parameterzeiger lpst ruft die Systemzeit ab und kann daher als folgendes Programmsegment implementiert werden:
procedure TForm1.Button3Click(Sender: TObject);
var
SysTime: TsystemTime;
beginnen
GetSystemTime(SysTime);
Caption:=IntToStr(SysTime.wYear)+' '+IntToStr(SysTime.wMonth);
//wenn SysTime.wYear>2000 dann
//...Verwenden Sie die verschiedenen in der Programmlogik erhaltenen Zeitwerte
Ende;
Basierend auf der obigen Diskussion ist es bequemer und flexibler, die aktuelle Systemzeit mit der Funktion GetSystemTime abzurufen.