Класс java.util.Date
- это неправильный тип для ваших нужд.Этот класс представляет дату плюс время суток, а вам нужно только время суток.Среди старых классов даты-времени, связанных с ранними версиями Java, есть класс , а не , который действительно представляет значение времени дня.Класс java.sql.Time
претендует на это, но это хак.
java.time
Фреймворк java.time встроен в Java8 и позже.См. Oracle Tutorial .Эти классы были вдохновлены очень успешной библиотекой Joda-Time .Большая часть функциональности java.time перенесена на Jave 6 и 7 , а далее адаптирована для Android .Эти классы вытесняют старые классы даты и времени; обширное улучшение.
Класс LocalTime
представляет время суток без даты и без часового пояса.
Использованиеотсортированная коллекция, такая как List
для упорядочивания ваших значений.
List<LocalTime> times = new ArrayList<>( 4 );
times.add( LocalTime.of( 10 , 0 );
times.add( LocalTime.of( 12 , 0 );
times.add( LocalTime.of( 14 , 0 );
times.add( LocalTime.of( 16 , 0 );
Определите время выборки для сравнения.
LocalTime sample = LocalTime.of( 15 , 15 ); // Quarter-hour past 3 in the afternoon.
Или получите текущее время-дня. Укажите часовой пояс , поскольку он более надежен, чем неявный, в зависимости от текущего часового пояса вашей JVM .
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalTime sample = LocalTime.now( zoneId );
Выполните цикл List
, чтобы найтипункт, который позже в день, чем ваше время выборки.Для сравнения используйте методы isAfter
, isBefore
или equals
.
LocalTime hit = null;
for ( LocalTime time : times ) {
if ( time.isAfter( sample ) ) {
hit = time;
break; // Bail-out of this FOR loop.
}
}
// Test if 'hit' is still null, meaning no appropriate value found.
if ( null == hit ) { … } else ( … }