是否存在从本地时间转换为UTC的跨平台方法?

时间:2016-11-15 20:47:06

标签: delphi

如何在所有平台(Android / iOS / Mac / Windows)上将本地时间转换为UTC?在Windows上我使用此功能:

function AlLocalDateTimeToGMTDateTime(Const aLocalDateTime: TDateTime): TdateTime;

  {--------------------------------------------}
  function InternalCalcTimeZoneBias : TDateTime;
  const Time_Zone_ID_DayLight = 2;
  var TZI: TTimeZoneInformation;
      TZIResult: Integer;
      aBias : Integer;
  begin
    TZIResult := GetTimeZoneInformation(TZI);
    if TZIResult = -1 then Result := 0
    else begin
      if TZIResult = Time_Zone_ID_DayLight then aBias := TZI.Bias + TZI.DayLightBias
      else aBias := TZI.Bias + TZI.StandardBias;
      Result := EncodeTime(Abs(aBias) div 60, Abs(aBias) mod 60, 0, 0);
      if aBias < 0 then Result := -Result;
    end;
  end;

begin
  Result := aLocalDateTime + InternalCalcTimeZoneBias;
end;

我可以使用跨平台的等效物吗?

1 个答案:

答案 0 :(得分:7)

TTimeZone.ToUniversalTime单元拨打System.DateUtils。在相反的方向,您使用TTimeZone.ToLocalTime。您不仅可以丢弃现有代码,还可以使用单个跨平台函数调用替换它。

熟悉这个单位将是一个谨慎的举动。