【问题标题】:RRULE for the weekend including the first sunday of a month周末的 RRULE,包括一个月的第一个星期日
【发布时间】:2018-09-12 00:24:18
【问题描述】:

我们每年都会在周末(Fr-Su)举办活动,其中包括 6 月的第一个星期日。我将如何创建一个表示这三天(全天事件)的 iCalendar 事件

为第一个星期日创建规则很容易。但是对于周六和周五,我没有成功创建一个倒数的规则(RFC 5545INTERVALCOUNT 必须是正数)。而且我想不出从周五开始的不同表达方式- 可能是五月的最后一个星期五,也可能是六月的第一个星期五。

【问题讨论】:

  • 你在使用 Python 的 rrule 模块吗?
  • 6 月的第一个星期日制定一个规则,然后简单地倒数 2 天以开始活动不是更容易吗?
  • @rlanvin 如果我知道怎么做,我会的。想法?
  • 对不起,我的意思是用脚本(Python 或其他)倒数。目前我没有看到纯粹使用 RRULE 的方法。
  • 我问了一个very similar question (Friday before first Saturday) 这是可以解决的。我想知道接受(仅)是否会适应您的情况。

标签: icalendar rrule


【解决方案1】:

在这方面缺乏 RFC 5545 中的 RRRULE 规范。 INTERVALCOUNT 值用于重复事件,而不是事件本身。在尝试将美国日“黑色星期五”定义为 11 月第四个星期四之后的第二天(感恩节后的星期五)时,我遇到了类似的问题。 11 月的第 4 个星期五可能发生在第 4 个星期四之后的第二天或前一周。我没有找到针对这种情况制定 RRULE 的方法。

我相信您需要单独对事件进行编码,而不是使用重复规则。

【讨论】:

  • 等等什么?黑色星期五是 11 月的第四个星期四之后的第二天(所以是 11 月的第四个星期五),它如何/何时会发生在前一周?
  • 如果该月的第一个星期五出现在星期五,则该月的第四个星期五将出现在该月第四个星期四的前一周。发生这种情况的月份请参见 2018 年 6 月。
【解决方案2】:

RRULE:FREQ=YEARLY;BYDAY=FR;BYMONTH=5,6;BYSETPOS=2;BYMONTHDAY=-2,-1,1,2,3,4,5,6,7' 似乎可以解决问题.

How can I write an ICS file for the Friday before the first Saturday of the month? 引导我走上正轨:使用“BYMONTHDAY”,我可以从月底开始倒数。

下个月第一个星期日之前的星期五可以是上个月的最后一天或倒数第二天,也可以是该月的第 5 天。如果我包括 5 月和 6 月,我将得到一个包含这一天的集合。 'BYSETPOS' 允许我选择找到的第二个星期五。为了始终让集合中的第二个成为我想要的日期,我将每月的第 6 天和第 7 天包括在内,这让我在 5 月的第一个星期五有一个稳定的时间。无论如何,“BYSETPOS”会丢弃 6 月可能匹配的其他星期五。

延长到星期六很简单,6 月的第一个星期日是微不足道的。

我用 rrule.js 开发了规则

https://jakubroztocil.github.io/rrule/#/rfc/RRULE:BYDAY=FR;BYMONTH=5,6;BYSETPOS=2;BYMONTHDAY=-2,-1,1,2,3,4,5,6,7

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多