delphi – 为什么Variant在100 CE之前不能包含TDateTime?

delphi – 为什么Variant在100 CE之前不能包含TDateTime?,第1张

概述请考虑以下代码: procedure Test; function d1: Variant; var DDt: TDateTime; begin DDt := EncodeDate(100,1,1); Result := DDt; end; function d2: Variant; var DDt: TDateTime; begin 请考虑以下代码:

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自动化日期值.

总结

以上是内存溢出为你收集整理的delphi – 为什么Variant在100 CE之前不能包含TDateTime?全部内容,希望文章能够帮你解决delphi – 为什么Variant在100 CE之前不能包含TDateTime?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存