RFC 2445, section 220.127.116.11:
18.104.22.168 Date/Time End
Property Name: DTEND
Purpose: This property specifies the date and time that a calendar
Value Type: The default value type is DATE-TIME. The value type can
be set to a DATE value type.
Property Parameters: Non-standard, value data type, time zone
identifier property parameters can be specified on this property.
Conformance: This property can be specified in "VEVENT" or
"VFREEBUSY" calendar components.
Description: Within the "VEVENT" calendar component, this property
defines the date and time by which the event ends. The value MUST be
later in time than the value of the "DTSTART" property.
According to the RFC, DTEND must be greater than DTSTART
. Which would
seem to imply that in order to get "all day" behavior for a single VEVENT,
DTEND = DTSTART + 1, not DTEND = DTSTART as it's currently interpreted.
The behavior of "DTEND = DTSTART + 1" being one day in length is supported
by Google Calendar, Microsoft Outlook, and Mozilla SunBird at the least (I
have not yet tested other calendards).
All of the iCal remote calendars I looked at that used VALUE=DATE also had
DTEND as being DTSTART + 1 to signify a single day.