我可以用吗?
{ Internal,converts a date-time to milliseconds }function DateTimetoMilliseconds(const ADateTime: TDateTime): Int64;var LTimeStamp: TTimeStamp;begin LTimeStamp := DateTimetoTimeStamp(ADateTime); Result := LTimeStamp.Date; Result := (Result * MSecsPerDay) + LTimeStamp.Time;end;
[德尔福XE]
我在About.com上发现了这个:
ExperIEnce shows that creating two TDateTime values using the function and EncodeDateTime that are distant from each other only a millisecond,the function returns a MillisecondsBetween not return as was expected,proving that it is not accurate.
所以,如果我不关心几个milisecs,我应该使用它.
解决方法 TDateTime是浮点数的两倍.为了在使用TDateTime值时最小化舍入误差,DateUtils中的大多数计算都将TDateTime转换为毫秒.稍后当计算准备就绪时,Int64值再次转换回TDateTime值.
内部标记是为了强调该功能是一个实现细节,不能在库外使用.也就是说,在使用TDateTime值时,请使用公共函数/过程.
这是对MilliSecondsBetween函数的一点测试:
program TestMSecBetween;{$APPTYPE CONSolE}uses System.SysUtils,System.DateUtils;var d1,d2 : TDateTime; i,iSec,iMin,iHour,imsec; isb : Int64;begin d1 := EncodeDateTime(2013,6,14,0); for i := 0 to 1000*60*60*24-1 do begin iHour := (i div (1000*60*60)) mod 24; iMin := (i div (1000*60)) mod 60; iSec := (i div 1000) mod 60; imsec := i mod 1000; d2 := EncodeDateTime(2013,imsec); isb := MilliSecondsBetween(d2,d1); if (isb <> i) then WriteLn(i:10,iHour:3,iMin:3,iSec:3,imsec:4,isb:3); end; ReadLn;end.
您可以将测试扩展超过一天,以查看是否存在异常.
总结以上是内存溢出为你收集整理的delphi – 为什么DateUtils.pas中的DateTimeToMilliseconds被标记为内部?全部内容,希望文章能够帮你解决delphi – 为什么DateUtils.pas中的DateTimeToMilliseconds被标记为内部?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)