By: Tom Sydney Kerckhove <syd@cs-syd.eu>
ical-recurrence: compare a UTC Until in the time zone of DTSTART @ The UNTIL rule part defines a DATE or DATE-TIME value that bounds the recurrence rule in an inclusive manner. @ @ 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. @ A zoned DTSTART is therefore bounded by an UNTIL in UTC, while the occurrences are generated as local times in that same zone. Comparing the two directly is out by the zone's offset: east of UTC the last instance is dropped, west of it an instance past the bound is kept. Unresolve the UNTIL into DTSTART's time zone before handing the rule to recurRecurrenceRuleDateTimeStarts. Moving the bound rather than the occurrences keeps recurRecurrenceRuleLocalTimes taking a bare LocalTime, which it has to, since it has no time zone to resolve with and lives in a module that ICal.Recurrence imports rather than the other way around. A UTC or floating DTSTART is untouched, because there the local times and the UNTIL are already in the same frame.
| Time to Start | Worker time | Duration | Time to finish | Idle | |
| Config | 19s | 1s | 1s | 21s | 19s |
| Eval | 22s | 14s | 14s | 37s | 1s |
| Build | 36s | 6m03s | 6m12s | 6m49s | 3m21s |
| Suite | 19s | 6m19s | 6m29s | 6m49s | 3m42s |