如何在 Delphi 中格式化Unix时间戳?

nwsw7zdq  于 2023-04-05  发布在  Unix
关注(0)|答案(4)|浏览(200)

我有

var timestamp: Longint;  
timestamp := Round((Now() - 25569.0 {Unix start date in Delphi terms} ) * 86400);

我在一些MySQL的东西中使用它作为主键。
但是我也想格式化日期/时间,就像PHP's date() function那样。
有人有代码片段或URL吗?

rkkpypqq

rkkpypqq1#

您正在寻找

function DateTimeToUnix(const AValue: TDateTime): Int64;

function UnixToDateTime(const AValue: Int64): TDateTime;

DateUtils.pas中的函数
TDateTime值可通过**FormatDateTime**函数格式化

sqyvllje

sqyvllje2#

这样快多了

// 4x faster than dateutils version
function UNIXTimeToDateTimeFAST(UnixTime: LongWord): TDateTime;
begin
Result := (UnixTime / 86400) + 25569;
end;

// 10x faster than dateutils version
function DateTimeToUNIXTimeFAST(DelphiTime : TDateTime): LongWord;
begin
Result := Round((DelphiTime - 25569) * 86400);
end;
cgvd09ve

cgvd09ve3#

我会使用DateTimeToUnix,就像@kludg建议的那样。

function DateTimeToUnix(const AValue: TDateTime): Int64;

如果你想要当前Unix时间戳的毫秒格式,你可以实现以下函数:

function UNIXTimeInMilliseconds: Int64;
var
  DateTime: TDateTime;
  SystemTime: TSystemTime;
begin
  GetSystemTime(SystemTime);
  DateTime := SysUtils.EncodeDate(SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay) +
        SysUtils.EncodeTime(SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, SystemTime.wMilliseconds);
  Result := DateUtils.MilliSecondsBetween(DateTime, UnixDateDelta);
end;
muk1a3rh

muk1a3rh4#

上面提到的函数UNIXTimeToDateTimeFAST应该使用Int64而不是Longword。对于较旧的日期(负值),Longword会给出错误的结果。

相关问题