+ support leap seconds in TryEncodeTime, resolves #40121

This commit is contained in:
florian 2023-01-30 22:39:01 +01:00
parent 9db751daff
commit a9f9996dc8
2 changed files with 13 additions and 1 deletions

View File

@ -119,7 +119,9 @@ end;
function TryEncodeTime(Hour, Min, Sec, MSec:word; Out Time : TDateTime) : boolean;
begin
Result:=(Hour<24) and (Min<60) and (Sec<60) and (MSec<1000);
Result:=((Hour<24) and (Min<60) and (Sec<60) and (MSec<1000)) or
{ allow leap second }
((Hour=23) and (Min=59) and (Sec=60) and (MSec<1000));
If Result then
Time:=TDateTime(cardinal(Hour)*3600000+cardinal(Min)*60000+cardinal(Sec)*1000+MSec)/MSecsPerDay;
end;

10
tests/webtbs/tw40121.pp Normal file
View File

@ -0,0 +1,10 @@
uses
dateutils;
var
dt : TDateTime;
begin
if not(TryISOStrToDateTime('2015-06-30T23:59:60Z',dt)) then
halt(1);
if not(TryISOStrToDateTime('2016-12-31T23:59:60Z',dt)) then
halt(1);
end.