Я просто пытаюсь преобразовать строку даты в объект DateTime в Java 8. После запуска следующих строк:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDateTime dt = LocalDateTime.parse("20140218", formatter);
Я получаю следующую ошибку:
Exception in thread "main" java.time.format.DateTimeParseException:
Text '20140218' could not be parsed:
Unable to obtain LocalDateTime from TemporalAccessor:
{},ISO resolved to 2014-02-18 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1918)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1853)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
Синтаксис идентичен тому, что было предложено здесь , но мне подают исключение. Я использую JDK-8u25
.
java
datetime
java-8
datetime-format
зеркальное письмо
источник
источник
LocalDate
и нетLocalDateTime
. Проблема заключалась в том, что я создал своеDateTimeFormatter
использование.withResolverStyle(ResolverStyle.STRICT);
, поэтому мне пришлось использовать шаблон датыuuuuMMdd
вместоyyyyMMdd
(то есть «год» вместо «год эры»)!Если вам действительно нужно преобразовать дату в объект LocalDateTime, вы можете использовать LocalDate.atStartOfDay (). Это даст вам объект LocalDateTime на указанную дату с полями часа, минуты и секунды, равными 0:
источник
LocalDateTime.from
кажется ненужным, так какatStartOfDay()
уже возвращаетсяLocalDateTime
.Для чего стоит, если кто-то должен прочитать эту тему еще раз (как и я), правильный ответ будет в
DateTimeFormatter
определении, например:Нужно установить дополнительные поля, если они появятся. И остальной код должен быть точно таким же.
источник
parseDefaulting
ПОСЛЕ того, как вы позвонилиappendPattern
. Иначе это дастDateTimeParseException
.Это действительно неясное и бесполезное сообщение об ошибке. После долгих проб и ошибок я обнаружил, что
LocalDateTime
это даст вышеуказанную ошибку, если вы не попытаетесь проанализировать время. ИспользуяLocalDate
вместо этого, он работает без ошибок.Это плохо документировано, и соответствующее исключение очень бесполезно.
источник
Расширяя ответ ретрографии ..: У меня была такая же проблема даже при использовании
LocalDate
и нетLocalDateTime
. Проблема заключалась в том, что я создал своеDateTimeFormatter
использование.withResolverStyle(ResolverStyle.STRICT);
, поэтому мне пришлось использовать шаблон датыuuuuMMdd
вместоyyyyMMdd
(то есть «год» вместо «год эры»)!(Это решение изначально было комментарием к ответу ретрографии, но мне было рекомендовано опубликовать его как отдельный ответ, потому что оно, по-видимому, действительно хорошо работает для многих людей.)
источник
Для тех, кто попал сюда с этой ошибкой, как я сделал:
Unable to obtain LocalDateTime from TemporalAccessor: {HourOfAmPm=0, MinuteOfHour=0}
Это произошло из следующей строки:
Оказалось, что это потому, что я использовал 12-часовую схему на 0 часов вместо 24-часовой.
Изменение часового на 24-часовой шаблон с использованием заглавной буквы H исправляет это:
источник
Если строка даты не содержит значения для часов, минут и т. Д., Вы не можете напрямую преобразовать это значение в a
LocalDateTime
. Вы можете только преобразовать его кLocalDate
, потому что строка только представляют в год, месяц и день компонентов было бы правильным , что нужно сделать.В любом случае вы можете преобразовать это в
LocalDateTime
.источник
yyyy-mm-dd
когда он должен был бытьyyyy-MM-dd
.Попробуй это:
Вы можете добавить любой формат, который вы хотите. Это подходит для меня!
источник
Это отлично работает
вывод:
источник