我一直在尝试使用 python 的 dateutil rrule 来解析重复规则包裹
但是,我遇到了一个与我理解重复规则的方式不一致的奇怪错误
错误是
ValueError:当 DTSTART 是时区感知时,必须以 UTC 指定 RRULE UNTIL 值
我调用的函数是
recurrence = "RRULE:FREQ=WEEKLY;UNTIL=20181206T075959Z;BYDAY=MO,WE,FR"
rule = rrulestr(重复, dtstart=datetime.now())
如果 until 的结构为 UNTIL=20181206T075959Z
,那不是 UTC 时间吗?为什么会出现此错误,什么是合适的解决方案?问题是,这适用于
“RRULE:FREQ=WEEKLY;UNTIL=20191206T075959;BYDAY=MO,WE,FR”
,我认为它不在 UTC 中,因为它缺少“Z”
这可能是一个令人困惑的错误消息,因为它取自 RFC 规范但并未真正解释上下文。
问题是 dtstart
和 UNTIL
必须都是原始的或时区感知的,规范实际上指定 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 上报告令人困惑的错误消息.
我是一名优秀的程序员,十分优秀!