文档System.DateUtils.EncodeDateTime()说:
有效小时值为0到24.(如果指定的小时为24,则分钟,秒和毫秒值都应为0,并且生成的TDateTime值表示指定日期结束时的午夜和第二天的开始).
如果我尝试这样做,EncodeDateTime(2008,1,1,24,0,0,0);我会收到一个例外.
我究竟做错了什么?
这是文档中的缺陷.TryEncodeTime实际工作的实现是这样的:
function TryEncodeTime(Hour, Min, Sec, MSec: Word; out Time: TDateTime): Boolean;
var
TS: TTimeStamp;
begin
Result := False;
if (Hour < HoursPerDay) and (Min < MinsPerHour) and (Sec < SecsPerMin)
and (MSec < MSecsPerSec) then
begin
....
Result := True;
end;
end;
Run Code Online (Sandbox Code Playgroud)
由于HoursPerDayIS 24,很显然,实现不与文档一致.
这甚至不是随着时间而改变的行为.该TryEncodeTime方法始终以这种方式运行.例如,Delphi 5的类似功能如下所示:
function DoEncodeTime(Hour, Min, Sec, MSec: Word; var Time: TDateTime): Boolean;
begin
Result := False;
if (Hour < 24) and (Min < 60) and (Sec < 60) and (MSec < 1000) then
begin
Time := (Hour * 3600000 + Min * 60000 + Sec * 1000 + MSec) / MSecsPerDay;
Result := True;
end;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |