注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 感谢各位客官的到来,小站的已经免费运营了15年头了,如果您觉着好,看着文章写的不错,还请看官给小站打个赏~~~~~~~~~~~~~!

IOS 中国节假日补充日历

python 开心洋葱 2213次浏览 0个评论 手机上查看

中国节假日补充日历

 

补充 iOS / macOS 系统自带「中国节假日」订阅中缺少的公共节日。

背景

 

Apple 官方的中国节假日订阅已覆盖春节、清明、劳动节、端午、中秋、国庆等传统节日,但缺少了许多公众普遍关注的节日,例如:

  • 母亲节父亲节感恩节
  • 情人节平安夜圣诞节
  • 万圣节愚人节
  • 妇女节青年节教师节 等

本项目提供一份标准的 .ics 日历文件,可直接导入 iPhone、iPad、Mac 的日历应用,或作为 CalDAV/WebCal 订阅源长期使用。

包含节日

 

固定日期(每年自动重复)

 

节日 日期
情人节 2 月 14 日
妇女节 3 月 8 日
植树节 3 月 12 日
愚人节 4 月 1 日
青年节 5 月 4 日
教师节 9 月 10 日
万圣节 10 月 31 日
平安夜 12 月 24 日
圣诞节 12 月 25 日

浮动日期(按规则每年自动计算)

 

节日 规则
母亲节 5 月第二个星期日
父亲节 6 月第三个星期日
感恩节 11 月第四个星期四

使用方法

 

方式一:直接导入(推荐一次性使用)

 

  1. 下载 china-holidays-extra.ics 文件
  2. 通过 AirDrop、微信、邮件等方式发送到 iPhone/iPad/Mac
  3. 点击文件,选择「添加全部」到日历

方式二:URL 订阅(推荐,可自动同步更新)

 

如果你将本项目部署在静态托管服务(如 GitHub Pages)上,可以直接订阅远程文件:

https://<your-domain>/china-holidays-extra.ics

iOS / iPadOS 操作步骤:

  1. 打开「设置」→「日历」→「账户」→「添加账户」→「其他」→「添加已订阅的日历」
  2. 在「服务器」中输入上述 .ics 文件的完整 URL
  3. 点击「下一步」→「存储」

macOS 操作步骤:

  1. 打开「日历」应用
  2. 菜单栏选择「文件」→「新建日历订阅」
  3. 输入 .ics 文件的完整 URL,点击「订阅」

订阅后,若文件内容更新,客户端会自动同步最新节日数据。

文件说明

 

文件 说明
china-holidays-extra.ics 标准 iCalendar 格式的日历文件,符合 RFC 5545 规范
generate_ics.py 生成/更新 ics 文件的辅助脚本

技术细节

 

  • 所有节日均使用 RRULE 规则实现每年自动重复,无需手动更新固定日期节日
  • 浮动日期节日(母亲节、父亲节、感恩节)使用 BYMONTH + BYDAY 组合规则自动匹配每年正确日期
  • 事件设置为全天事件VALUE=DATE),不会在日历中占用具体时间段
  • 事件透明度设为 TRANSPARENT,不会显示为忙碌状态
  • 文件使用 UTF-8 编码,CRLF 换行,兼容 Apple 日历、Google 日历、Outlook 等主流客户端

自定义与扩展

 

如需添加或修改节日,可编辑 generate_ics.py 中的节日列表,然后重新运行:

python3 generate_ics.py

脚本会自动重新生成 china-holidays-extra.ics

具体代码如下:

import uuid
events = []
# 固定日期节日: (月日, 名称, 描述)
fixed_holidays = [
    ("0214", "情人节", "每年2月14日"),
    ("0308", "妇女节", "每年3月8日"),
    ("0312", "植树节", "每年3月12日"),
    ("0401", "愚人节", "每年4月1日"),
    ("0504", "青年节", "每年5月4日"),
    ("0910", "教师节", "每年9月10日"),
    ("1031", "万圣节", "每年10月31日"),
    ("1224", "平安夜", "每年12月24日"),
    ("1225", "圣诞节", "每年12月25日"),
]
for date_str, name, desc in fixed_holidays:
    uid = str(uuid.uuid4())
    # DTEND 是次日(全天事件的结束时间,不包含)
    start = f"2025{date_str}"
    # 简单计算次日
    month = int(date_str[:2])
    day = int(date_str[2:])
    from datetime import datetime, timedelta
    d = datetime(2025, month, day) + timedelta(days=1)
    end = d.strftime("%Y%m%d")
    events.append(f"""BEGIN:VEVENT
UID:{uid}
DTSTART;VALUE=DATE:{start}
DTEND;VALUE=DATE:{end}
RRULE:FREQ=YEARLY
SUMMARY:{name}
DESCRIPTION:{desc}
TRANSP:TRANSPARENT
END:VEVENT""")
# 浮动日期节日: (名称, 描述, RRULE, 起始日期)
floating_holidays = [
    ("母亲节", "每年5月第二个星期日", "FREQ=YEARLY;BYMONTH=5;BYDAY=2SU", "20250511"),
    ("父亲节", "每年6月第三个星期日", "FREQ=YEARLY;BYMONTH=6;BYDAY=3SU", "20250615"),
    ("感恩节", "每年11月第四个星期四", "FREQ=YEARLY;BYMONTH=11;BYDAY=4TH", "20251127"),
]
for name, desc, rrule, dtstart in floating_holidays:
    uid = str(uuid.uuid4())
    from datetime import datetime, timedelta
    d = datetime.strptime(dtstart, "%Y%m%d") + timedelta(days=1)
    end = d.strftime("%Y%m%d")
    events.append(f"""BEGIN:VEVENT
UID:{uid}
DTSTART;VALUE=DATE:{dtstart}
DTEND;VALUE=DATE:{end}
RRULE:{rrule}
SUMMARY:{name}
DESCRIPTION:{desc}
TRANSP:TRANSPARENT
END:VEVENT""")
# 生成ics内容
ics_content = """BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//china-holidays-extra//CN
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:中国节假日补充
X-WR-TIMEZONE:Asia/Shanghai
X-WR-CALDESC:补充iOS系统日历中缺少的中国公共节日,包括母亲节、父亲节、感恩节、情人节、圣诞节等
"""
for event in events:
    ics_content += "\n" + event + "\n"
ics_content += "END:VCALENDAR\n"
with open("china-holidays-extra.ics", "w", encoding="utf-8", newline="\r\n") as f:
    f.write(ics_content)
print("ics文件已生成")


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明IOS 中国节假日补充日历
喜欢 (0)
[感谢客官~]
分享 (0)
关于作者:
开心洋葱,开心洋葱头,水墨

您必须 登录 才能发表评论!

加载中……