2
0
Эх сурвалжийг харах

+ support leap seconds in TryEncodeTime, resolves #40121

florian 2 жил өмнө
parent
commit
a9f9996dc8

+ 3 - 1
rtl/objpas/sysutils/dati.inc

@@ -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 - 0
tests/webtbs/tw40121.pp

@@ -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.