我必須將本地日期和時間與從數據庫返回的相同日期和時間進行同步。將本地時間與數據庫服務器時間同步
的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.
首先,你不能。時間不停,所以客戶需要直接閱讀。其次,在Vista和更高版本(或作爲非高級用戶運行時的XP)中,更改系統日期或時間需要管理員權限。 –
要添加到其他評論...你永遠不能找出什麼是時間,只有它是什麼。有像NTP這樣的工具可以解決這個問題,很久以前就已經解決了。 –
我不想更改操作系統的日期時間,我只想要查詢數據庫的日期時間,假設那些時間(在數據庫中)永遠不會改變。 –