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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)