System 單元定義 TDateTime = type Double,即 64 位雙精度浮點數別名。整數部分表示日期(從 1899-12-30 起),小數部分表示時間比例。
SysUtils.FloatToDateTime SysUtils.TryFloatToDateTime
var t: TDateTime; d: Double; s: string;
begin
t := EncodeDateTime(2009, 5, 22, 11, 22, 33, 999);
d := Double(t); ShowMessage(FloatToStr(d)); {39955.4740046181}
d := t; ShowMessage(FloatToStr(d)); {隱式轉換}
ShowMessage(FloatToStr(t)); {直接當 Double 打印}
s := FormatDateTime('yyyy-m-d h:m:s:z', 39955.4740046181); ShowMessage(s); {直接用 Double}
end;
const
MinDateTime: TDateTime = -657434.0; {0100-1-1 00:00:00}
MaxDateTime: TDateTime = 2958465.99999; {9999-12-31 23:59:59.999}
{TryFloatToDateTime: 失敗返回 False 不拋異常}
var t: TDateTime; d: Double;
begin d := 0; if TryFloatToDateTime(d, t) then ShowMessage(DateTimeToStr(t)); end; {1899-12-30}
{FloatToDateTime: 失敗拋異常}
var t: TDateTime; d: Double;
begin d := 0; t := FloatToDateTime(d); ShowMessage(DateTimeToStr(t)); end;
{基準點驗證}
var d: Double; t: TDateTime;
begin t := StrToDateTime('1899-12-30 0:0:0:0'); d := Double(t); ShowMessage(FloatToStr(d)); end; {0}
建議: 外部輸入轉 TDateTime 時優先用 TryFloatToDateTime;反向轉換直接賦值或 FloatToStr 即可。