为什么 DateUtils.pas 中的 DateTimeToMilliseconds 被标记为内部? 我可以使用它吗?
{ 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.
所以,如果我不在乎几毫秒,我应该使用它。
最佳答案
TDateTime
是一个浮点 double 值。为了最大限度地减少使用 TDateTime
值时的舍入误差,DateUtils 中的大多数计算都会将 TDateTime
转换为毫秒。
稍后,当计算准备就绪时,Int64
值将再次转换回 TDateTime
值。
internal
标记是为了强调该函数是一个实现细节,不能在库外部使用。也就是说,在使用 TDateTime
值时,请使用公共(public)函数/过程。
这是函数 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,0,0,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,6,14,iHour,iMin,iSec,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 被标记为内部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17109814/