delphi – 为什么Variant在100 CE之前不能包含TDateTime?
发布时间:2020-12-15 09:52:47 所属栏目:大数据 来源:网络整理
导读:请考虑以下代码: 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 Wri
请考虑以下代码:
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日期的变体有一个EVariantInvalidArgError错误. 但是,如果我在TDateTime上调用FormatDateTime(‘c’,TDateTime(V)),它们都会成功.实际上,在Variant包含TDateTime的任何时刻,其日期都在100 CE之前,IDE在检查其值时将显示EVariantInvalidArgError. 看起来奇怪的是,当TDateTime可以时,Variant无法处理100之前的CE日期.这是Delphi中的一个错误吗?我发现在99和100之间有点可疑. 解决方法
Variant可以包含任何日期值,如代码所示(赋值V:= d2;不产生错误).
在转换为字符串期间引发错误,编译器委托给Windows平台上的操作系统.此操作失败,因为OLE Automation指定0100年1月1日午夜作为最小有效OLE自动化日期值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |