阅读您的问题描述,我得出结论,如果某些记录具有损坏/无效的时间值,那么您的应用程序继续读取文件是绝对有效的,因此您希望跳过它(否则可能标记或收集问题)。
VCL 函数System.SysUtils.TryFloatToDateTime正是为此目的而制作的,到目前为止,使用它对我来说似乎是最好的选择。
德尔福示例:
uses SysUtils;
function IsValidDateTime(dt: Double): Boolean;
var
dummy: TDateTime;
begin
Result := TryFloatToDateTime(dt, dummy);
end;
C++ 生成器示例:
#include <SysUtils.hpp>
bool isValidDateTime(const double dt)
{
TDateTime dummy;
return TryFloatToDateTime(dt, dummy);
}
这个函数不仅方便(因为没有异常并且已经存在)而且非常易读,它还遵循一个贯穿整个框架的良好约定:
- 名字开头
Try
说它可能会失败
Boolean
直接结果以指示有效操作
- 间接结果获取实际值(如果操作成功)