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

Android判断LocalTime是否处于包含跨午夜的指定时间区间内

问题修复方案

核心原因是LocalTime属于纯时间类型,不携带日期信息,当目标区间跨午夜时,startShift减1小时后的时间会大于endShift,原逻辑里「同时满足大于左边界且小于右边界」的与条件天然无法成立,直接导致判断失效。

调整后的判断逻辑

分两种场景处理即可覆盖所有情况:

  • 左边界(startShift提前1小时)小于右边界(endShift):属于非跨天场景,沿用原有判断逻辑
  • 左边界大于等于右边界:属于跨天场景,只要当前时间大于左边界 或 小于右边界,就属于目标区间

实现代码

// 计算区间左边界:排班开始时间提前1小时
LocalTime leftBound = startShift.minus(1, ChronoUnit.HOURS);
boolean isInShift;

if (leftBound.isBefore(endShift)) {
    // 非跨天场景
    isInShift = localTimeNow.isAfter(leftBound) && localTimeNow.isBefore(endShift);
} else {
    // 跨天场景
    isInShift = localTimeNow.isAfter(leftBound) || localTimeNow.isBefore(endShift);
}

if (isInShift) {
    Toast.makeText(this, "In shift", Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(this, "Not in shift", Toast.LENGTH_SHORT).show();
}

边界调整说明

如果需要包含边界的相等情况(比如刚好到提前1小时的时间就算进入区间),可以把isAfter替换为!isBefore,isBefore替换为!isAfter即可,示例左闭右开逻辑如下:

// 左闭右开的跨天判断
isInShift = !localTimeNow.isBefore(leftBound) || localTimeNow.isBefore(endShift);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:48:00