Woot, good catch !!!
At some point, when parsing the date, we parse the fraction of seconds with this method :
private void parseFractionOfSecond() throws ParseException
parseFractionDelmiter( 14 );
String fraction = getFraction( 14 + 1 );
upFractionLength = fraction.length();
double fract = Double.parseDouble( "0." + fraction ); <<<<----------- Problem !!!
int millisecond = ( int ) Math.round( fract * 1000 );
calendar.set( Calendar.MILLISECOND, millisecond );
The rational for the round is that the Calendar only support milliseconds precision, while the generalizedTime gowd down to a tenth of a millisecond. 9995 get rounded to 1000, which is out of the possible values ([0..999]).
This is a bit of a problem as we have to cut the corner a bit (loosing some precision), and more critical, if we have to round 999x to 1000 (when x >= 5), then we have to propagate the extra time to seconds, and then minutes if we were at 59s, then to hours, etc.
In any case, it has to be fixed.
(FTR, the issue is present since the very beginning, 7 years ago...)