ValueError: Значения RRULE UNTIL должны быть указаны в UTC, когда DTSTART учитывает часовой пояс - PullRequest
0 голосов
/ 01 января 2019

Я пытался разобрать правила повторения, используя dateutil rrule пакета Python

Однако я получаю странную ошибку, несовместимую с тем, как я понимаю правила повторения

Ошибка:

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 голосов
/ 01 января 2019

Это может быть сбивающее с толку сообщение об ошибке, поскольку оно взято из спецификации 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 .

...