(cherry picked from commit a9f9996dc87b2ee7ae1be6cf3cd8d45a939c20b4)
@@ -117,7 +117,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;
@@ -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
+end.