LocalDateTime: преобразование строки в ЧЧ: мм: сс - PullRequest
0 голосов
/ 17 марта 2019

Что мне нужно сделать:
Мне нужно передать объект LocalDateTime в конструктор, и у меня есть строка, которая имеет значение «18:14:00» в качестве значения.

Мой вопрос:
Как я могу преобразовать строку в LocalDateTime?

Что я сделал:
После некоторых исследований я поставил это, но это не сработало:

LocalDateTime.parse("18:14:00", DateTimeFormatter.ofPattern("HH:mm:ss"));

java.time.format.DateTimeParseException: текст «18: 14: 00» не может быть parsed: невозможно получить LocalDateTime из TemporalAccessor: {}, ISO разрешено в 18:14 типа java.time.format.Parsed

Ответы [ 2 ]

3 голосов
/ 17 марта 2019

Исключение "Невозможно получить LocalDateTime" связано с тем, что анализируемый текст имеет только значения время , значения дата отсутствуют, поэтому невозможно создатьЛокальный Дата Объект времени.

Анализ вместо LocalTime вместо:

LocalTime time = LocalTime.parse("18:14:00");

System.out.println(dateTime); // Prints: 18:14

The *Шаблон 1019 * является значением по умолчанию для LocalTime, поэтому его не нужно указывать (см .: DateTimeFormatter.ISO_LOCAL_TIME).

Если вы хотите / нуждаетесь в LocalDateTime объект, проанализированный аналогично тому, как SimpleDateFormat сделал это, то есть по умолчанию 1 января 1970 года, то вам нужно явно указать значение даты по умолчанию:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
        .append(DateTimeFormatter.ISO_LOCAL_TIME)
        .parseDefaulting(ChronoField.EPOCH_DAY, 0)
        .toFormatter();
LocalDateTime dateTime = LocalDateTime.parse("18:14:00", fmt);

System.out.println(dateTime); // Prints: 1970-01-01T18:14

Для сравнения, это эквивалентно старому SimpleDateFormat результату:

Date date = new SimpleDateFormat("HH:mm:ss").parse("18:14:00");

System.out.println(date); // Prints: Thu Jan 01 18:14:00 EST 1970
3 голосов
/ 17 марта 2019

У вас есть компонент времени, а не компонент даты. Поэтому лучшее, что вы можете сделать (с тем, что у вас есть), это использовать LocalTime (вместо LocalDateTime). Как,

LocalTime lt = LocalTime.parse("18:14:00", DateTimeFormatter.ofPattern("HH:mm:ss"));
...