编程中,对日期类型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 参数TDateTime类型,同时TDate和Time,均可使用。 注意单元中,加入Uses DateUtils,
函数定义如下: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;
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;