Отражение?
Ваша ошибка, вероятно, не связана с анализом строки времени суток, поскольку исключение относится к классу в пакете .reflect
.
java.время
Вы используете неправильный тип класса для времени суток.Класс java.util.Date
предназначен для значения даты со временем.У вас нет даты.
Также вы используете проблемные старые унаследованные классы даты и времени, вытесненные годами назад классами java.time .
Для времени сутокзначение, используйте LocalTime
.
LocalTime start = LocalTime.parse( "12:34" ) ;
LocalTime stop = LocalTime.parse( "15:00" ) ;
Часовой пояс только с временем суток?
Я понятия не имею, почему ваши строковые входы для времени дня будут отображатьZ
в конце.A Z
в дате и времени означает UTC.И UTC не имеет значения в контексте значения времени суток.Поэтому я проигнорирую часть вашего вопроса 'Z'
.
Duration
Рассчитайте прошедшее время, используя Duration
.
Duration d = Duration.between( start , stop ) ;
Locale
Нет необходимости указывать Locale
при разборе строки времени в стандартном формате ISO 8601 .
A Locale
требуется только при локализации / переводе, когда нам требуются человеческий язык и культурные нормы.
Дата и зона
Я подозреваю, что вы должны использоватьдата вместе с вашим временем суток, а также часовой пояс.Но Вопрос не объясняет бизнес-проблему, поэтому я только предполагаю, учитывая ваше наименование.
Имейте в виду, что расчеты времени суток ограничены одним общим 24-часовым днем.Вы не можете идти после полуночи на следующий день.Таким образом, ваше время остановки всегда должно быть позже (больше), чем ваше время начала (если вы не хотите, чтобы результат с отрицательным числом возвращался назад во времени).
Обучение отладке
Обучение отладке имеет решающее значениебыть программистом.
Когда вы сталкиваетесь с подобной проблемой, выделите то, что вы подозреваете в качестве причины (время анализа), в простое маленькое одноразовое приложение.Получите базовые функциональные возможности, прежде чем использовать их в более широком объеме вашего сложного приложения (веб-приложение, сервлеты, веб-контейнер и т. Д.).Если ваш код работает в одноразовом приложении, но не в реальном (сложном) приложении, то вы знаете, что истинная причина проблемы почти наверняка кроется в другом месте.
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .