[教程]使用 Delphi 获取当前操作系统的时区

嗯,这段代码实际上已经集成到 QString 单元了,所以你可以直接调用 GetTimezone 函数来获得时区了。用 GetTimezoneText 可以获得时区的字符串表示。

function GetTimeZone: Integer;
var
{$IFDEF MSWindows}
  TimeZone: TTimeZoneInformation;
{$ELSE}
  tmLocal: TM;
  t1: time_t;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
  GetTimeZoneInformation(TimeZone);
  Result := -TimeZone.Bias;
{$ELSE}
  t1 := 0;
  localtime_r(t1, tmLocal);
  Result := tmLocal.tm_gmtoff div 60 ;
{$ENDIF}
end;

function GetTimezoneText: QStringW;
var
  ATz: Integer;
begin
  ATz := GetTimeZone;
  if ATz > 0 then
    Result := Format('+%.2d%.2d', [ATz div 60, ATz mod 60])
  else
  begin
    ATz := -ATz;
    Result := Format('-%.2d%.2d', [ATz div 60, ATz mod 60]);
  end;
end;

代码不长,用起来也简单,它实际上返回的时区对应的分钟数,比如北京时间是480,也就是 8 小时,其它依次类推。使用 GetTimezonText 的话,就会返回 +0800。就是这么简单和完美。

分享到: