【问题标题】:ValueError: RRULE UNTIL values must be specified in UTC when DTSTART is timezone-awareValueError:当 DTSTART 可识别时区时,必须以 UTC 指定 RRULE UNTIL 值
【发布时间】:2019-01-01 16:37:27
【问题描述】:

我一直在尝试使用 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 的结构为 UNTIL=20181206T075959Z,那不是 UTC 吗?为什么会出现这个错误,什么是合适的解决方案?问题是,这适用于

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

【问题讨论】:

    标签: python python-dateutil rrule


    【解决方案1】:

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

    问题在于dtstartUNTIL 必须要么是幼稚的要么是时区感知的,并且规范实际上指定UNTIL 在这种情况下必须是UTC。

    要修复您的代码,您只需让dtstart timezone-aware:

    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 上报告令人困惑的错误消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2016-04-01
      • 2021-03-16
      • 1970-01-01
      • 2019-12-23
      • 2018-11-19
      • 1970-01-01
      相关资源
      最近更新 更多