VTIMEZONE block in ICS file publishes DSTART in wrong timezone
A lot of great work went into fixing our ICS timezone support in #2887 (closed)!
But, I think there is still one small problem with timezone support.
I'm testing with the ICS file generated by the Montreal Developer Training on February 26th (https://civicrm.org/civicrm/event/ical?reset=1&id=1745). The event is supposed to start at 9:00 AM America/New_York time.
I'm using Thunderbird. I have my Thunderbird timezone set to America/Los_Angeles. It's important to set your calendar timezone to a timezone that does not match the event time zone to replicate the problem.
When I import the ICS file, my calendar shows it as starting at 1:00 am America/Los_Angeles time, which would be 4:00 am America/New_York time. The reason it's off is because Thunderbird percieves the correct time to be 9:00 am UTC rather than 9:00 am America/New_York.
Here are the relevant parts of the ICS file.
First, the timezone is defined:
BEGIN:VTIMEZONE
TZID:America/New_York
BEGIN:STANDARD
TZOFFSETFROM:-0500
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:20240226T140000
END:STANDARD
END:VTIMEZONE
Then, the event date start is defined:
TSTAMP;TZID=America/New_York:20240226T090000
DTSTART;TZID=America/New_York:20240226T090000
DTEND;TZID=America/New_York:20240227T170000
The problem is with the timezone definition, specifically:
DTSTART:20240226T140000
This represents the start time in UTC. But, the standards says:
The mandatory "DTSTART" property gives the effective onset date and local time for the time zone sub-component definition. "DTSTART" in this usage MUST be specified as a date with a local time value.
In other words, it should be the local time, not UTC. In this case: DTSTART:20240226T090000
.
Making that adjustment causes it to import properly in Thunderbird.
I'm happy to work on this, but would love some feedback to make sure I'm not offbase on anything. I know @justinfreeman did a lot of work on this in #2887 (closed) so maybe has some thoughts.