Проблема в том, что символ S анализирует числа как миллисекунды.Всегда.Таким образом, в первом случае «.5» анализируется как 5 миллисекунд, а «.50» анализируется как 50 миллисекунд.Ни одна из них не анализируется как полсекунды, что, я подозреваю, является тем, что вам нужно.
К сожалению, это является недостатком в SimpleDateFormat.Нет просто никакого способа проанализировать или отформатировать поля с точностью до секунды или центсекунды.
Когда мне в последний раз приходилось делать это (правда, только на время, а не на дату), я заканчивал анализ вручную - разбивая строкус регулярным выражением, а затем вручную преобразует поля в миллисекунды.Возможно, вы могли бы вырезать поле дробных секунд и проанализировать это вручную, а затем проанализировать оставшуюся строку с помощью SimpleDateFormat.
Альтернативой является заполнение строк завершающими нулями, чтобы дробные секунды всегда составляли три цифры, чтобудет проанализирован правильно.Уродливо, но, по крайней мере, просто.