Google Calendar自定义事件:排除节假日的实现求助
问题说明
我给Google Calendar做了个自定义事件,用来每月倒数第二个工作日提醒我,现有iCalendar代码如下:
BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-2;BYDAY=MO,TU,WE,TH,FR SUMMARY:Nómina DESCRIPTION: DTSTART:20230801T080000 DTEND:20230801T080000 SEQUENCE:0 END:VEVENT END:VCALENDAR
现在想排除这个规则命中的节假日,知道没法直接指定节假日集合,打算通过时间区间间接实现,但不知道怎么操作,求帮忙。
解决方案
方法1:用EXDATE逐个排除节假日(最实用)
这是iCalendar标准的排除指定日期的方式,Google Calendar完全支持。就在VEVENT块里加EXDATE行就行,每个节假日对应一个日期:
比如要排除2024年1月20日的节假日,加这行:
EXDATE;VALUE=DATE:20240120
多个节假日用逗号分开:
EXDATE;VALUE=DATE:20240120,20240501,20241225
修改后的完整代码示例:
BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-2;BYDAY=MO,TU,WE,TH,FR SUMMARY:Nómina DESCRIPTION: DTSTART:20230801T080000 DTEND:20230801T080000 EXDATE;VALUE=DATE:20240120,20240501,20241225 SEQUENCE:0 END:VEVENT END:VCALENDAR
方法2:按时间区间拆分规则(对应你说的区间思路)
如果某个节假日刚好是规则算出的倒数第二个工作日,你可以针对这个月份单独调整:比如1月20日是节假日,原本的倒数第二个工作日是20日,要改成19日的话,可以给1月单独设置事件时间,同时排除该月的原规则:
BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT # 基础规则:排除1月的所有月份 RRULE:FREQ=MONTHLY;INTERVAL=1;BYSETPOS=-2;BYDAY=MO,TU,WE,TH,FR;EXMONTH=1 # 1月单独指定提醒时间 RDATE;VALUE=DATE-TIME:20240119T080000 SUMMARY:Nómina DESCRIPTION: DTSTART:20230801T080000 DTEND:20230801T080000 SEQUENCE:0 END:VEVENT END:VCALENDAR
不过这种方式要手动维护每个特殊月份,不如EXDATE省心。
注意点
EXDATE用VALUE=DATE是排除全天,要是你的事件是特定时间,也可以写具体时间,比如EXDATE:20240120T080000- Google Calendar会自动识别
EXDATE,跳过对应日期的提醒 - 要是节假日每年固定(比如元旦),也可以用规则组合排除,但操作起来麻烦,不如每年更新一次
EXDATE列表简单
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

