2016-11-15 20 views
2

すべてのプラットフォーム(Android/iOS/Mac/Windows)で現地時間をUTCに変換するには?窓で私はこの機能を使用します:ローカルタイムからUTCに変換するクロスプラフォームの方法はありますか?

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; 

私は使用できるクロスプラットフォームの同等のものはありますか?

答えて

7

System.DateUtilsユニットからTTimeZone.ToUniversalTimeを呼び出します。反対方向では、TTimeZone.ToLocalTimeを使用します。既存のコードを捨てることができるだけでなく、1つのクロスプラットフォーム関数呼び出しで置き換えることができます。

このユニットに慣れるのは賢明な方法です。

関連する問題