如何检查TDateTime内容是否有效

时间:2012-07-31 19:44:53

标签: delphi validation datetime vcl tdatetime

有没有办法检查Delphi TDateTime变量是否具有有效内容而不会在转换时捕获异常?

我编写了一个应用程序,必须解析数百个以包含TDateTime字段的原始Delphi记录编写的大文件。偶尔我会得到一条记录,其内容的TDateTime值如2.0927117954e + 262,当传递给转换例程时会产生Floating point invalid Operation异常。我知道我可以简单地捕获异常,但这在调试时会非常麻烦,因为调试器会一直停止,我想在其他错误的情况下保持启用状态。

3 个答案:

答案 0 :(得分:11)

您的示例值显然超出了有效的DateTime范围。您可以在执行任何转换之前测试它是否在范围内。

var
  d: TDateTime;
..

d := 2.0927117954e+262;
if (d <= MaxDateTime) and (d >= MinDateTime) then
  s := DateTimeToStr(d)
else
  ..

答案 1 :(得分:5)

如果您的问题是调试器停止,您可以在以后的Delphi版本的IDE中修复它。在发生异常的行之前和之后设置两个断点。例如。在Delphi 2007中,右键单击第一个BP的边距红点,选择BreakPoint属性/高级/忽略后续异常。在第二个BP上,“处理后续异常”

答案 2 :(得分:4)

我发现VCL包含一个完全符合此目的的函数SysUtils.TryFloatToDateTime,并且使用它似乎是最好的选择。

因为我手头没有Delphi,所以这是C ++的一个用例 - Builder:

bool isValidDateTime(const double dt) {
    TDateTime dummy;
    return Sysutils::TryFloatToDateTime(dt, dummy);
}

...&#34;移植&#34;它对德尔福来说似乎很容易。