zhoudian
V2EX  ›  macOS

我做了一个更懂中文日期的 macOS 菜单栏日历:白纸日历

  •  
  •   zhoudian · 6h 12m ago · 368 views

    V2EX 的朋友们好,我是「白纸日历」的开发者。

    它目前免费、无广告,也有用户反馈它的界面和功能比 macOS 自带日历更好用。

    我把它定位成一款为中国用户定制的中文日历,把农历、节气、节假日、调休和日程放进 Mac 菜单栏。

    我做这个应用的原因很简单:在 Mac 上,我每天都会确认几次日期、星期、农历、调休和当天安排。可是这些信息分散在菜单栏、系统日历、提醒事项和节假日网页里。为了回答一个很小的问题,往往要连续打开几个地方。

    于是我做了「白纸日历」:让它安静地待在菜单栏,需要时点一下,今天是什么日子、这个月怎么放假、接下来有什么安排,尽量在一个面板里看完。

    白纸日历 1.5.0 主面板

    利益相关:我是白纸日历的开发者。应用目前在中国区 Mac App Store 免费提供,不需要注册账号,也没有订阅和内购。

    本文部分配图采用 1.5.0 版宣传素材;下载版本和实际可用功能请以 App Store 页面显示为准。

    我想解决的不是“再做一个复杂日历”

    白纸日历不打算替代 Fantastical 、BusyCal ,也不适合团队排期、会议室预订或跨平台协作。它更像一个轻量的日期入口,专门处理这些高频动作:

    • 看今天几号、星期几、农历是什么;
    • 确认周末是否补班、下个假期还有多久;
    • 看今天的会议、约会和到期提醒;
    • 临时记下一件日程或待办;
    • 不打开完整 App ,快速确认接下来要做什么。

    如果你已经在使用 macOS 的日历和提醒事项,它不会要求你重新维护一套数据,而是把现有工作流放到一个更顺手的入口里。

    一个月历里同时看公历、农历和调休

    点开菜单栏后,白纸日历会展开一个 42 格月历。每个日期可以显示公历、农历小字、传统节日、二十四节气,以及日历事件和提醒的提示点。

    中国法定节假日和调休上班日会以「休」「班」标记。节假日数据从 Apple 的中国节假日 iCal 公共订阅源获取,并在本机缓存;网络暂时不可用时,已有缓存仍可继续使用。

    今日信息总览:农历、节气与日程

    农历信息还可以展开查看黄历摘要,包括宜忌、干支、冲煞等传统日期信息。我把它做成可展开的卡片,而不是一个必须进入的独立页面:想看时展开,不想看时就保持清爽。

    假期不只显示“哪天放”,还给出请假参考

    节假日信息对我来说不只是查日期,也会直接影响版本排期、出行和家庭安排。所以假期卡片除了列出放假和调休,还会显示假期倒计时和请假攻略。

    请假攻略会结合假期、周末和调休安排,列出请 0 ~ 5 天年假的可行组合,并标注相对划算的方案。它只是日期计算和规划参考,不替代公司制度或官方通知,但在准备小长假时可以少做几次表格推算。

    假期与请假攻略

    把系统日历和提醒事项放在同一天看

    macOS 的「日历」和「提醒事项」本来就是两个 App ,但它们经常回答同一个问题:今天我要做什么?

    白纸日历通过 EventKit 读取系统日历事件,通过提醒事项接口读取待办,把同一天的安排合并到日期详情里:

    • 查看日历事件和全天安排;
    • 查看今日到期、逾期的提醒;
    • 直接新建、编辑或删除日程;
    • 创建仅指定日期的提醒,或设置具体时间;
    • 在设置中选择需要显示的日历和提醒列表;
    • 完成提醒后立即刷新面板和小组件。

    同一天查看日程与提醒事项

    在设置里还可以按日历名称和颜色选择显示范围。工作、个人、节假日或自动化日历可以分别控制,筛选结果会同步到月历、详情卡和小组件。

    只显示你关心的日历

    新建日程支持输入「明天下午三点开会」这类自然语言,应用会在本机解析日期和时间,再由你确认后写入系统日历。解析失败时不会偷偷创建,仍然由你决定最终内容。

    快速新建日程或提醒

    菜单栏和桌面小组件,都可以按自己的习惯来

    菜单栏空间很宝贵,所以我没有强制一种显示方式。你可以选择仅图标、仅日期、标准、完整或自定义格式,也可以组合年份、星期、时间、秒、农历和节气。

    菜单栏显示设置

    应用还提供四类 macOS 桌面小组件:日期、月历、临近日程和提醒事项,覆盖小、中、大尺寸。小组件会同步主题和已选择的日历范围,点击日期或事项可以回到对应面板。

    四类桌面小组件

    六套主题与深浅色外观

    如果你不喜欢小组件常驻桌面,也可以只使用菜单栏入口;两者互不影响。

    我在代码里做的几个取舍

    这是一个原生 macOS 应用,主界面使用 SwiftUI ,菜单栏状态项和面板窗口使用 AppKit 。项目最低支持 macOS 13 ,依赖通过 CocoaPods 管理,农历计算使用 Tyme4Swift 。

    几个实现原则也直接影响了使用体验:

    1. 系统数据不搬家。 日历和提醒事项通过 EventKit 读取和写回,应用只保存显示偏好和小组件快照。
    2. 小组件有明确边界。 主应用把经过筛选的日期、事件和提醒快照写入 App Group ,WidgetKit 只渲染快照;没有权限或快照过期时,小组件会明确显示状态,不展示猜测的数据。
    3. 菜单栏刷新不制造空白状态。 秒级显示时只替换有效文本,避免状态项先清空再恢复造成宽度抖动;从文本切换到图标时也先安装有效内容。
    4. 设置尽量可回退。 可以开启“精简主面板”、选择日历范围、切换六套主题、跟随系统深浅色,也可以恢复默认菜单栏显示。
    5. 权限按功能申请。 只有使用日历、提醒事项、通知或小组件对应能力时,才会出现相应的 macOS 授权提示。

    这些细节不会出现在宣传截图里,但它们决定了一个菜单栏工具能不能每天留下来。

    隐私和联网,先把边界说清楚

    • 不需要注册白纸日历账号;
    • 日历、提醒事项和显示偏好在本机处理;
    • 农历和黄历计算在本机完成;
    • 节假日与公告更新需要联网,并使用本地缓存;
    • 不做广告追踪,不把日程和提醒事项用于用户画像;
    • 根据 App Store 隐私标签,应用可能收集与身份不关联的崩溃和诊断数据,用于排查稳定性问题。

    日历和提醒事项是否授权完全由 macOS 控制。不授权时,主面板和小组件会保留可用的日期信息,相关日程模块则显示权限状态,不会绕过系统设置读取数据。

    完整说明可以查看隐私政策

    隐私说明

    它适合谁,也不适合谁

    比较适合:

    • 使用 Mac 工作、写代码、做设计或处理文档的人;
    • 经常查看农历、节气、法定节假日和调休的人;
    • 已经使用系统日历和提醒事项,但觉得来回切换太重的人;
    • 想在菜单栏或桌面小组件里保留一个轻量日期入口的人。

    不太适合:

    • 需要团队共享、会议室和复杂重复规则的企业用户;
    • 需要 Windows 、Android 等多端同步的用户;
    • 完全不使用 Apple 日历或提醒事项,也不希望安装菜单栏常驻工具的人。

    下载和反馈

    当前公开商店页面显示的版本和系统要求,请以 App Store 页面为准:

    在 Mac App Store 下载白纸日历

    设备要求:macOS 13.0 或更高版本。也可以在 Mac App Store 搜索“白纸日历”。

    官网:baizhi.me/calendar

    如果你试用后发现菜单栏显示、调休数据、日程筛选、小组件刷新或某个 macOS 版本上的问题,欢迎在评论里直接指出,也可以发邮件到 [email protected]。我更希望收到可复现的步骤、macOS 版本和截图,而不是一句“有点不对”,这样才能真正修好它。

    最后,感谢每一位愿意试用、提需求和报告问题的人。白纸日历的方向一直很具体:让 Mac 上那些每天都要确认的日期信息,更清楚、更轻一点。

    2 replies    2026-08-30 21:26:11 +08:00
    wwmmkk
        1
    wwmmkk  
       4h 37m ago
    这个文案也太 AI 了……
    zhoudian
        2
    zhoudian  
    OP
       34 mins ago via Android
    @wwmmkk 是有用😂😂
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3030 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:00 · PVG 22:00 · LAX 07:00 · JFK 10:00
    ♥ Do have faith in what you're doing.