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=DATE
与 VALUE=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
值。
在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=DATE
与 VALUE=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
值。