# HG changeset patch # User larskindermann # Date 1490913451 -7200 # Node ID 68dbde0e670aca894106672a7a9cb50e89085701 # Parent f7460c045841dc4cf67e213ed1d953476e3a2142 datestr.m: Correct rounding to milliseconds (bug #50673). * datestr.m: Round fractional seconds >= 0.9995 s to the next full second. Add BIST test. diff -r f7460c045841 -r 68dbde0e670a scripts/time/datestr.m --- a/scripts/time/datestr.m Thu Mar 30 11:08:17 2017 -0700 +++ b/scripts/time/datestr.m Fri Mar 31 00:37:31 2017 +0200 @@ -194,7 +194,14 @@ endif endif - ## automatic format selection + ## Round fractional seconds >= 0.9995 s to next full second. + idx = v(:,6) - fix (v(:,6)) >= 0.9995; + if (any (idx)) + v(idx,6) = fix (v(idx,6)) + 1; + v(idx,:) = datevec (datenum (v(idx,:))); + endif + + ## Automatic format selection if (isempty (f)) if (v(:,4:6) == 0) f = 1; @@ -353,6 +360,9 @@ ## Test automatic format detection over vectors %!assert (datestr ([2017 03 16 0 0 0; 2017 03 16 0 0 1]), %! char ("16-Mar-2017 00:00:00", "16-Mar-2017 00:00:01")) +## Test for correct millisecond rounding +%!assert (datestr (datenum ("1:00") - datenum ("0:55"), "HH:MM:SS.FFF"), +%! "00:05:00.000") ## Test input validation %!error datestr ()