一种可能的解决方案是使用ValueRange。
注意:以下解决方案将导致10:59为真(请参阅最底部的“角落案例输出”:
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
编辑:片段指南作为建议解决方案的示例。这不是一个完整的解决方案,并且在代码中可见,它只检查小时部分。
极端情况输出:10:59结果为真:
2017-01-11T10:59:59.999-05:00[America/New_York]
is hour (10) in range [8 - 10] -> true