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

Android日历选择器:如何禁用过去一周的周日?

解决日历选择器中禁用过去一周周日的问题

你的代码错误地禁用未来周日的原因是:每次计算时都是往未来偏移日期(i是正的增量),而不是往过去追溯。要实现禁用过去一周的周日,需要调整日期偏移的方向,从当前日期往前推算历史周日。

修正后的代码

val weekends: ArrayList<Calendar> = ArrayList()
val weeksToCheck = 5 // 要禁用的过去周数
var i = 0

while (i < weeksToCheck * 7) {
    val sunday = Calendar.getInstance()
    // 先计算最近的上一个周日,再往前推i天(每次减7天,对应过去的每一周)
    sunday.add(Calendar.DAY_OF_YEAR, -(sunday.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY + 7) % 7 - i)
    weekends.add(sunday)
    i += 7
}

val disabledDays = weekends.toTypedArray<Calendar>()
datePickerDialog.disabledDays = disabledDays

代码逻辑说明

  • 核心调整:把日期偏移改为负数,实现往过去方向计算
  • -(sunday.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY + 7) % 7:先算出当前日期到上一个周日的天数差,取负数得到往回跳的天数
  • 再减去i(每次递增7),依次获取过去第1周、第2周……第N周的周日
  • 这样收集到的就是过去指定周数内的所有周日,不会包含未来的日期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:39:51