如何在Java的TimePicker中设置两个可用时间范围?
实现多时间段的TimeVetoPolicy
嘿,我来帮你搞定这个多时间范围的需求!其实改起来很简单,你只需要把原来的单范围判断,扩展成多个范围的逻辑或(||)判断就可以了——只要时间落在任意一个允许的范围内,就返回true,否则返回false。
下面是修改后的完整代码:
public class SampleTimeVetoPolicy implements TimeVetoPolicy { @Override public boolean isTimeAllowed(LocalTime time) { // 第一个允许范围:12:00 - 15:00(包含边界) boolean inFirstRange = PickerUtilities.isLocalTimeInRange(time, LocalTime.of(12, 00), LocalTime.of(15, 00), true); // 第二个允许范围:19:00 - 23:00(包含边界) boolean inSecondRange = PickerUtilities.isLocalTimeInRange(time, LocalTime.of(19, 00), LocalTime.of(23, 00), true); // 只要在其中一个范围内就允许 return inFirstRange || inSecondRange; } }
代码说明:
- 把两个时间段的判断拆成独立变量,代码更清晰,后续调整范围或新增时间段也更方便。
- 保留了你原本使用的
PickerUtilities.isLocalTimeInRange方法,第三个参数true表示包含时间段的起始和结束边界(比如12:00、15:00这类时间点允许被选择),如果不需要包含边界,改成false即可。 - 用
||逻辑或连接两个判断,只要时间落在任意一个范围内,就会返回true,也就是允许选择该时间。
如果之后需要添加更多可用时间段,只需要继续新增类似的范围判断,再用||连接起来就好,扩展性很强哦!
内容的提问来源于stack exchange,提问作者theMaximumForce





