mar*_*set 5 delphi datetime delphi-2010
我观察到了关于EncodeDateTime和EncodeTime方法的某种奇怪的行为,我正在寻求一些解释.
procedure SomeTestCase;
var
time: TTime;
dateTime: TDateTime;
begin
time := EncodeTime(8, 0, 0, 0);
date := EncodeDateTime(2012, 11, 2, 8, 0, 0, 0);
Assert(time = TimeOf(date)); //Fails
end;
Run Code Online (Sandbox Code Playgroud)
我发现的是date小时部分的评估来7:59:59代替8:00:00.但是,如果我时段部分设置的time并date以图9中,断言通行证和date计算结果为预期值.有些时间有效,有些则没有.有人可以解释一下发生了什么吗?
时间值(TTime,TDate,TDateTime)实际上是一个double(即,一个浮点值),并在整数部分编码的日期,并且通过小数部分编码中的时间.测试浮点值的相等性总是有风险的.
你可以SameTime(time, date)改用.这正确地补偿了"数字大惊小怪":Result := Abs(Frac(A) - Frac(B)) < OneMillisecond;
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |