在 Delphi 5 中,我们需要使用不同的方法计算时间差。以下是针对 Delphi 5 的解决方案:
修正后的 Delphi 5 实现
delphi
function CalculateTimeUsed(const StartTime, EndTime: TDateTime): string;
var
TimeDiff: Double;
TotalMilliseconds: Int64;
Hours, Minutes, Seconds, Milliseconds: Word;
begin
// 计算时间差(以天为单位)
TimeDiff := EndTime - StartTime;
// 将时间差转换为毫秒
TotalMilliseconds := Round(TimeDiff * 24 * 60 * 60 * 1000);
// 分解为时分秒毫秒
Hours := TotalMilliseconds div (60 * 60 * 1000);
Minutes := (TotalMilliseconds div (60 * 1000)) mod 60;
Seconds := (TotalMilliseconds div 1000) mod 60;
Milliseconds := TotalMilliseconds mod 1000;
// 格式化为字符串 (HH:MM:SS.ZZZ)
Result := Format('%.2d:%.2d:%.2d.%.3d', [Hours, Minutes, Seconds, Milliseconds]);
end;
使用示例(与之前相同)
delphi
var
StartTime, EndTime: TDateTime;
TimeUsed: string;
begin
StartTime := Now; // 记录开始时间
// ... 执行你的代码 ...
EndTime := Now; // 记录结束时间
TimeUsed := CalculateTimeUsed(StartTime, EndTime);
ShowMessage('用时: ' + TimeUsed);
end;
关键说明(针对 Delphi 5)
-
时间差计算原理
-
TDateTime本质是Double类型 -
整数部分表示日期(自1899-12-30的天数)
-
小数部分表示时间(1.0 = 24小时)
-
因此:1毫秒 = 1/(24*60*60*1000) ≈ 0.000000011574074
-
-
毫秒转换公式
delphi
总毫秒数 = (EndTime - StartTime) × 24小时 × 60分钟 × 60秒 × 1000毫秒
-
精度注意事项
-
Windows 系统时间精度通常为 10-15 毫秒
-
对于极短时间测量,考虑使用高精度计时器:
delphi
var StartCount, EndCount, Frequency: Int64; begin QueryPerformanceFrequency(Frequency); QueryPerformanceCounter(StartCount); // ... 执行代码 ... QueryPerformanceCounter(EndCount); TimeUsed := (EndCount - StartCount) * 1000 / Frequency; // 毫秒 end;
-
替代方案(仅需 SysUtils)
如果您只需要秒级精度,可以使用更简单的方法:
delphi
function CalculateTimeUsedSimple(const StartTime, EndTime: TDateTime): string;
var
TimeDiff: Double;
TotalSeconds: Integer;
Hours, Minutes, Seconds: Word;
begin
TimeDiff := EndTime - StartTime;
TotalSeconds := Round(TimeDiff * 24 * 60 * 60);
Hours := TotalSeconds div 3600;
Minutes := (TotalSeconds div 60) mod 60;
Seconds := TotalSeconds mod 60;
Result := Format('%.2d:%.2d:%.2d', [Hours, Minutes, Seconds]);
end;
为什么 Delphi 5 需要这种方法?
-
缺少 DateUtils 单元
-
MilliSecondsBetween等函数在 Delphi 6 才引入 -
Delphi 5 的时间函数主要在
SysUtils中
-
-
TDateTime 结构
-
Delphi 5 中
TDateTime是 8 字节浮点数 -
最小时间单位 ≈ 0.1 毫秒(理论值)
-
实际精度受系统时钟限制
-
这个修正后的方案完全兼容 Delphi 5,仅使用 SysUtils 单元(已在大多数项目中默认引用),无需额外单元支持。

被折叠的 条评论
为什么被折叠?



