You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:37:36