Skip to content

UNTIL value stored in RRULE for event with DTSTART of type datetime is treated as a local time when it should be treated as UTC #51

Description

@twoodruff01

First time contributing to open source and I'm no expert on rfc5545 and all things ical, but I've been trying to use RRULEs for recurring events in an application and may have found a bug. I may be misreading the RFC too.

RFC has this to say:

The UNTIL rule part defines a DATE or DATE-TIME value that bounds
the recurrence rule in an inclusive manner.  If the value
specified by UNTIL is synchronized with the specified recurrence,
this DATE or DATE-TIME becomes the last instance of the
recurrence.  The value of the UNTIL rule part MUST have the same
value type as the "DTSTART" property.  Furthermore, if the
"DTSTART" property is specified as a date with local time, then
the UNTIL rule part MUST also be specified as a date with local
time.  If the "DTSTART" property is specified as a date with UTC
time or a date with local time and time zone reference, then the
UNTIL rule part MUST be specified as a date with UTC time.  In the
case of the "STANDARD" and "DAYLIGHT" sub-components the UNTIL
rule part MUST always be specified as a date with UTC time.  If
specified as a DATE-TIME value, then it MUST be specified in a UTC
time format.  If not present, and the COUNT rule part is also not
present, the "RRULE" is considered to repeat forever.

The relevant part is If the "DTSTART" property is specified as a date with UTC time or a date with local time and time zone reference, then the UNTIL rule part MUST be specified as a date with UTC time.

The issue I'm facing is that I'm storing zoned datetime dtstarts for my events, and so I'm following the spec and also storing their respective RRULE UNTILs in UTC but when I generate events from them usually the last event is missing because ical assumes the stored UNTIL value is in local datetime and not UTC.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions