首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RFC 5545日复发的麻烦

RFC 5545日复发的麻烦
EN

Stack Overflow用户
提问于 2020-03-12 17:29:59
回答 1查看 611关注 0票数 1

我看到一天一天的错误行为(例如,每周二和周四)反复出现的模式。

假设我在太平洋时间9p (2100 H)从周四3/12开始,每周二和周四重复一次。太平洋时间是UTC-0700,所以活动的开始日期是0400小时,第二天凌晨3/13-4点。

生成我的递归时,它们接受原始事件的开始时间,而不是日期。所以我的递归是在周二和周四0400 h生成的,在周一和周三转换为9pPT。

我尝试过在本地(太平洋)时间创建事件并指定一个TZ-ID,但这似乎没有帮助。

有办法解释这件事吗?我不想试图推断是否会出现问题,并动态重写递归模式,因为A)似乎非常容易出错,而B)将使编辑递归模式的接口也变得非常具有挑战性。

编辑:

考虑一下这个RRULE:

代码语言:javascript
复制
DTSTART:20200411T013000Z
RRULE:FREQ=WEEKLY;UNTIL=20200501T030000Z;BYDAY=FR

它创建于4月10日星期五下午6:30开始,每周五重复一次。

当转换为世界协调时,这意味着它的开始日期为1:30a在4月11日。

问题是,BY_DAY=FR正在强迫所有的子事件在周五创建,启动时间为1:30a,这意味着它们将在周四晚上的山区时间开始。

我不认为这是一个代码问题,我认为这是一个BY_DAY重复规则的问题,在UTC午夜之后引发问题。

另外,请注意,这是一个例子。显然,在这种情况下,不需要BY_DAY字段。但如果我想在周三和周五重复,我就需要它,这就是我遇到问题的地方。

EN

回答 1

Stack Overflow用户

发布于 2020-04-12 22:54:42

你的问题中没有太多的信息,但让我试着帮助你。您正在讨论iCal格式,您可能正在使用Django来生成iCal事件。建议将所有与日期和时间相关的数据存储在Django数据库中的UTC中,参见https://docs.djangoproject.com/en/3.0/topics/i18n/timezones/#overview。您可以使用Django提供的标准utils函数计算其他时区中的时间和日期,请参阅https://docs.djangoproject.com/en/3.0/ref/utils/#module-django.utils.timezone。因此,在Django程序中拥有正确的时间不应该是一个问题。

据我所知,iCal能够在UTC和其他时区中定义事件。因此,开始日期为2020年3月13日、开始时间为04:00的每周活动应包括下列条目:

代码语言:javascript
复制
DTSTART:20200313T040000Z
RRULE:FREQ=WEEKLY

有关更多示例,请参见https://icalendar.org/iCalendar-RFC-5545/4-icalendar-object-examples.html。希望这能让你走上正轨。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60659129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档