时间与相关类型(2) - TDate、TTime、TTimeStamp
2009-05-22 18:14
405 查看
//相关函数: 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;
相关文章推荐
- Elasticsearch Date类型,时间存储相关说明
- MySQL里面的时间类型datetime,date,timestamp,time和year(转)
- jAVA处理日期(Date)时间(Time)以及相关类的介绍
- android之和时间相关的DatePicker/TimerPicker/Calendar/DatePickerDialog/TimePickerDialog
- Elasticsearch Date类型,时间存储相关说明
- Golang 奇葩的时间包之Json与struct对象之间互相转换,JsonDate和JsonTime自定义类型如何实现json编码和解码(二)
- 时间与相关类型(3): TFileTime、TSystemTime 及 DOS 时间
- setTimeStamp()与setDate()区别 如何将java中Date存入mysql中的datetime中,字符串怎么转换为日期类型
- Android开发总结笔记 Date&Time(时间日期相关组件) 1-1-16
- JAVA处理日期(Date)时间(Time)以及相关类的介绍
- Android平台关于时间和日期的相关类和方法(Date/Time)
- java中存储mysql数据库时间类型【date、time、datetime、timestamp】
- JAVA处理日期(Date)时间(Time)以及相关类的介绍
- mysql date and time type ---- mysql 时间&日期 类型详解
- mysql中的时间类型datetime,date,time,year,timestamp小知识点
- java中存储mysql数据库时间类型【date、time、datetime、timestamp】
- JAVA处理日期(Date)时间(Time)以及相关类的介绍
- JAVA处理日期(Date)时间(Time)以及相关类的介绍
- Mysql日期时间类型(DATE,DATETIME,TIMESTAMP)和函数及与linux系统时间之间的转换(UNIX_TIMESTAMP、FROM_UNIXTIME)
- java中存储mysql数据库时间类型【date、time、datetime、timestamp】