アプリケーションを開発するとき、多くの場合、現在のシステム時刻を取得する必要があります。 Y2K は無事に過ぎたように見えますが、新しく開発したアプリケーションでは「タイミング」の問題に依然として注意する必要があります。
『Integration - Delphi 4.0 Practical Skills』(以下、本書)の 89 ページでは、現在のシステム時刻を取得する 2 つの方法が具体的に紹介されていますが、どちらの方法にも欠点や誤りがあり、これについては後述します。
この本の最初の方法は、Time() 関数を使用して現在のシステム時刻を取得することであり、戻り結果は TDateTime 構造体型の変数です。例えば:
手順 TForm1.Button2Click(送信者: TObject);
変数
日付時刻:TDateTime;
始める
DateTime:=Time();
Caption:=DateToStr(DateTime)+' '+TimeToStr(DateTime);
終わり;
しかし、日付が何であっても、結果は 99-12-30 xx:xx:xx となり、明らかに日付が間違っています。 Delphi のヘルプを分析すると、Time() は正しい「時間、分、秒」、つまり TimeToStr (DateTime) を返すために使用されており、「日付」を返すために使用されるべきではありません。実際、日付を返すために使用される唯一のシステム関数は Date です。
では、正しい「時、分、秒」と正しい「年、月、日」を返すには、次のような Now 関数を使用できます。
プロシージャ TForm1.Button1Click(送信者: TObject);
変数
私の時間: TDateTime;
始める
私の時間:=今;
Caption:=DateToStr(mytime)+' '+TimeToStr(mytime);
//またはキャプションを直接使用します := DateTimeToStr(Now);
終わり;
Now によって返される日付形式には西暦が 2 桁しかありません。つまり、2000 年は 00 として表示されますが、これは不十分なようです。また、より正確な時刻を取得するには、Now と Time は秒単位でしか取得できません。ミリ秒レベルの時間。API 関数 GetSystemTime を使用できます。対応する TSystemTime 型は次のように定義されます。
TSystemTime = レコード
w年: 単語;
w月: 単語;
wDayOfWeek: 単語;
wDay: 単語;
w時間: 単語;
w分: 単語;
w2 番目: 単語。
wミリ秒: ワード;
終わり;
明らかに、その構造はプログラム ロジックで時間 (さまざまな時間値) を形成するために便利に使用できるため、関数 GetSystemTime を使用することには大きな利点があります。ただし、本書でのこの関数の使用法は間違っています。Windows SDK ヘルプを参照すると、この関数のプロトタイプが次のとおりであることがわかります。
VOID GetSystemTime(LPSYSTEMTIME lpst)、パラメータ ポインタ lpst はシステム時刻を取得するため、次のプログラム セグメントとして実装できます。
プロシージャ TForm1.Button3Click(送信者: TObject);
変数
システム時間: TsystemTime;
始める
GetSystemTime(SysTime);
Caption:=IntToStr(SysTime.wyear)+' '+IntToStr(SysTime.wMonth);
//SysTime.wyear>2000 の場合
//...プログラムロジックで取得したさまざまな時間値を使用します
終わり;
上記の説明に基づいて、関数 GetSystemTime を使用して現在のシステム時刻を取得する方が便利で柔軟です。