首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 時間類型詳解(一):TDateTime 與 Double 的本質關係

     編輯:Delphi

TDateTime 本質是 Double:8 字節浮點數的日期時間編碼

System 單元定義 TDateTime = type Double,即 64 位雙精度浮點數別名。整數部分表示日期(從 1899-12-30 起),小數部分表示時間比例。

相關函數

SysUtils.FloatToDateTime    SysUtils.TryFloatToDateTime

驗證 TDateTime = Double

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 即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved