Как разобрать время в любом формате с LocalTime.parse? - PullRequest
2 голосов
/ 11 апреля 2020

У меня проблемы с использованием java LocalTime для анализа строки с часами, минутами и секундами.

LocalTime t = LocalTime.parse("8:30:17"); // Simplification

Это приводит к следующему исключению:

Исключение в потоке "main" java .time.format.DateTimeParseException: текст '8:30:17' не может быть проанализирован с индексом 0

Ответы [ 4 ]

4 голосов
/ 11 апреля 2020

Форматировщик по умолчанию ожидает формат ISO, который использует 2 цифры для каждого из часов, минут и секунд.

Если вы хотите проанализировать показанное вами время, которое имеет только одну ди git для часов, вам нужно будет предоставить пользовательский форматер (обратите внимание на один H):

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("H:mm:ss");
LocalTime t = LocalTime.parse(times.get(i), formatter);
3 голосов
/ 11 апреля 2020

Вам нужно будет передать пользовательский DateTimeFormatter, например:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("H:mm:ss");
LocalTime t = LocalTime.parse(times.get(i), formatter);

Взгляните на документы , так как буквы, которые вам нужно использовать, могут отличаться .

1 голос
/ 11 апреля 2020

Вам нужно использовать DateTimeFormatter, чтобы дать синтаксическому анализатору шаблон формата для анализа.

DateTimeFormatter formatter =DateTimeFormatter.ofPattern("H:mm:ss");
LocalTime t = LocalTime.parse(times.get(i), formatter);

Буквы шаблона формата:

H       hour-of-day (0-23)
m       minute-of-hour
s       second-of-minute            
h       clock-hour-of-am-pm (1-12)
0 голосов
/ 11 апреля 2020

С LocalTime.parse :

Строка должна представлять действительное время и анализируется с использованием DateTimeFormatter.ISO_LOCAL_TIME.

Согласно ISO_LOCAL_TIME условие для часов таково:

Две цифры для часа дня. Это дополняется нулями, чтобы обеспечить две цифры.

Вы анализируете значение 8:30:17, одну ди git вместо двух цифр, и поэтому вы нарушаете условие, вызывая ошибку .

...