My app outputs DURATION attributes instead of DTEND attributes, because it maps better onto what remind hands it, and I didn't want to have to do the annoying calendar math.
As I say in my comment on that part:
# It's convienient that RFC2445 defines DURATION, thus we
# don't need to calculate DTEND, with awkward figuring out
# crossing hours, days, months, year, etc. Instead we
# will let the iCalendar consuming application worry about it.
Well, according to the bug report I just got, it looks like both eGroupware and Sunbird get this wrong. Or maybe I get it wrong. I don't have time right now to look at it deeper, unless someone wants to spend a little money (that will change my priorites!)