2017-01-01 00:08:57.231 формат равен гггг-мм-дд.чч: мм: сс?

Я немного сбит с толку, в каком формате эти временные метки. Мне сказали, что формат для использования yyyy-MM-dd.HH:mm:ss но все метки времени выглядят так 2017-01-01 00:08:57.231, 2017-01-01 07:43:36.348, или же 2017-01-01 13:25:55.683, Я не понимаю, почему есть четыре раздела ко времени ?:Hour:Minute:Second в реальных данных, которые у меня есть, когда формат, который я должен использовать, имеет только три временных раздела. Являются ли эти метки даты и времени на самом деле не в формате yyyy-MM-dd.HH:mm:ss?

2 ответа

Решение

Нет, ваше подозрение верное, пример строки даты и времени не в формате yyyy-MM-dd.HH:mm:ss, Точка между dd и HH должна быть простой ошибкой, это должен быть пробел, поскольку в строках метки времени есть пробел между датой и временем. Кроме того, все ваши примеры строк включают в себя миллисекунды: в 00:08:57.231 у вас есть 57 секунд и 231 миллисекунда, или, если хотите, 57.231 секунда, поэтому последний раздел также может называться долей секунды.

    DateTimeFormatter formatter
            = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSS");
    String timestampString = "2017-01-01 00:08:57.231";
    LocalDateTime dateTime = LocalDateTime.parse(timestampString, formatter);
    System.out.println(dateTime);

Выход:

2017-01-01T00: 08: 57,231

Для любопытных: возможно проанализировать строку, или, точнее, большую ее часть, в заданном формате, только исправляя точку в пространстве:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String timestampString = "2017-01-01 00:08:57.231";
    LocalDateTime dateTime = LocalDateTime.from(
            formatter.parse(timestampString, new ParsePosition(0)));

В этом случае результат приходит без миллисекунд:

2017-01-01T00: 08: 57

Однако я не вижу причин, почему вы должны этого хотеть.

Избегайте SimpleDateFormat

В комментарии вы дали фрагмент, который использует SimpleDateFormat учебный класс. Этот класс не только давно устарел, но и общеизвестно проблематичен. Я не вижу причин, почему вы должны хотеть использовать это. Вместо этого я использую java.time, современный Java API даты и времени. По моему опыту, с ним гораздо приятнее работать.

связи

Учебник Oracle: Дата и время, объясняющие, как использовать java.time, Возможно, вы захотите изучить раздел Парсинг и форматирование.

Эти метки времени находятся в yyyy-MM-dd HH:mm:ss:ms формат, последние три цифры миллисекунды.

Другие вопросы по тегам