#java
#java
Вопрос:
У меня возникли трудности с форматированием миллисекунд с помощью SimpleDateFormat. Я пытаюсь получить точный миллисекундный вывод с шаблоном «SS», но когда миллисекунда начинается с нуля, SimpleDateFormat.format() удалит начальный ноль и вернет оставшиеся цифры.
Например, я ожидаю получить вывод «08», но вместо этого я получаю «87» со времени 02: 20: 48.087 с шаблоном формата «SS» или «S».
В javadoc указано, что выходные данные двухбуквенного шаблона интерпретируются как числа, но такая же проблема возникает и с одной буквой S.
SimpleDateFormat test = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SS");
Calendar testCalendar = Calendar.getInstance();
long unixtime = 435457248087L; // 1983-10-20 02:20:48.087
testCalendar.setTimeInMillis(unixtime);
String output = test.format(testCalendar.getTime());
System.out.println(output); // outputs 1983-10-20 02:20:48.87, not xxx.08
Это, конечно, легко исправляется с помощью шаблона «SSS», но мне просто любопытно, это ошибка или в чем подвох с этим.
Комментарии:
1. О да, действительно, виноват. Я должен был написать «08».
Ответ №1:
SS
это просто «количество миллисекунд, дополненное 0, если необходимо, чтобы получить двухзначный результат». Таким образом, похоже, что он ведет себя так, как ожидается в документации.
Лично я думаю, что было бы разумнее, если бы было указано (и реализовано) указывать 08 как долю секунды с точностью до 2 знаков после запятой — к сожалению, это работает не так.
Я не думаю, что есть какой-либо способ указать «долю секунды до 2 знаков после запятой», используя SimpleDateFormat
.
Комментарии:
1. Да, вы правы, и это то, что я написал в первую очередь. Я должен был написать «08», а не «087». Мой плохой и теперь отредактированный.
2. @noini: Хорошо, я отредактировал свой ответ — в основном он ведет себя так, как ожидалось, просто не обязательно так, как вы хотели бы , чтобы он вел себя.