Graham Gough got in contact to say that
Data::ICal::DateTime was barfing on an export of his Palm pilot calendar to .ics and saying
Couldn't find end *or* duration:
BEGIN:VEVENT
DESCRIPTION:Check 2341 assessment\n##F@@@@@@@@@@@@@@@@\n
DTSTAMP:20051003T080457Z
DTSTART;VALUE=DATE:20051003
SUMMARY:Check 2341 assessment
UID:palm-datebook-007f9a18-000076ef-Graham Gough@rpc204
END:VEVENT
Which is right because there's no DTEND. Except it turns out the evnt was a floating event - as per section 6.2 of
rfc2445 - recommended practices :
A calendar entry with a "DTSTART" property but no "DTEND"
property does not take up any time. It is intended to represent
an event that is associated with a given calendar date and time
of day, such as an anniversary. Since the event does not take up
any time, it MUST NOT be used to record busy time no matter what
the value for the "TRANSP" property.
At first I did some sort of horrific hack that turned a floating event into an 'all day' event but that was, well, bogus. When I got back $business trip abroad I ripped it out and did the sensible, cleaner, correct option of having a floating() method and getting rid of the requirement to have a DTSTART and either a DURATION or DTEND.