2017-01-11 9 views

ответ

1

Одним из возможных решений может быть использование ValueRange ,

ZoneId zoneId = ZoneId.of("America/New_York"); 
ZonedDateTime dateAndTimeForAccount = ZonedDateTime.ofInstant(now, zoneId); 
System.out.println(dateAndTimeForAccount); 

ValueRange hourRange = ValueRange.of(8, 10); 
System.out.printf("is hour (%s) in range [%s] -> %s%n", 
     dateAndTimeForAccount.getHour(), 
     hourRange, 
     hourRange.isValidValue(dateAndTimeForAccount.getHour()) 
); 

пример вывода

2017-01-11T07:34:26.932-05:00[America/New_York] 
is hour (7) in range [8 - 10] -> false 
0
int currentHour = dateAndTimeForAccount.getHour(); 
boolean isBetween6And10 = 6 <= currentHour && currentHour <= 10; 

Если вы хотите обобщить для любого конкретного класса java.time вы можете использовать TemporalQuery класс:

class HourTester extends TemporalQuery<Boolean> { 
    @Override 
    public Boolean queryFrom(TemporalAccessor temporal) { 
     int hour = temporal.get(ChronoField.HOUR_OF_DAY); 
     return 6 <= hour && hour <= 10; 
    } 
} 

Использование: boolean isBetween6And10 = dateAndTimeForAccount.query(new HourTester());