zhoudian
V2EX  ›  macOS

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

  •  
  •   zhoudian · 1 day ago · 986 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 上那些每天都要确认的日期信息,更清楚、更轻一点。

    15 replies    2026-08-31 19:45:45 +08:00
    wwmmkk
        1
    wwmmkk  
       1 day ago
    这个文案也太 AI 了……
    zhoudian
        2
    zhoudian  
    OP
       1 day ago via Android
    @wwmmkk 是有用😂😂
    gangsta
        3
    gangsta  
       22h 48m ago
    老哥,打扰一下,插一个无关话题 😅
    请问你的系统设置里是不是开启了「减少透明度」(辅助功能 → 显示)这个选项啊?
    我应该用的和你一样的壁纸,但是我的系统菜单栏无法做到类似你截图里(比如第 6 张)这种白底黑字或者黑图标的效果。
    系统里「显示菜单栏背景」「减少透明度」这两个关于沉浸式菜单的相关选项,我目前无论怎么组合设置,我的菜单栏感觉都会透一点儿壁纸的颜色过来,而且图标和文字始终都是白色的。

    yuankui
        4
    yuankui  
       16h 0m ago
    老哥,建议换个名字。。
    zhoudian
        5
    zhoudian  
    OP
       12h 50m ago via Android
    @gangsta 我没有特别研究哎。但是我稍晚研究一下
    zhoudian
        6
    zhoudian  
    OP
       12h 50m ago via Android
    @yuankui 有什么说法吗?
    xiaodaiguaray
        7
    xiaodaiguaray  
       11h 33m ago
    尝鲜了一下,有一些小建议:
    1. 面板 Ai 味道太浓了,可以尝试用专业的设计工具设计一下 UI
    2. 可以加一些 DIY 面板的特性

    总体是极简风,符合我的胃口,用一段时间看看。
    zhoudian
        8
    zhoudian  
    OP
       11h 9m ago
    @gangsta 两个图的文字和图标颜色不同,主要是 macOS 的菜单栏外观自适应导致的,不一定是应用本身的问题。
    - 图 1:菜单栏背景相对较暗或系统处于深色外观,所以文字、图标使用白色。
    - 图 2:菜单栏背景较亮或系统处于浅色外观,所以文字、图标使用黑色。
    zhoudian
        9
    zhoudian  
    OP
       11h 6m ago
    @xiaodaiguaray 分享我个人心得
    1. Ai 味道太浓了的本事不重要,重要是用得爽。就像谷歌收录并不拒绝 ai 生成的文章,但是拒绝生成同类或者质量很差没有自己思考的文章
    2. 蛮不错的建议,后续我们考虑一下哈。
    xiaodaiguaray
        10
    xiaodaiguaray  
       6h 8m ago
    @zhoudian 还有一个问题,按理来说,我应该初始化时就可以获取到节假日信息,但是目前每次展开都会默认先展示农历,然后异步获取到信息了,又会刷新覆盖,每次展开都会这样。我个人觉得,一年到头节假日国家数据更新后,都是确定的,不需要每次都刷新的,然后就是国际节日,也是固定的。
    hucw21750
        11
    hucw21750  
       6h 7m ago
    扩展显示器,没激活的时候,希望可以灰掉

    zhoudian
        12
    zhoudian  
    OP
       4h 48m ago via Android
    @hucw21750 没问题,留意下个版本。
    zhoudian
        13
    zhoudian  
    OP
       4h 46m ago via Android
    @xiaodaiguaray 其实不是晚获取到信息,而是农历,农历节日,国际节日在同一天的情况之下,轮换显示。这些重叠的情况,你建议如何处理?
    xiaodaiguaray
        14
    xiaodaiguaray  
       3h 37m ago
    @zhoudian 我觉得可以把控制权交出去,因为用大陆日历核心是想看:调休、节假日、农历,然后我自己的想法是,可以配置一个优先级,节假日 > 调休 > 农历,大概是这么个想法。就是可以配置优先级,或者默认展示什么。
    zhoudian
        15
    zhoudian  
    OP
       1h 52m ago via Android
    @xiaodaiguaray 赞👍🏻应该可以,我考虑一下
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3115 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 13:38 · PVG 21:38 · LAX 06:38 · JFK 09:38
    ♥ Do have faith in what you're doing.