Delphi's DateUtils
имеет функции UnixToDateTime()
и DateTimeToUnix()
для преобразования между TDateTime
и метками времени Unix, которые выражаются в секундах от эпохи Unix (1 января 1970 00:00: 00 GMT):
// 1325606144 = Jan 3 2012 3:55:44 PM GMT
uses
DateUtils;
var
DT: TDateTime;
Unix: Int64;
begin
DT := UnixToDateTime(1325606144);
// returns Jan 3 2012 3:55:44 PM
Unix := DateTimeToUnix(EncodeDate(2012, 1, 3) + EncodeTime(15, 55, 44, 0));
// returns 1325606144
end;
Класс Java Date
, с другой стороны, основан на миллисекундах с эпохи Unix . Это легко принять во внимание, хотя:
uses
DateUtils;
function JavaToDateTime(Value: Int64): TDateTime;
begin
Result := UnixToDateTime(Value div 1000);
end;
function DateTimeToJava(const Value: TDateTime): Int64;
begin
Result := DateTimeToUnix(Value) * 1000;
end;
В качестве альтернативы:
uses
SysUtils, DateUtils;
// UnixDateDelta is defined in SysUtils...
function JavaToDateTime(Value: Int64): TDateTime;
begin
Result := IncMilliSecond(UnixDateDelta, Value);
end;
function DateTimeToJava(const Value: TDateTime): Int64;
begin
Result := MilliSecondsBetween(UnixDateDelta, Value);
if Value < UnixDateDelta then
Result := -Result;
end;
В любом случае:
// 1325606144000 = Jan 3 2012 3:55:44 PM GMT
var
DT: TDateTime;
Java: Int64;
begin
DT := JavaToDateTime(1325606144000);
// returns Jan 3 2012 3:55:44 PM
Java := DateTimeToJava(EncodeDate(2012, 1, 3) + EncodeTime(15, 55, 44, 0));
// returns 1325606144000
end;