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

Maw*_*awg 11 delphi

我有

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

我在一些MySql中使用它作为主键.

但我也想格式化日期/时间,就像PHP的date()函数一样.

有人有代码段或URL吗?

klu*_*udg 31

你在找

function DateTimeToUnix(const AValue: TDateTime): Int64;
Run Code Online (Sandbox Code Playgroud)

function UnixToDateTime(const AValue: Int64): TDateTime;
Run Code Online (Sandbox Code Playgroud)

来自DateUtils.pas的函数

TDateTime值可以通过FormatDateTime函数格式化


hik*_*ari 16

这要快得多

// 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;
Run Code Online (Sandbox Code Playgroud)

  • 包括`SysUtils`单元你可以写成`(UnixTime/SecsPerDay)+ UnixDateDelta`和`Round((DelphiTime - UnixDateDelta)*SecsPerDay)`. (5认同)

Mau*_*cio 7

我会DateTimeToUnix按照 @kludg 的建议使用 。

function DateTimeToUnix(const AValue: TDateTime): Int64;
Run Code Online (Sandbox Code Playgroud)

如果你想要当前的 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;
Run Code Online (Sandbox Code Playgroud)