为什么此 RRULE 的重复日期不正确?
Why are repeated days incorrect with this RRULE?
这应该是一个 2 小时 50 分钟的活动,从太平洋标准时间星期四晚上 5 点开始,每周重复一次。当导入到 google 日历或 Evolution 时,第一次出现是正确的,但随后的几周在星期三有事件。
DTSTART:20170908T000000Z
DTEND:20170908T025000Z
RRULE:FREQ=WEEKLY;UNTIL=20171201T080000Z;BYDAY=TH
我的应用程序生成的其他事件会在多天发生,即 BYDAY=TH,TU
,因此简单地删除 BYDAY
并不能解决我的问题。
您混淆了活动的时区和显示的时区。就重复计算而言,唯一重要的是您在 VEVENT 中声明的时区。这里您使用的是 UTC。所以:
一审时间是20170908,周五。从那里,您要求每周四重复一次。 20170908 之后的下一个星期四是 20170914,所以下一个实例从 20170914T000000Z 开始。
当以太平洋标准时间显示时区查看时,该事件确实在周四晚上首次出现。但是,如上计算,第二个实例是在星期四 UTC 时间,因此在星期三 PST 时间。
除了这个特殊问题,您还需要担心夏令时的变化。如果您的活动确实发生在 PST 时区,如上所述,该活动将在 DST 转换发生后的 11 月看到其时间更改。
因此,使用 UTC(祖鲁)时间来表达重复发生的事件几乎不是一个好主意。
您应该使用带有时区的本地时间来表示您的事件,即使用:
DTSTART;TZID="America/Los_Angeles":20170907T170000
这应该是一个 2 小时 50 分钟的活动,从太平洋标准时间星期四晚上 5 点开始,每周重复一次。当导入到 google 日历或 Evolution 时,第一次出现是正确的,但随后的几周在星期三有事件。
DTSTART:20170908T000000Z
DTEND:20170908T025000Z
RRULE:FREQ=WEEKLY;UNTIL=20171201T080000Z;BYDAY=TH
我的应用程序生成的其他事件会在多天发生,即 BYDAY=TH,TU
,因此简单地删除 BYDAY
并不能解决我的问题。
您混淆了活动的时区和显示的时区。就重复计算而言,唯一重要的是您在 VEVENT 中声明的时区。这里您使用的是 UTC。所以:
一审时间是20170908,周五。从那里,您要求每周四重复一次。 20170908 之后的下一个星期四是 20170914,所以下一个实例从 20170914T000000Z 开始。
当以太平洋标准时间显示时区查看时,该事件确实在周四晚上首次出现。但是,如上计算,第二个实例是在星期四 UTC 时间,因此在星期三 PST 时间。
除了这个特殊问题,您还需要担心夏令时的变化。如果您的活动确实发生在 PST 时区,如上所述,该活动将在 DST 转换发生后的 11 月看到其时间更改。
因此,使用 UTC(祖鲁)时间来表达重复发生的事件几乎不是一个好主意。
您应该使用带有时区的本地时间来表示您的事件,即使用:
DTSTART;TZID="America/Los_Angeles":20170907T170000