ローカルの日時をデータベースから返された同じ日時と同期する必要があります。
SQL:
select first 1 CURRENT_TIMESTAMP from RDB$DATABASE
このSQLコマンドは、データベースサーバーの現在の日付と時刻を返します。
次に、これをキャッシュして、ローカル差分に基づいて正しい時刻を指定する必要があります。問題は、現地の日付と時刻を再度変更できることです。
SQLを再度実行せずに正しい日時を保証するにはどうすればよいですか?
私は解決策を見つけました:
var
SQLTimestamp: TDateTime=0;
LocalTimestamp: TDateTime=0;
function SysUpTime : TDateTime;
var
Count, Freq : int64;
begin
QueryPerformanceCounter(count);
QueryPerformanceFrequency(Freq);
if (count<> 0) and (Freq <> 0) then
begin
Result := Count / Freq;
Result := result / SecsPerDay;
end
else
Result := 0;
end;
function RealTime: TDateTime;
var
queryTime, dbTime: tdatetime;
begin
if SQLTimestamp = 0 then
begin
queryTime := SysUpTime;
dbTime := // SQL QUERY EXECUTION
queryTime := SysUpTime - queryTime;
LocalTimestamp := SysUpTime;
SQLTimestamp := dbTime + queryTime;
end;
Result := SQLTimestamp + (SysUpTime - LocalTimestamp);
end;
今私の質問は:QueryPerformanceCounterとQueryPerformanceFrequencyにはGetTickCountと同じ制限がありますか?
The elapsed time is stored as a DWORD value. Therefore, the time will wrap around to zero if the system is run continuously for 49.7 days.