Question

I'm creating an application to create .ics files using the iCal4j(1.0.3) api which works fine.However I'm running into a problem with the timezones. I've added the ZoneInfoOutlook(1.0.2) library and have been using it to create my .ics files. However, Outlook is not recognizing the standard timezones. For example, when I generate this:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID=America/New_York:20120808T020000
DTEND;TZID=America/New_York:20120808T180000
SUMMARY:NewYork Event
LOCATION:Manhattan
DESCRIPTION:This is a test Description
TZID:America/New_York
END:VEVENT
BEGIN:VTIMEZONE
TZID:America/New_York
TZURL:http://tzurl.org/zoneinfo-outlook/America/New_York
X-LIC-LOCATION:America/New_York
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR  

Outlook fails to recognize the timezone. After some experimentation, I found that after modifying the file slightly, changing America/New_York to Eastern Standard Time, Outlook read the timezones perfectly.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID="Eastern Standard Time":20120808T020000
DTEND;TZID="Eastern Standard Time":20120808T180000
SUMMARY:NewYork Event
LOCATION:Manhattan
DESCRIPTION:This is a test Description
TZID:Eastern Standard Time
END:VEVENT
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
X-LIC-LOCATION:Eastern Standard Time
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR

Judging this example, Outlook uses non-standard labeling for its timezones.
I'm currently testing against Microsoft Outlook 2010 (14.0.6117.5001) SP1.

Would anyone know of an iCal mod or some sort of work around to allow the timezones to be fully compatible with Microsoft Outlook?

Or even another api which will allow me to create Outlook-compatible .ics files?

Was it helpful?

Solution

Have you tried just quoting the existing TZID param (i.e. without changing it to "Eastern Standard Time")? For example:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID="America/New_York":20120808T020000
DTEND;TZID="America/New_York":20120808T180000
...

In ical4j we could potentially quote the identifier (say if the OUTLOOK_COMPATIBILITY hint was enabled), but it is a bit harder to actually change the identifier implicitly.

Although you could probably do it in your own code, i.e. retrieve the timezone from the registry, get the underlying VTimeZone object and replace the TZID parameter (but again may require an ical4j change to quote the TZID on output).

OTHER TIPS

I was finally able to get something similar working by "quoting" the TZID parameter, but enabling the OUTLOOK_COMPATIBILITY hint, as the author suggested, did not work. Instead I had to do this manually:

TzId tzid = new TzId("\"America/Vancouver\"");

Of course this feels more like a hack, than a real solution. Maybe Fortuna has a suggestion to get this working??

It works for me..Whenever i am generating an ical i default it to UTC. Outlook internally converts the UTC time in the ical to the user timezone. Tried even on Thunderbird and yahoo calendar.

timezones are not implicit in icalendar, you should make the name explicit by using VTIMEZONE component in your ics file; see rfc5545 § 3.6.5. Time Zone Component (timezone component)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top