嗯,这段代码实际上已经集成到 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。就是这么简单和完美。