ValueError:当DTSTART支持时区时,必须在UTC中指定RRULE UNTIL值

时间:2019-01-01 16:37:28

标签: python python-dateutil rrule

我一直在尝试使用python的dateutil rrule包来解析重复规则

但是,我收到了一个奇怪的错误,与我理解重复规则的方式不一致

错误是

ValueError: RRULE UNTIL values must be specified in UTC when DTSTART is timezone-aware

我正在调用的函数是

recurrence = "RRULE:FREQ=WEEKLY;UNTIL=20181206T075959Z;BYDAY=MO,WE,FR" rule = rrulestr(recurrence, dtstart=datetime.now())

如果〜的结构为UNTIL=20181206T075959Z,在UTC中不是吗?为什么会出现此错误,什么是合适的解决方案?事实是,这适用于

"RRULE:FREQ=WEEKLY;UNTIL=20191206T075959;BYDAY=MO,WE,FR",我认为它不在UTC中,因为它缺少'Z'

1 个答案:

答案 0 :(得分:2)

这可能是一个令人困惑的错误消息,因为它来自RFC规范,但并没有真正解释上下文。

问题在于,dtstartUNTIL必须既是天真的,也必须是时区感知的,并且规范实际上规定,在这种情况下,UNTIL必须是UTC。

要修复代码,您只需使dtstart时区感知:

from dateutil.tz import UTC
recurrence = "RRULE:FREQ=WEEKLY;UNTIL=20181206T075959Z;BYDAY=MO,WE,FR"
rule = rrulestr(recurrence, dtstart=datetime.now(UTC))

随时在dateutil's issue tracker上报告令人困惑的错误消息。