You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LocalTime范围判断逻辑异常:调试结果与实际返回不符

问题分析与解决方案

你的问题出在运算符优先级上,Java中&&的优先级高于||,导致表达式被错误分组执行。

原代码本意是判断时间是否大于等于起始时间且小于结束时间,但实际执行的逻辑是:

// 错误的执行顺序:&&优先级更高,先执行后两个条件的与运算
return time.isAfter(start) || (time.equals(start) && time.isBefore(end));

这会导致只要时间在起始时间之后,哪怕已经超过结束时间,函数都会返回true,和预期的区间判断逻辑不符。

修正方案

给||的两个条件加上括号,确保先判断“大于等于起始时间”,再和“小于结束时间”的条件做与运算:

public boolean isInRange(LocalTime time){
    LocalTime start = roundedStartTime.toLocalTime();
    LocalTime end = roundedEndTime.toLocalTime();
    return (time.isAfter(start) || time.equals(start)) && time.isBefore(end);
}

简化写法

你还可以用更简洁的方式实现“大于等于起始时间”的判断——!time.isBefore(start)等价于time.equals(start) || time.isAfter(start),代码可简化为:

public boolean isInRange(LocalTime time){
    LocalTime start = roundedStartTime.toLocalTime();
    LocalTime end = roundedEndTime.toLocalTime();
    return !time.isBefore(start) && time.isBefore(end);
}

修改后,函数逻辑会和LocalDateTime版本保持一致,测试即可正常通过。

内容的提问来源于stack exchange,提问作者Ricardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:10:32