Windows 提供 SetSystemTime 設定系統時間(UTC),需搭配 TSystemTime 結構。Delphi 提供 DateTimeToSystemTime 將 TDateTime 轉換。
uses Windows, SysUtils;
procedure SetSystemDateTime(const NewDateTime: TDateTime);
var
SysTime: TSystemTime;
begin
DateTimeToSystemTime(NewDateTime, SysTime);
if not SetSystemTime(SysTime) then
RaiseLastOSError;
end;
// 使用範例:設定為 2024-01-15 14:30:00
procedure TForm1.Button1Click(Sender: TObject);
begin
try
SetSystemDateTime(EncodeDateTime(2024, 1, 15, 14, 30, 0, 0));
ShowMessage('系統時間已修改');
except
on E: Exception do ShowMessage('修改失敗(需管理員權限):' + E.Message);
end;
end;
SeSystemtimePrivilege 特權,通常需管理員身分執行,或在程式清單加入 requireAdministrator manifest。SetSystemTime 接受 UTC 時間;若傳入本地時間會導致時區偏移。正確做法:DateTimeToSystemTime(LocalTimeToUniversal(LocalTime), SysTime)。procedure SafeSetSystemTime(const LocalDateTime: TDateTime);
var
SysTime: TSystemTime;
UTCTime: TDateTime;
begin
// 1. 本地時間轉 UTC
UTCTime := LocalTimeToUniversal(LocalDateTime);
// 2. 轉換結構
DateTimeToSystemTime(UTCTime, SysTime);
// 3. 呼叫 API
if not SetSystemTime(SysTime) then
RaiseLastOSError;
end;