Calendar: Recurring DATE value can match DTSTART and DTEND
I set in Evolution 3.36.5 the primary time zone to Australia/Sydney and create this event:
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
VERSION:2.0
BEGIN:VEVENT
UID:187b2e1f671b6d1526707bff9fdf3c5e6a4d3260
DTSTAMP:20200903T080334Z
DTSTART;TZID=Australia/Sydney:20200906T223000
DTEND;TZID=Australia/Sydney:20200906T230000
SEQUENCE:3
SUMMARY:EEEEEEE
TRANSP:OPAQUE
CLASS:PUBLIC
CREATED:20200905T191326Z
LAST-MODIFIED:20200905T191549Z
RRULE;X-EVOLUTION-ENDDATE=20200913T123000Z:FREQ=WEEKLY;COUNT=2;BYDAY=SU
END:VEVENT
END:VCALENDAR
I change in Evolution the primary time zone to Europe/Sofia. I open the event, set 'All day event', and tell Evolution to update all instances. Evolution stores:
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
VERSION:2.0
BEGIN:VEVENT
UID:187b2e1f671b6d1526707bff9fdf3c5e6a4d3260
DTSTAMP:20200903T080334Z
DTSTART;VALUE=DATE:20200906
DTEND;VALUE=DATE:20200906
SEQUENCE:4
SUMMARY:EEEEEEE
TRANSP:OPAQUE
CLASS:PUBLIC
CREATED:20200905T191326Z
LAST-MODIFIED:20200905T191835Z
RRULE;X-EVOLUTION-ENDDATE=20200913T000000Z:FREQ=WEEKLY;COUNT=2;BYDAY=SU
END:VEVENT
END:VCALENDAR
If I create a single one-day-long event in Evolution, it stores:
BEGIN:VCALENDAR
CALSCALE:GREGORIAN
PRODID:-//Ximian//NONSGML Evolution Calendar//EN
VERSION:2.0
BEGIN:VEVENT
UID:fd3558d6294af0286c0fa69c505beac38dfd9396
DTSTAMP:20200903T080334Z
DTSTART;VALUE=DATE:20200906
DTEND;VALUE=DATE:20200907
SEQUENCE:2
SUMMARY:GGGGGG
TRANSP:OPAQUE
CLASS:PUBLIC
CREATED:20200905T192025Z
LAST-MODIFIED:20200905T192025Z
END:VEVENT
END:VCALENDAR
As can be seen, in GGGGGG DTSTART and DTEND have different values, but in EEEEEEE/SEQUENCE:4 DTSTART and DTEND have the same value.
https://tools.ietf.org/html/rfc5545#page-54 says:
The "DTSTART" property for a "VEVENT" specifies the inclusive start of the event. For recurring events, it also specifies the very first instance in the recurrence set. The "DTEND" property for a "VEVENT" calendar component specifies the non-inclusive end of the event. For cases where a "VEVENT" calendar component specifies a "DTSTART" property with a DATE value type but no "DTEND" nor "DURATION" property, the event's duration is taken to be one day.
⇒ DTSTART is inclusive, DTEND is non-inclusive, so DTSTART cannot be the same as DTEND.
• If DTEND is present, ensure it is different from DTSTART.