本文整理自网络,侵删。
编程中,对日期类型TDateTime、TDate、TTime之间的比较和判断,很是棘手。依据本人经验,写了一个比较函数,使用中比较上手。说明如下:
1、时间TDateTime相当于是Double,即双精度数64位,它用11位表示e,53位表示精度(整数小数一起),最前面一位表示正负。
2、TDateTime的整数部分:1天=1,标准日期值,0表示公元1899-12-30,当整数部分大于0,由标准日期累加天数,小于0由由标准日期累加天数。
3、小数部分:1/1000秒=0.00000001,0 表示一天的 00:00:00 000。通过累加0.00000001计数毫秒,递加时分秒。
4、比较两个时间值,检测二值相等,只要二时间差的绝对值<0.00000001即可。这个值如果精确范围,应该是0<X<0.000000099999999。
函数定义如下:
function DataTimeCompare(D1,D2:TDateTime):integer; // 0等于 1大于 -1小于var k:Double;begin Result:=0; K:=abs(D1-D2); if (K>=0) and (K<0.0000000099999999) then Result:=0 else begin if (D1-D2)>=0 then Result:=1 else Result:=-1; end;end;参数TDateTime类型,同时TDate和Time,均可使用。
procedure TForm1.Button1Click(Sender: TObject);var mydate1,mydate2,mydate3,mydate4: TDateTime; T1,T2:TTime; begin T1 := EncodeTime(0, 0, 0, 0); T2 := EncodeTime(0, 0, 0, 1); mydate1 := EncodeDateTime(2018, 10, 1, 0, 0, 0, 0); mydate2 := EncodeDateTime(2018, 10, 1, 0, 0, 0, 1); mydate3 := EncodeDateTime(2018, 10, 1, 0, 0, 0, 2); Edit1.text:=Format('%.8f', [mydate1]); Edit2.text:=Format('%.8f', [mydate2]); Edit3.text:=Format('%.8f', [mydate3]); Showmessage(IntToStr(DataTimeCompare(mydate1,mydate1))); Showmessage(IntToStr(DataTimeCompare(mydate2,mydate1))); Showmessage(IntToStr(DataTimeCompare(mydate1,mydate2))); } Showmessage(IntToStr(DataTimeCompare(T2,T2))); Showmessage(IntToStr(DataTimeCompare(T1,T2))); Showmessage(IntToStr(DataTimeCompare(T2,T1)));end;注意单元中,加入Uses DateUtils,――――――――――――――――
原文链接:https://blog.csdn.net/lyhoo163/article/details/82820263
相关阅读 >>
Delphi 2009 泛型容器单元(generics.collections)[1]: tlist<t>
Delphi xe10 针对全面屏手机端无法全面显示,下方显示黑条的处理
更多相关阅读请进入《Delphi》频道 >>