首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 修改系統日期時間:呼叫 SetSystemTime API 完整範例

     編輯:Delphi

核心 API

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。
  • UTC vs 本地時間:SetSystemTime 接受 UTC 時間;若傳入本地時間會導致時區偏移。正確做法:DateTimeToSystemTime(LocalTimeToUniversal(LocalTime), SysTime)。
  • Windows 9x Bug:原文提及舊版 Windows 9x 存在 Bug,設定後時間可能錯誤;現代 Windows (NT 核心系列) 已修復。
  • 同步服務衝突:若系統啟用「自動對網路時間同步」,手動設定可能被覆寫。

最佳實務建議

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;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved