如何在Delphi 11 FireMonkey跨平台项目中获取标准时区标识
Delphi 11 FireMonkey跨平台获取标准时区标识
针对Android、Windows、iOS三个平台,可通过以下方式获取IANA标准时区标识(如Europe/Rome、Europe/London):
Windows平台
Windows原生使用自有时区ID,需转换为IANA格式,Delphi 11的System.TimeZone单元提供了转换方法:
uses System.TimeZone, Winapi.Windows; function GetWindowsIanaTimeZoneID: string; var LLocalTimeZone: TTimeZone; LWinTimeZoneID: string; begin LLocalTimeZone := TTimeZone.Local; LWinTimeZoneID := LLocalTimeZone.Id; // 获取Windows时区ID,如'W. Europe Standard Time' Result := TTimeZone.WindowsToIana(LWinTimeZoneID); // 转换为IANA标识 end;
Android平台
Android系统直接支持返回IANA时区标识,通过JNI调用系统API即可:
uses Androidapi.JNI.JavaTypes, Androidapi.Helpers; function GetAndroidIanaTimeZoneID: string; var LSystemTimeZone: JTimeZone; begin LSystemTimeZone := TJTimeZone.JavaClass.getDefault; Result := JStringToString(LSystemTimeZone.getID); end;
iOS平台
通过NSTimeZone获取系统本地时区的IANA标识:
uses iOSapi.Foundation, Macapi.Helpers; function GetIOSIanaTimeZoneID: string; var LLocalTimeZone: NSTimeZone; begin LLocalTimeZone := TNSTimeZone.Wrap(TNSTimeZone.OCClass.localTimeZone); Result := NSStrToStr(LLocalTimeZone.name); end;
跨平台统一封装
利用条件编译实现跨平台通用函数:
function GetIanaTimeZoneID: string; begin {$IFDEF ANDROID} Result := GetAndroidIanaTimeZoneID; {$ENDIF} {$IFDEF MSWINDOWS} Result := GetWindowsIanaTimeZoneID; {$ENDIF} {$IFDEF IOS} Result := GetIOSIanaTimeZoneID; {$ENDIF} end;
注意事项
- Windows平台依赖系统内置的时区映射数据,确保系统已更新至最新时区信息
- Android和iOS平台直接返回系统原生的IANA标识,无需额外转换
内容的提问来源于stack exchange,提问作者lorife
相关产品推荐
相关产品推荐

