0

Windows システムよりも 20 ミリ秒速く設定するコーディングを作成しました。私はencodetimeを使用しています。

ここにコードがあります

procedure TForm1.Button1Click(Sender: TObject);
Var
delphi_datetime :tDateTime;
t_date : tdatetime ;
windows_datetime : tSystemTime;
begin
   t_date :=  dATE;
   delphi_datetime := encodetime(8,44,59,980);
   delphi_datetime := incmillisecond(delphi_datetime, 20);
   replacedate(t_date , delphi_datetime);
   datetimetosystemtime( delphi_datetime , windows_datetime );
   setlocaltime( windows_datetime );
  showmessage('time now = ' + timetostr(delphi_datetime));
end;

実行した後、正しい時間を表示します。しかし、日付は1899年12月30日になります..しかし、現在の今日の日付が必要ですが、時間は20ミリ秒速くなります。助けてください..お願いします...

4

2 に答える 2

6

ReplaceDateあなたは後方の議論を持っています。2 番目のパラメーターの日付を読み取り、最初のパラメーターの日付部分を割り当てます。の日付部分delphi_datetimeは 0 です。これが機能するためですEncodeTime。そのゼロ値を取得して に割り当てt_dateますが、引き続き を使用しdelphi_datetimeます。

の引数を逆にするReplaceDateと、現在のシステム時刻が現在の日付で 8:45:00.000 に設定されることがわかります。

ReplaceDate(delphi_datetime, t_date);

t_date別の変数を使用していなければ、間違いにもっと早く気付くことができたでしょう。直接呼び出した場合Date、コードはコンパイルに失敗します。

ReplaceDate(Date, delphi_datetime); // can't pass function result as "var" parameter

これは機能します:

ReplaceDate(delphi_datetime, Date);
于 2013-01-25T15:22:55.823 に答える
4

Rob は、既存のコードの問題を特定しました。ただし、既存のアプローチは不必要に複雑です。より単純なアプローチを選択すると、コードを正しくするのがより簡単になります。

現在より 20 ミリ秒大きい日時が必要な場合は、次のようにします。

MyDateTime := IncMillisecond(Now, 20);

今日の 0845 を表す日時が必要な場合は、次のように記述します。

MyDateTime := Date + EncodeTime(8, 45, 0, 0);
于 2013-01-25T16:55:55.570 に答える