Ok, I've made some progress on this, and also uncovered another bug.
When ical_dezonify() encounters a timestamp that is not UTC but has no
timezone property, it now converts from the default timezone to UTC.
Right now the default timezone is hardcoded as "America/New_York" but I
did write the code to convert the timezone name to an actual ical
timezone.
To do:
1. Figure out how to reliably obtain the name of the current time zone.
If anyone could help with this it would be appreciated. I can tell you
that on Red Hat Linux it's stored in /etc/sysconfig/clock as one of the
variables. Obviously that is not portable.
2. Fix a bug I encountered: for some reason it's not storing the
converted timestamps back into the data structure properly. I've added
some log messages that display the timestamp using
icaltime_as_ical_string() before and after the conversion, and therefore I
know that the conversion is happening properly.
Unfortunately this could mean that I incorrectly pointed to client
problems *some* of the times that people reported timezone issues. When
it's fixed I will have to ask everyone to try again. It did work the
right way when I tested it though. I guess not all ical data format
generators are created equal.