Почему результат LocalDateTime.format (f) не может быть проанализирован с помощью LocalDateTime.parse (it, f)? [Дубликат]

Путь к классам - это список мест для загрузки классов.

Эти «местоположения» могут быть либо каталогами, либо файлами jar.

Для каталогов JVM будет следовать ожидаемому шаблону для загрузки класса. Если у меня есть каталог C: / myproject / classes в моем пути к классам, и я пытаюсь загрузить класс com.mycompany.Foo, он будет выглядеть под каталогом классов для каталога с именем com, а затем под этим каталогом mycompany и наконец, он будет искать файл с именем Foo.class в этом каталоге.

Во втором случае для файлов jar он будет искать файл jar для этого класса. Файл jar на самом деле представляет собой просто набор каталогов, подобных приведенным выше. Если вы распакуете файл jar, вы получите кучу каталогов и файлов классов по шаблону выше.

Таким образом, JVM просматривает путь класса от начала до конца, ища определение класса при попытке загрузить определение класса. Например, в пути к классам:

C: / myproject / classes; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar

JVM попытается сначала посмотреть в классах каталогов, а затем в stuff.jar и, наконец, в otherstuff.jar.

Когда вы получаете исключение ClassNotFoundException, это означает, что JVM прошел весь путь к классам и не нашел класс вы пытались ссылаться. Решение, как часто в мире Java, состоит в проверке вашего пути к классам.

Вы определяете путь к классам в командной строке, говоря java -cp, а затем ваш путь к классам. В среде IDE, такой как Eclipse, у вас будет опция меню, указывающая ваш путь к классу.

19
задан mthmulders 24 July 2015 в 11:44
поделиться

2 ответа

В течение года вы должны использовать нижний регистр y:

final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("dd-MM-yyyy");

Верхний регистр Y используется для недельного периода. Подробнее см. javadoc of DateTimeFormatter .

26
ответ дан Jens 21 August 2018 в 19:05
поделиться
  • 1
    Просто из любопытства, как сообщение об ошибке связано с тем, что Y для weekyear , а y для year ? – mthmulders 24 July 2015 в 08:35
  • 2
    Сообщение об ошибке говорит {DayOfMonth = 1, MonthOfYear = 7, WeekBasedYear [WeekFields [MONDAY, 4]] = 2015}, это означает, что он разобрал 1 из вашей входной строки как DayOfMonth (потому что вы использовали «d» в своем шаблоне), 7 был проанализирован как MonthOfYear (из-за «M» в вашем шаблоне), а в 2015 году понималось «WeekBasedYear» (иначе говоря, «недельный год») из-за «Y». в вашем шаблоне – Kejml 24 July 2015 в 10:42
  • 3
    @mthmulders Иногда сообщения об исключениях suck . Конечно, это исключение на самом деле не так уж плохо, и это говорит вам, что он пытался проанализировать YYYY как. Я посмотрел java datetimeformatter weekbasedyear , и первый результат привел меня здесь , в котором перечислены типы идентификаторов и что они означают. – Chris Cirefice 24 July 2015 в 15:06

Ответ на вопрос заключается в использовании 'y' not 'Y'.

Чтобы объяснить сообщение об ошибке, разрешите его разложить:

Unable to obtain LocalDate from TemporalAccessor

Это говорит о том, что он не может создать LocalDate (что было запрошено) из TemporalAccessor (низкоуровневый интерфейс, который предоставляет доступ к hashmap для полей даты / времени).

of type java.time.format.Parsed

Это говорит о том, что объект, переданный в метод, имел тип java.time.format.Parsed. Это стандартный тип вывода синтаксического анализа и содержит всю анализируемую информацию.

{DayOfMonth=1, MonthOfYear=7, WeekBasedYear[WeekFields[MONDAY,4]]=2015},ISO

Это форма toString() объекта java.time.format.Parsed, которая привела к от разбора. Говорят, что были проанализированы четыре вещи:

  • DayOfMonth=1, день месяца проанализирован со значением 1
  • MonthOfYear=7, месяц- (f12)
  • WeekBasedYear[WeekFields[MONDAY,4]]=2015, в течение недели, обработанного значением 2015
  • ISO, который представляет собой календарь ISO system (значение по умолчанию)

Поскольку невозможно создать LocalDate из комбинации DayOfMonth + MonthOfYear + WeekBasedYear, генерируется исключение.

Примечание что часть [WeekFields[MONDAY,4]] ссылается на то, что существует много разных способов определить неделю, в США начинаются недели в воскресенье, но в стандарте ISO и в ЕС они начинаются в понедельник.

13
ответ дан JodaStephen 21 August 2018 в 19:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: