Calendar 为什么重复的几天不正确?

Calendar 为什么重复的几天不正确?,calendar,google-calendar-api,icalendar,Calendar,Google Calendar Api,Icalendar,这应该是一个2小时50分钟的活动,从太平洋标准时间周四晚上5点开始,每周重复一次。当导入google日历或Evolution时,第一次出现是正确的,但随后的几周会在周三发生 DTSTART:20170908T000000Z DTEND:20170908T025000Z RRULE:FREQ=WEEKLY;UNTIL=20171201T080000Z;BYDAY=TH 我的应用程序生成的其他事件在多天内发生,即BYDAY=TH,TU,因此简单地删除BYDAY并不能解决我的问题。您将事件的时区和显

这应该是一个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,因此下一个实例从20170914T0000000Z开始

当使用PST显示时区观看时,这一事件确实在周四晚上首次发生。但第二个实例,如上所述,是星期四UTC时间,所以是星期三PST时间

除了这个特殊问题,您还需要担心夏令时的更改。如果您的事件确实发生在PST时区,则如上所述,该事件将在DST转换发生后的11月发生时间变化

因此,使用UTC祖鲁时间表示重复事件几乎从来都不是一个好主意

您的事件应以当地时间和时区表示,即使用:

DTSTART;TZID="America/Los_Angeles":20170907T170000

你的预期结果是什么?你可能有时区问题。根据RFC-5545,Z表示UTC时间,但谷歌日历通常有一个与您的个人日历关联的时区。你的日历的时区是什么?设置齿轮图标>时区。@预期结果将是每周四重复一次事件。因为它的BYDAY=TH,所以第一个事件发生在周四的正确时间,随后重复的事件发生在周三@rianjs谷歌日历中的时区设置为-8。这个问题也发生在进化中,所以我假设我对规范有一些误解,而不是谷歌日历设置的问题。