摘要
一个被苹果闹钟坑哭的程序员,花了大半年时间自己写了个闹钟 App。起因很简单:清明节的早晨被闹钟吵醒,调休上班的周六却睡过了头——iPhone 的闹钟不认识中国的节假日。于是我决定自己动手。大半年后,切克闹钟上架了。我为什么要重写闹钟的调度逻辑苹果闹钟的问题不是功能少,而是调度逻辑太死板。它只知道「每周几重复」和「几月几号」,完全不懂中国的调休体系。法定节假日它照响,调休工作日它闭嘴——这对一个有大小周、有调休、有弹性排班的劳动力市场来说,基本不能用。所以我从零设计了一套规则引擎。核心思路是:闹钟的响与不响,应该由「这天是什么日子」来决定,而不是一个固定的日期循环。中国的日期类型比「工作日 / 周末」复杂得多:法定节假日(全国放假)法定调休日(为了凑假期,周六被调成上班)用户自定义休息日(年假、请假)用户自定义工作日(加班、临时排班)普通周末这些信息全部进入一个优先级链:用户自定义 > 法定数据 > 周末兜底。每次闹钟触发前,引擎会实时判断今天的类型,再决定响还是不响。这套逻辑落地成了两个模式:牛马模式 & 休假模式牛马模式——工作日响铃。我自己每天在用。它的规则很简单:该上班的日子就响,不该上班的日子就安静。周一至周五、法定调休日、我自己标记的工作日会响;法定节假日、我标记的休息日、普通周末不会响。最大的好处是再也不用放假前手动关闹钟了。去年五一一整个假期,我的闹钟一个都没响过——不是我手动关的,是它自己知道的。休假模式——反过来,只在休息日响铃。这个模式是我一个周末要上培训课的朋友提的需求。他周六想按闹钟起床,但不希望这个闹钟在周六被调成工作日那天吵他。这两个模式的核心价值其实就一句话:你的闹钟和你的真实作息对齐了。大小周 & 间隔工作日在牛马模式下,我还支持了三种工作日节奏:模式说明标准五天制固定周一至周五大小周五天一休与六天一休交替,指定本周类型后自动推算间隔工作日每 N 个工作日响一次,适配做一休一、做二休一大小周是我一个在互联网公司的朋友强烈要求的。他们公司大小周,他每周都要算下周是单休还是双休,然后去改闹钟设置。现在他只需要设一次。自定义日历:用户可以自己改上面所有的判断,都依赖一套「哪天上班哪天休息」的数据。除了系统同步的法定节假日,我给了用户自己编辑的权限。在日历标签页,每个月的每一天都有颜色标记:法定节假日(红)调休日
摘要可能不完整,可查看原文