iCalendar UNTIL 规则的类型必须与 DTSTART 属性 相同吗?

iCalendar UNTIL rule must be of the same type as DTSTART property?

iCalendar RFC 5545, section 3.3.10中,我看到如下UNTIL参数说明:

The value of the UNTIL rule part MUST have the same value type as the "DTSTART" property. Furthermore, if the "DTSTART" property is specified as a date with local time, then the UNTIL rule part MUST also be specified as a date with local time. If the "DTSTART" property is specified as a date with UTC time or a date with local time and time zone reference, then the UNTIL rule part MUST be specified as a date with UTC time.

然而,在 3.8.5.3 Recurrence Rule 段落中,UNTIL 总是以 UTC 指定,不管 DTSTART 属性:

   DTSTART;TZID=America/New_York:19970902T090000
   RRULE:FREQ=DAILY;UNTIL=19971224T000000Z

   DTSTART;TZID=America/New_York:19970902T090000
   RRULE:FREQ=WEEKLY;UNTIL=19971007T000000Z;WKST=SU;BYDAY=TU,TH

总共有5个这样的例子。

我还发现至少有 2 个 CalDAV 客户端(iOS 和 Mozilla Lightning)总是在 UTC 中提交 UNTIL 参数,而不管 DTSTART 属性。

UNTIL 必须始终使用 UTC 的唯一地方是 VTIMEZONE 中的 RRULE。还是我没有得到什么?

引用的段落分为三个部分:

第 1 部分

The value of the UNTIL rule part MUST have the same value type as the "DTSTART" property.

这是指值类型,即 VALUE=DATEVALUE=DATE-TIME。如果事件是 all-day 事件,则 UNTIL 日期也必须指定为 all-day 日期,否则 UNTIL 日期必须包含时间部分。

第 2 部分

Furthermore, if the "DTSTART" property is specified as a date with local time, then the UNTIL rule part MUST also be specified as a date with local time.

在此上下文中,“本地时间”表示 Section 3.3.5(表格 #1)中指定的“浮动时间”,其中表示:

FORM #1: DATE WITH LOCAL TIME

The date with local time form is simply a DATE-TIME value that does not contain the UTC designator nor does it reference a time zone. For example, the following represents January 18, 1998, at 11 PM:

19980118T230000

DATE-TIME values of this type are said to be "floating" and are not bound to any time zone in particular.

这还包括 VALUE=DATE 个日期。

如果 DTSTART 是浮动的,即不固定在任何特定时区,则 UNTIL 值不能是绝对时间,否则规则的实际结束时间将取决于您当前的时间时区。

如前所述,这不适用于 VTIMEZONE 定义中的 RRULE

第 3 部分

If the "DTSTART" property is specified as a date with UTC time or a date with local time and time zone reference, then the UNTIL rule part MUST be specified as a date with UTC time.

主要区别在于,这句话谈论的是绝对 DTSTART 时间,无论是 UTC 时间还是本地时间 以及时区参考 (如引用中示例)。

这是指 Section 3.3.5 的表格 #2 和表格 #3。如果 DTSTART 的值对应于这些形式中的任何一种,则必须以 UTC 时间指定 UNTIL 值。我认为这背后的原因是,如果您使用“zulu”表示法,则不需要为 UNTIL 日期指定时区(并且您不能假设可以使用 [=15] 的时区=] UNTIL).

编辑

由于“浮动时间”在日历客户端中并不常见,因此您几乎看不到任何 non-UTC UNTIL 日期。在 Thunderbird/Lightning 中,您可以明确地 select 事件的“本地时间”,这会创建一个浮动事件。在这种情况下,您也应该在当地时间获得 UNTIL 值。