gpt4 book ai didi

delphi - 为什么 Variant 不能包含 100 CE 之前的 TDateTime?

转载 作者:行者123 更新时间:2023-12-03 14:59:54 24 4
gpt4 key购买 nike

考虑以下代码:

procedure Test;
function d1: Variant;
var
DDt: TDateTime;
begin
DDt := EncodeDate(100,1,1);
Result := DDt;
end;
function d2: Variant;
var
DDt: TDateTime;
begin
DDt := EncodeDate(99,12,31);
Result := DDt;
end;
procedure Writedate(V: Variant);
begin
Writeln(string(V));
end;
var
V: Variant;
begin
V := d1;
Writedate(V);
V := d2;
Writedate(V);
end;

第一次调用 Writedate 将成功,输出将为“01-01-0100”。然而,第二次调用将因“无效参数”失败而失败。检查代码,您可以看到 99-12-31 日期的 Variant 存在 EVariantInvalidArgError 错误。

但是,如果我在任一 TDateTime 上调用 FormatDateTime('c', TDateTime(V)),它们都会成功。事实上,在任何时候,当 Variant 包含日期早于 100 CE 的 TDateTime 时,IDE 在检查其日期时都会显示 EVariantInvalidArgError值。

奇怪的是,Variant 无法处理 100 CE 之前的日期,而 TDateTime 可以。这是 Delphi 中的错误吗?我发现公元 99 年到 100 年之间正确有点可疑。

最佳答案

Variant 可以包含任何日期值,如您的代码所示(赋值 V := d2; 不会产生错误)。

在转换为字符串(编译器委托(delegate)给 Windows 平台上的操作系统)的过程中会引发错误。这会失败,因为 OLE Automation指定 0100 年 1 月 1 日午夜作为最小有效 OLE 自动化日期值。

关于delphi - 为什么 Variant 不能包含 100 CE 之前的 TDateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30392214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com