ТЛ; др
LocalTime.parse(
"9:25" ,
DateTimeFormatter.ofPattern( "H:m" )
)
.isBefore(
LocalTime.of( 10 , 0 )
)
Вы используете неправильные классы
Никогда не используйте ужасно хлопотные старые классы даты и времени в комплекте с самыми ранними версиями Java. Теперь они унаследованы и полностью заменены классами java.time , встроенными в Java 8 и более поздние версии. Избегайте Date
, Calendar
и SimpleDateFormat
в целом.
Формат должен соответствовать вводу
ЧЧ: формат мм
...
java.time.format.DateTimeParseException: текст '9:25' не может быть проанализирован с индексом 0
Ваш шаблон форматирования говорит HH
, что означает двузначное значение. Для часов 1-9 ожидается начальный нулевой отступ. Ваш ввод 9:25
пропускает его нулевой отступ.
Для такого ввода используйте один H
. И, вероятно, минутам не хватает нуля, так что используйте там тоже m
.
DateTimeFormatter.ofPattern ("H: m")
Не работай так усердно
Классы java.time проанализируют ваши строковые входные данные для вас. Не нужно анализировать текст самостоятельно.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "H:m" ) ;
LocalTime lt = LocalTime.parse( "9:25" , f ) ;
Half-Open
сравнить время между 00:00 и 09: 59,
При определении промежутка времени подход Half-Open обычно является наилучшим. При таком подходе начало считается включительно , а окончание исключительно . Это означает, что час 9 утра начинается в 09:00 и продолжается, но не включает первый момент следующего часа, 10:00.
Одним из преимуществ Half-Open является то, что вы избегаете попыток прибить вечно делимый последний момент часа. Последний момент 09:59? 09: 59,9? 09: +59,999999999? Чтобы избежать всей катастрофы, вместо этого спросите: «Есть ли момент до 10 утра?».
Только для времени суток, без контекста даты, часы останавливаются в полночь. Поэтому, если вы хотите спросить, является ли определенное время дня между полуночью и 10:00, вам нужно только спросить, наступило ли это до 10:00.
LocalTime stop = LocalTime.of( 10 , 0 );
LocalTime x = LocalTime.parse( "09:25" ) ;
Boolean isEarlyEnough = x.isBefore( stop ) ;
Возможно, вы хотите использовать время начала, отличное от первого момента дня. В этом случае укажите начало и остановку.
LocalTime start = LocalTime.MIN ; // Constant for 00:00:00.000000000.
LocalTime stop = LocalTime.of( 10 , 0 );
LocalTime x = LocalTime.parse( "09:25" ) ;
Boolean isEarlyEnoughButNotTooEarly = ( ! x.isBefore( start ) ) && x.isBefore( stop ) ; // "Not before" is a briefer way of saying "Is equal to or later than".
О 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?
The ThreeTen-Extra Проект расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .