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

Delphi時間與相關類型(2) - TDate、TTime、TTimeStamp

編輯:Delphi

//相關函數:
SysUtils.DateTimeToTimeStamp();
SysUtils.TimeStampToDateTime();

SysUtils.TimeStampToMSecs();
SysUtils.MSecsToTimeStamp();

Windows.GetTickCount;
Windows.GetCurrentTime; {GetCurrentTime 和 GetTickCount 一樣, 是調用了 GetTickCount.}

TDate、TTime 與 TDateTime 的尺寸是一樣的, 互相轉換也不會損失數據; 存在的意義也只是便於理解.

比較有意思的是 TTimeStamp 結構:

TTimeStamp = record
 Time: Integer;   { "毫秒" 表示的時間, 自: 0:0:0:0 }
 Date: Integer;   { "天" 表示的日期, 自: 1/1/0001 }
end;


{TDateTime 與 TTimeStamp 互相轉換的例子}
var
 T: TDateTime;
 TS: TTimeStamp;
begin
 T := EncodeDateTime(2009, 5, 22, 11, 22, 33, 999);
 TS := DateTimeToTimeStamp(T);

 ShowMessage(IntToStr(TS.Time)); //40953999; 當日已逝去了 40953999 毫秒
 ShowMessage(IntToStr(TS.Date)); //733549;  自 0001-1-1 的第 733549 天

 T := TimeStampToDateTime(TS);
 ShowMessage(FormatDateTime('yyyy-m-d h:m:s:z', T)); //2009-5-22 11:22:33:999
end;

假如我們要想知道自 0001-1 0:0:0:0 到 2009-5-22 11:22:33:999 總的毫秒數, 根據上面的結果不難算出:

733549*24*60*60*1000 + 40953999 = 63378674553999.

不過這有現成的函數: TimeStampToMSecs、MSecsToTimeStamp.

{TimeStampToMSecs、MSecsToTimeStamp 示例:}
var
 T: TDateTime;
 TS: TTimeStamp;
 ms: Comp; {這是 TimeStampToMSecs 返回的類型}
begin
 T := EncodeDateTime(2009, 5, 22, 11, 22, 33, 999);
 TS := DateTimeToTimeStamp(T);

 ms := TimeStampToMSecs(TS);
 ShowMessage(FloatToStr(ms)); //63378674553999

 TS := MSecsToTimeStamp(ms);
 T := TimeStampToDateTime(TS);
 ShowMessage(FormatDateTime('yyyy-m-d h:m:s:z', T)); //2009-5-22 11:22:33:999
end;

另外: GetTickCount 函數可獲取從開機時間到當前時間的毫秒數, 結合上面, 可以算出開機

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