我将找到两次之间的差异,但我没有得到我想要的! 我在表单中有2个timeEdit组件 这是我的代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TTime time1=StrToTime(t1->Text);
TTime time2=StrToTime(t2->Text);
//t1->Text=time2-StrToTime("3:00");
ShowMessage((time2-time1).TimeString());
}
如果我设置t1 = 02:00 并设置t2 = 01:00
显示1:00
但我希望23:00 也就是01:00 - 02:00应该是23:00
我错了?
答案 0 :(得分:3)
您没有考虑TTime
的编码方式。 TDateTime
是Double
,其中整数部分包含自1899年12月30日以来的天数,小数部分包含 24小时工作日的百分比(此信息在C ++ Builder文档中说明。 TTime
只是TDateTime
的小数部分,忽略了其整数部分。由于这种编码,在日期/时间值上执行这种看似简单的数学运算通常不会产生您期望的结果。
02:00
(2 AM)表示为0.083333333333
,01:00
(1 AM)表示为0.041666666667
。你从凌晨1点减去凌晨2点,期望它减去2小时产生11点(表示为0.958333333333333
)。从0.083333333333
中减去0.041666666667
会产生-0.041666666667
。忽略积分部分(日期),小数部分是0.0
(午夜)的正值,因此-0.041666666667
与0.041666666667
等效,即凌晨1点。
为了使您的减法正常工作,开始时间需要附加一个正整数部分(日期),因此结果包含正确的小数部分,例如:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TTime t = (1.0 + StrToTime("01:00")) - StrToTime("02:00");
// (1.0 + 0.041666666667) - 0.083333333333
// = 1.041666666667 - 0.083333333333
// = 0.95833333333
ShowMessage(t.TimeString());
}