如何在所有平台(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;


有没有可以使用的跨平台等效产品?

最佳答案

TTimeZone.ToUniversalTime单元调用System.DateUtils。反之,则使用TTimeZone.ToLocalTime。您不仅可以丢弃现有代码,还可以用单个跨平台函数调用将其替换。

熟悉此单元将是一个谨慎的举动。

10-08 03:23