diff --git a/rtl/objpas/sysutils/dati.inc b/rtl/objpas/sysutils/dati.inc index acbeca654b..35fa2f7a20 100644 --- a/rtl/objpas/sysutils/dati.inc +++ b/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; diff --git a/tests/webtbs/tw40121.pp b/tests/webtbs/tw40121.pp new file mode 100644 index 0000000000..192ad21268 --- /dev/null +++ b/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.