gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:44:55 25 4
gpt4 key购买 nike

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

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


然而,在 3.8.5.3 Recurrence Rule段,直到始终以 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 .如果事件是全天事件,则 UNTIL日期也必须指定为全天日期,否则 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 中指定的“ float 时间” (表格#1),其中说:

FORM #1: DATE WITH LOCAL TIME

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

19980118T230000

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


这也包括 VALUE=DATE日期。
DTSTART是 float 的,即不 anchor 定在任何特定时区, UNTIL value 不能是绝对时间,否则规则的实际结束时间将取决于您当前的时区。
如前所述,这不适用于 RRULE VTIMEZONE 的内部定义。
第 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的值对应于这些形式中的任何一种, UNTIL值必须以 UTC 时间指定。我认为这背后的原因是您不需要为 UNTIL 指定时区。 date 如果您使用“zulu”表示法(并且您不能假设您可以将 DTSTART 的时区用于 UNTIL )。
编辑
由于“ float 时间”在日历客户端中并不常见,您几乎看不到任何非 UTC UNTIL日期。在 Thunderbird/Lightning 中,您可以为事件明确选择“本地时间”,这会创建一个 float 事件。在这种情况下,你应该得到一个 UNTIL本地时间的值也是如此。

关于standards - iCalendar UNTIL 规则必须与 DTSTART 属性的类型相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34913427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com