程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi時間與相關類型(1) - TDateTime 與 Double

Delphi時間與相關類型(1) - TDateTime 與 Double

編輯:Delphi

//相關函數:
SysUtils.FloatToDateTime();
SysUtils.TryFloatToDateTime();

在 System 單元定義有: TDateTime = type Double;

看來 TDateTime 是一個 8 字節 64 位數據, 不過是 Double 的別名.

{測試: 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)); //39955.4740046181

 {不必轉換}
 ShowMessage(FloatToStr(t)); //39955.4740046181

 {直接把一個 Double 當作 TDateTime 看待}
 s := FormatDateTime('yyyy-m-d h:m:s:z', 39955.4740046181);
 ShowMessage(s);       //2009-5-22 11:22:33:999
end;

不會是任何一個 Double 都會轉換成一個合法的時間, SysUtils 單元給出了最小與最大時間的常數:

const
 MinDateTime: TDateTime = -657434.0;   { 01/01/0100 12:00:00.000 AM }
 MaxDateTime: TDateTime = 2958465.99999; { 12/31/9999 11:59:59.999 PM }

保險起見, 應該通過: FloatToDateTime(); 或 TryFloatToDateTime(); 把一個數轉換到 TDateTime;

反向轉換就沒必要用函數了.

{使用 TryFloatToDateTime}
var
 t: TDateTime;
 d: Double;
begin
 d := 0;
 if TryFloatToDateTime(d, t) then
  ShowMessage(DateTimeToStr(t)); //1899-12-30
end;

{使用 FloatToDateTime; 轉換失敗或遇到非法時間時會拋出異常}
var
 t: TDateTime;
 d: Double;
begin
 d := 0;
 t := FloatToDateTime(d);
 ShowMessage(DateTimeToStr(t)); //1899-12-30
end;

{當時間是 1899年12月30日 0時0分0秒 0毫秒時, TDateTime 對應的時間值是 0}
var
 d: Double;
 t: TDateTime;
begin
 t := StrToDateTime('1899-12-30 0:0:0:0');
 d := Double(t);
 ShowMessage(FloatToStr(d)); //0
end;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved