|
Perlのtime関数で取得できる時間をDelphiのTDateTimeに変換する関数です。逆にTDateTimeをPerlの時間に変換する関数も作ります。
Perlのtime関数で取得できる時間は1970年1月1日からの経過した秒数になっています。これをDelphiのTDateTimeに変換するにはEncodeDate(1970, 1, 1);としてPerlの初期時間を作成し、その結果に対してPerl時間を1日の秒数で除算した値を加算します。
ただし、Perlのtime関数が返す時間は世界標準時(UTC)なので除算を行う前にローカル時間に合わせる作業が必要になります。
UTCと現在のローカル時間との差を取得するにはAPIのGetTimeZoneInformationを使います。
type
TPerlTime = Cardinal;
function _GetBias: Integer;
var
TimeZone: TTimeZoneInformation;
begin
if GetTimeZoneInformation(TimeZone) = $FFFFFFFF then
RaiseLastWin32Error;
Result := TimeZone.Bias * 60;//分単位から秒単位に変換
//符号を反転
Result := Result * -1;
end;
function PerlTimeToDateTime(PerlTime: TPerlTime): TDateTime;
begin
PerlTime := PerlTime + _GetBias;
Result := EncodeDate(1970, 1, 1) + (PerlTime / 86400);
end;
function DateTimeToPerlTime(DateTime: TDateTime): TPerlTime;
var
Bias: Integer;
begin
Result := Round((DateTime - EncodeDate(1970, 1, 1)) * 86400) ;
Bias := _GetBias;
if Bias > 0 then
Result := Result - Bias
else
Result := Result + Bias;
end;
|