calendar - icalshare - Citas de un día durante todo el día en archivos.ics
icalshare com calendars (6)
Estoy creando un archivo ics utilizando ASP.NET para importar vacaciones en Outlook 2007 y tratando de establecer el indicador de evento de todo el día. Esto funciona bien en días festivos de varios días, pero para días solos, parece que no se está registrando, solo tengo un ''día festivo de singularidades'' reservado desde la medianoche hasta la medianoche.
De acuerdo con MSDN , establecer las horas de inicio y finalización en 00:00 debería ser suficiente para hacer esto. También intenté usar las banderas X-MICROSOFT-CDO-ALLDAYEVENT y X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT, pero no parecen tener ningún efecto.
¿Alguien puede ver dónde me estoy equivocando? He incluido la salida de muestra a continuación.
BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VEVENT
CLASS:PUBLIC
DESCRIPTION:HOLIDAY/n
DTEND;VALUE=DATE:20090727
DTSTAMP:20091111T000000Z
DTSTART;VALUE=DATE:20090727
LAST-MODIFIED:20091111T000000Z
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=en-gb:HOLIDAY
TRANSP:OPAQUE
X-ALT-DESC;FMTTYPE=text/html:HOLIDAY
X-MICROSOFT-CDO-BUSYSTATUS:OOF
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-ALLOWEXTERNCHECK:TRUE
X-MS-OLK-CONFTYPE:0
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
END:VEVENT
END:VCALENDAR
encontró la respuesta. para hacer un evento de todo el día, necesita hacer que la cita termine a la medianoche del día siguiente.
El comentario anterior RE: la medianoche del día siguiente no funcionó para mí en el iCal de Apple. Para evitar esto, en cada una de las secciones BEGIN: VEVENT, he generado las fechas de la siguiente manera:
DTSTART;VALUE=DATE:20100101
DTEND;VALUE=DATE:20100101
¡No sé si aún necesitas las etiquetas de Microsoft!
No estoy seguro acerca de MSDN, pero de acuerdo con la última especificación ical, un solo día de todo el evento comienza en 1 día y termina en el siguiente (no a medianoche, que suena como al final del día, pero se supone que es 00:00, es decir, inicio de día, similar, supongo)
En la última especificación RFC 5545, si uno no tiene fecha de finalización o final = inicio, entonces es un aniversario, no un evento de un día durante todo el día.
Si sus archivos ics se van a utilizar en otro lugar o se propocionarán más, entonces vale la pena tratar de hacerlo bien.
Una nota sobre esto aquí: http://icalevents.com/1778-all-day-events-adding-a-day-or-not/
Sé que llego muy tarde a la fiesta, pero de acuerdo con el RFC original , un evento de todo el día está especificado por un DTSTART sin DTEND. Esto funciona para mí en Outlook 2007 y Google.
Dejando esto aquí para cualquier otra persona en Google. Tuve problemas con la misma combinación de eventos de todo el día y medios días, particularmente en Google Calendar.
Mi problema estaba relacionado con la forma en que se descargaba el archivo ICS. suena tonto, pero un encabezado que forzó la descarga impidió que el calendario de Google analizara correctamente todos los eventos del día. La transmisión al navegador tuvo mejores resultados. Muestra de salida aquí. (use VALOR = FECHA) para eventos únicos de todo el día.
BEGIN:VEVENT
UID:1248
DTSTART;VALUE=DATE:20151218
DTEND;VALUE=DATE:20151219
DTSTAMP:20151218T080000Z
CREATED:20151212T200409Z
DESCRIPTION:examplea
LAST-MODIFIED:20151218T080000Z
LOCATION:
SUMMARY:example summary
SEQUENCE:0
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
UID:1249
DTSTART;VALUE=DATE:20151217
DTEND;VALUE=DATE:20151218
DTSTAMP:20151217T080000Z
CREATED:20151212T200409Z
DESCRIPTION:example1
LAST-MODIFIED:20151217T080000Z
LOCATION:
SUMMARY:Example
SEQUENCE:0
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
@ IceCool tiene razón, simplemente omitir el DTEND
no es suficiente ... dependerá del tipo de datos de DTSTART
si eso funciona.
La especificación dice que si DTSTART
tiene un tipo de datos DATE
y no hay un DTEND
, el evento finaliza al final del día en que comienza. Pero si DTSTART
tiene un tipo de datos de DATE-TIME
completo, y no hay ningún tipo de DTEND
entonces termina al mismo tiempo que comienza.
Está en la sección 3.6.1 de RFC 5545 ( http://tools.ietf.org/html/rfc5545#page-54 ):
Para los casos en que un componente de calendario "VEVENT" especifica una propiedad "DTSTART" con un tipo de valor DATE pero no una propiedad "DTEND" ni "DURATION", la duración del evento se toma como un día. Para los casos en que un componente de calendario "VEVENT" especifica una propiedad "DTSTART" con un tipo de valor DATE-TIME pero no una propiedad "DTEND", el evento finaliza en la misma fecha y hora del día especificadas por la propiedad "DTSTART".
Entonces, el resultado es que para obtener un evento de todo el día, esto no es suficiente:
DTSTART:20100101T000000
No funciona porque el tipo de datos es DATE-TIME
, por lo que el final del evento es el mismo que el inicio. Para hacer un evento de todo el día, debe agregar un DTEND
explícito (también de tipo DATE-TIME
):
DTSTART:20100101T000000
DTEND:20100102T000000
o use el tipo de datos DATE
, y luego no hay necesidad de un DTEND
:
DTSTART;VALUE=DATE:20100101