delphi 时间与相关类型(2) - TDate、TTime、TTimeStamp


本文整理自网络,侵删。

 时间与相关类型(2) - TDate、TTime、TTimeStamp
//相关函数:
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 函数可获取从开机时间到当前时间的毫秒数, 结合上面, 可以算出开机时间:
--------------------------------------------------------------------------------


{获取开机时间的例子}
var
T1: Int64;
T2,T3: Comp;
T4: TDateTime;
begin
T1 := GetTickCount; {从开机到现在的毫秒数}
T2 := TimeStampToMSecs(DateTimeToTimeStamp(Now)); {从 0001-1-1 到当前时间的毫秒数}
T3 := T2 - T1; {从 0001-1-1 到开机时刻的毫秒数}
T4 := TimeStampToDateTime(MSecsToTimeStamp(T3)); {从 0001-1-1 到开机时刻的时间}
ShowMessage(DateTimeToStr(T4)); {显示开机时间}
end;

相关阅读 >>

Delphi 多关键词批量替换

Delphi google text to speech api

Delphi利用文件流把文件拆分与合并

Delphi10.3 构造生成输出json数据

Delphi 过滤开头 结尾 全部 空格的函数

Delphi钩子注入程序

Delphi 获取系统服务列表

Delphi中利用中断获得系统启动以来的时间

Delphi中url的编码与解码,即urlencode的使用

Delphi 采用 tidhttp 访问 https 的网站,采用 tidtcpclient 访问 https 的网站

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...