嗯,这段代码实际上已经集成到 QString 单元了,所以你可以直接调用 GetTimezone 函数来获得时区了。用 GetTimezoneText 可以获得时区的字符串表示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
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。就是这么简单和完美。