如何获得经过时间和格式化?

Maw*_*awg 3 delphi

我有两个unix时间戳作为LONG INT.我想从末尾开始减去经过的时间并将其格式化为hh:mm:ss

我该怎么做呢?谢谢

RRU*_*RUZ 8

您可以使用UnixToDateTimeFormatDateTime函数查看此示例

uses
  DateUtils,
  SysUtils;

var
  StartUnixTime : Int64;
  EndUnixTime   : Int64;

  StartDateTime : TDateTime;
  EndDateTime   : TDateTime;
begin
  try
    StartUnixTime:=1293062827;
    EndUnixTime  :=1293070000;

    //option 1 converting both unix times to TDatetime and then subtract
    StartDateTime:=UnixToDateTime(StartUnixTime);
    EndDateTime  :=UnixToDateTime(EndUnixTime);    
    Writeln(Format('Elapsed time %s',[FormatDateTime('hh:nn:ss',EndDateTime-StartDateTime)]));

    //option 2 subtract directly and then convert to TDatetime
    Writeln(Format('Elapsed time %s',[FormatDateTime('hh:nn:ss',UnixToDateTime(EndUnixTime-StartUnixTime))]));

  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
  Readln;
end.
Run Code Online (Sandbox Code Playgroud)

此外,如果你想获得的年,月,日,你可以使用YearsBetween,MonthsBetweenDaysBetween这样的功能.

Writeln(Format('Years %d Months %d Days %d',[YearsBetween(EndDateTime,StartDateTime),MonthsBetween(EndDateTime,StartDateTime),DaysBetween(EndDateTime,StartDateTime)]));
Run Code Online (Sandbox Code Playgroud)