John Poelstra has done great work for getting a schedule in place for Fedora. Part of that work is producing .ical files for the various different task lists. See http://poelstra.fedorapeople.org/schedu
Given my capacity to forget dates, I wanted to import the .ical file for Release Engineering tasks into my google calendar. This turned out to be far harder than it needed to be, mostly because of how .ical is a fairly loose standard and no two producers/consumers shall agree. Every time I attempted to import or the .ical file I wound up with odd timezone issues and events spanning multiple days. Turns out that Zimbra reads X-MICROSOFT-CDO-ALLDAYEVENT:TRUE while google doesn't, so google was going by the timestamps on the events, offsetting the UTC for my Pacific timezone and generally making a mess of it.
Of course, I couldn't just find what Google wanted to see, searching for terms that involve google is not exactly easy. What I wound up doing was creating a test calendar in google, adding an event that was an all day event, exporting that as a .ical file and reading what it wrote. BINGO! Seems that in order to accomplish an all day event in google calendar parlance, you just have DTSTART and DTEND be just dates, without any time attached. Once I had that info, it was easy to sed the .ics file from John to strip the time parts out of the events (since all the events are listed as all day events) and then I had an .ics file that imported nicely into google. John says he'll look at doing the sed himself when creating the .ics files since he already has to post-process them out of TaskJuggler.
1) When testing importing events to your google calendar, do create a scratch calendar to test with. Deleting 40 some odd events by hand was not fun :/
2) When in doubt of an expected format, generate said format from the tool itself to get an idea of what it would like.
3) TaskJuggler can do neat things, but ZOMG does it have a learning curve. I wasted two hours or so trying to figure out how times and dates were set thinking that the .ics was getting generated incorrectly, and I still don't really know how it does things. I just backed away slowly and went on with "ok, just fix the .ics manually after the fact" route.