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

Java中判断指定星期数字是否处于给定星期区间的方法实现

解决星期数字区间判断的问题

这个问题的核心在于星期是循环的周期序列,普通的区间判断逻辑(target >= start && target <= end)只适用于起始星期不大于结束星期的情况,一旦遇到跨周的区间(比如周六到周一)就会失效。我来帮你修正这个逻辑:

首先明确规则:

  • 周日=1,周一=2,周二=3,周三=4,周四=5,周五=6,周六=7

修正后的Java方法

public static boolean isWeekInRange(int targetWeek, int startWeek, int endWeek) {
    // 先校验输入参数合法性,确保星期数字在1-7之间
    if (!isValidWeekNumber(targetWeek) || !isValidWeekNumber(startWeek) || !isValidWeekNumber(endWeek)) {
        throw new IllegalArgumentException("星期数字必须在1到7之间");
    }
    
    // 分两种场景处理区间
    if (startWeek <= endWeek) {
        // 非跨周区间:比如周一(2)到周三(4),直接判断target是否在[start, end]范围内
        return targetWeek >= startWeek && targetWeek <= endWeek;
    } else {
        // 跨周区间:比如周六(7)到周一(2),此时区间包含「start到7」和「1到end」两部分
        return targetWeek >= startWeek || targetWeek <= endWeek;
    }
}

// 辅助方法:校验星期数字是否合法
private static boolean isValidWeekNumber(int weekNum) {
    return weekNum >= 1 && weekNum <= 7;
}

测试案例验证

我们来验证你提到的例子:

当指定星期为周日(1)、起始星期为周一(2)、结束星期为周三时,方法应返回false。

调用isWeekInRange(1, 2, 4),因为2 <=4进入非跨周分支,判断1 >=2 && 1 <=4结果为false,完全符合预期。

再测试几个跨周场景:

  • 起始=周六(7),结束=周一(2),target=周日(1):返回true(属于1-2区间)
  • 起始=周五(6),结束=周二(3),target=周六(7):返回true(属于6-7区间)
  • 起始=周五(6),结束=周二(3),target=周四(5):返回false(不在任何区间内)

逻辑说明

  1. 参数校验:先过滤非法输入,避免无效数字干扰判断结果
  2. 非跨周区间:起始星期小于等于结束星期时,区间是连续的,用常规区间判断即可
  3. 跨周区间:起始星期大于结束星期时,区间被拆成了两段,只要target属于其中任意一段就返回true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:18:28