如何找到每月最后一个星期三之后的星期五?

How to find a Friday after last Wednesday of month?

我应该使用什么 iCal RRULE 表达式来查找每月最后一个星期三之后的星期五?所以我需要 (RRULE:FREQ=MONTHLY;BYDAY=-1WE) + 2 天...

我同意 Evert 的观点,即使用单个 RRULE 是不可能的。

但是,您可以通过组合多个 RRULE 来实现。

这样您就可以将您的活动分成多个活动,每个活动都具有以下 RRULE 之一:

如果星期三是一个月的最后一天或倒数第二天,我们的星期五将是下个月的第 1 天或第 2 天

FREQ=MONTHLY;BYMONTHDAY=1,2;BYDAY=1FR

在有 31 天的月份中,最后一个星期三的最早日期是 25 日,因此下一个星期五将是 27-31 日之一:

FREQ=MONTHLY;BYMONTH=1,3,5,7,8,10,12;BYMONTHDAY=27,28,29,30,31;BYDAY=FR

在有 30 天的月份中,最后一个星期三的最早日期是 24 日,因此下一个星期五将是 26-30 日之一:

 FREQ=MONTHLY;BYMONTH=4,6,9,11;BYMONTHDAY=26,27,28,29,30;BYDAY=FR

2 月是一个棘手的月份,因为在非闰年,我们想要的星期五将在 24 日到 28 日之间,但在闰年中,它是在 25 日到 29 日之间。然而,在接下来的 50 年中,只有一个闰年是 2 月 24 日是星期五,即 2040 年(查看 FREQ=MONTHLY;BYMONTHDAY=24;BYMONTH=2;BYDAY=FR 的结果),因此以下 RRULE 在 2040 年之前都是正确的:

FREQ=MONTHLY;BYMONTH=2;BYMONTHDAY=24,25,26,27,28,29;BYDAY=FR

如果您担心闰年,请添加如下所示的 EXDATE,这样您就可以在接下来的 100 年内使用(如果您的开始日期有时间,请使用这些 DATE-TIME 值):

EXDATE;VALUE=DATE:20400224,20680224,20960224,21080224

如果您确定您的客户端支持多个 RRULE(在 RFC 5545 but still was perfectly valid in RFC 2445 中已被半心半意地弃用),您也可以将它们添加到单个事件中,但我不建议这样做。