iCalendar 规范 RRULE 多次?
iCalendar Spec RRULE Multiple Times?
我正在开发一些与 Google 日历 API 交互的软件,我的用户可以利用的一项功能是为单个 [=16] 设置多个事件时间=](即 class 在某些日子里是 2-5,在其他日子里是 3-6)。
重复规则是否可以为不同的日子指定不同的时间,允许我创建一个重复事件而不是多个?
谢谢!
Is it possible for a recurrence rule to specify a different time for different days, allowing me to create one repeating event instead of multiple?
不,不是真的,但你可以用其他方法达到这个结果。
- 如果有规律,可以组合多个
RRULE
。例如,从星期一 2 点开始每隔几天重复一次,第二个从星期二 3 点开始每隔几天重复一次。因此合并后的结果将是星期一 2 点、星期二 3 点、星期三 2 点,依此类推。请注意,根据 RFC,您 不应 定义多个 RRULE
(请参阅
https://www.rfc-editor.org/rfc/rfc5545#section-3.8.5.3)
it SHOULD NOT be specified more than once.
The recurrence set generated with multiple "RRULE" properties is
undefined.
所以行为取决于实际实施,我不知道 Google 日历 API。不过,我知道的大多数图书馆都支持多个 RRULE
,所以你应该试一试。
- 同样,如果有模式,你也可以使用
BYSETPOS
。绕过这个有点复杂,但基本上您需要生成一组事件(例如,超过一周),然后挑选有效的事件。尝试这样的事情(为清楚起见多行):
DTSTART=20160711T140000
FREQ=WEEKLY
BYDAY=MO,TU,WE,TH,FR
BYHOUR=14,15
BYSETPOS=1,4,5,8,9
周一 2 点、周二 3 点、周三 2 点,依此类推。同样,你需要一个清晰的重复模式才能使这个工作正常。
- 如果没有模式,而您只想让某些日子有不同的时间,请将您的
RRULE
与 RDATE
和 EXDATE
结合起来以添加或删除特殊事件。
您可以在 Google 日历上使用多个 RRULE
,但我不推荐这样做。参见v3
API documentation——recurrence[]
。传递一个字符串数组。
虽然 Google 日历会尊重多个 RRULE
,但 Apple 日历目前只会使用一个。这意味着任何在 laptop/phone(从 Google 日历同步)上使用 Apple 日历的人都不会看到所有重复。
此外,即使 Google 日历会正确重复事件,UI 中使用的重复的书面描述只描述了一个 RRULE
。
例如。 “每周四,直到 2021 年 5 月 15 日”,而不是“每周二和周四,直到 2021 年 5 月 15 日”
我正在开发一些与 Google 日历 API 交互的软件,我的用户可以利用的一项功能是为单个 [=16] 设置多个事件时间=](即 class 在某些日子里是 2-5,在其他日子里是 3-6)。
重复规则是否可以为不同的日子指定不同的时间,允许我创建一个重复事件而不是多个?
谢谢!
Is it possible for a recurrence rule to specify a different time for different days, allowing me to create one repeating event instead of multiple?
不,不是真的,但你可以用其他方法达到这个结果。
- 如果有规律,可以组合多个
RRULE
。例如,从星期一 2 点开始每隔几天重复一次,第二个从星期二 3 点开始每隔几天重复一次。因此合并后的结果将是星期一 2 点、星期二 3 点、星期三 2 点,依此类推。请注意,根据 RFC,您 不应 定义多个RRULE
(请参阅 https://www.rfc-editor.org/rfc/rfc5545#section-3.8.5.3)
it SHOULD NOT be specified more than once. The recurrence set generated with multiple "RRULE" properties is undefined.
所以行为取决于实际实施,我不知道 Google 日历 API。不过,我知道的大多数图书馆都支持多个 RRULE
,所以你应该试一试。
- 同样,如果有模式,你也可以使用
BYSETPOS
。绕过这个有点复杂,但基本上您需要生成一组事件(例如,超过一周),然后挑选有效的事件。尝试这样的事情(为清楚起见多行):
DTSTART=20160711T140000 FREQ=WEEKLY BYDAY=MO,TU,WE,TH,FR BYHOUR=14,15 BYSETPOS=1,4,5,8,9
周一 2 点、周二 3 点、周三 2 点,依此类推。同样,你需要一个清晰的重复模式才能使这个工作正常。
- 如果没有模式,而您只想让某些日子有不同的时间,请将您的
RRULE
与RDATE
和EXDATE
结合起来以添加或删除特殊事件。
您可以在 Google 日历上使用多个 RRULE
,但我不推荐这样做。参见v3
API documentation——recurrence[]
。传递一个字符串数组。
虽然 Google 日历会尊重多个 RRULE
,但 Apple 日历目前只会使用一个。这意味着任何在 laptop/phone(从 Google 日历同步)上使用 Apple 日历的人都不会看到所有重复。
此外,即使 Google 日历会正确重复事件,UI 中使用的重复的书面描述只描述了一个 RRULE
。
例如。 “每周四,直到 2021 年 5 月 15 日”,而不是“每周二和周四,直到 2021 年 5 月 15 日”