1

我看到了按日(例如每周二和周四)重复模式的错误行为。

假设我有一个活动从太平洋时间 3 月 12 日星期四晚上 9 点(2100 小时)开始,每周二和周四重复。太平洋时间是UTC-0700,因此该活动的 UTC 开始日期为 0400h,即次日 3/13--4am。

当我的重复生成时,它们采用原始事件的开始时间,而不是日期。所以我的重复是在周二和周四的 0400h 生成的,这意味着周一和周三的 9p PT。

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

有没有办法解决这个问题?我不想试图推断是否会出现问题并即时重写重复模式,因为 A) 似乎很容易出错,并且 B) 将使编辑重复模式的界面也非常具有挑战性。

编辑:

考虑这个规则:

DTSTART:20200411T013000Z
RRULE:FREQ=WEEKLY;UNTIL=20200501T030000Z;BYDAY=FR

它创建于 4 月 10 日星期五太平洋时间下午 6:30 开始,并在每个星期五重复。

当转换为 UTC 时,这意味着它的开始日期为 4 月 11 日凌晨 1:30。

问题在于,这BY_DAY=FR迫使所有子事件在星期五开始创建,开始时间为 1:30a,这意味着它们从星期四晚上山区时间开始。

我认为这不是代码问题,我认为这是BY_DAY在开始时间在 UTC 午夜之后导致问题的重复规则问题。

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

4

1 回答 1

1

您的问题中没有很多信息,但让我尝试帮助您。您正在谈论 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 的每周事件应具有以下条目:

DTSTART:20200313T040000Z
RRULE:FREQ=WEEKLY

有关更多示例,请参阅https://icalendar.org/iCalendar-RFC-5545/4-icalendar-object-examples.html。希望这有助于您走上正轨。

于 2020-04-12T22:54:42.413 回答