TDate、TTime 與 TDateTime 大小相同 (8 字節),互轉無損失,僅為語義區分。TTimeStamp 結構將日期時間拆分為整數天數與毫秒數,便於精確計算與跨平台交換。
SysUtils.DateTimeToTimeStamp SysUtils.TimeStampToDateTime
SysUtils.TimeStampToMSecs SysUtils.MSecsToTimeStamp
Windows.GetTickCount Windows.GetCurrentTime
TTimeStamp = record
Time: Integer; {毫秒數,從 0:0:0.000 起}
Date: Integer; {天數,從 0001-1-1 起}
end;
var T: TDateTime; TS: TTimeStamp;
begin
T := EncodeDateTime(2009, 5, 22, 11, 22, 33, 999);
TS := DateTimeToTimeStamp(T);
ShowMessage(IntToStr(TS.Time)); {40953999 當日逝去毫秒}
ShowMessage(IntToStr(TS.Date)); {733549 自 0001-1-1 起的天數}
T := TimeStampToDateTime(TS);
ShowMessage(FormatDateTime('yyyy-m-d h:m:s:z', T)); {2009-5-22 11:22:33:999}
end;
{手動計算}
733549 * 24 * 60 * 60 * 1000 + 40953999 = 63378674553999
{API 計算}
var ms: Comp;
ms := TimeStampToMSecs(TS); {63378674553999}
TS := MSecsToTimeStamp(ms);
T := TimeStampToDateTime(TS);
GetTickCount 返回開機至今毫秒數,結合上述轉換可計算開機絕對時間。