Подтвердить что ты не робот

Однодневные дневные встречи в файлах .ics

Я создаю файл ics с помощью ASP.NET для импорта праздника в Outlook 2007 и пытаюсь установить флаг "весь день". Это отлично работает в многодневных праздниках, но за отдельные дни он, похоже, не регистрируется, я просто получаю "праздничный день необычности", забронированный с полуночи до полуночи.

В соответствии с MSDN установка времени начала и окончания на 00:00 должна быть достаточной для этого. Я также пытался использовать флаги X-MICROSOFT-CDO-ALLDAYEVENT и X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT, но они, похоже, не имеют никакого эффекта.

Может ли кто-нибудь увидеть, где я ошибаюсь? Я включил образец вывода ниже.

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
4b9b3361

Ответ 1

нашел ответ. Чтобы сделать мероприятие на весь день, вам нужно сделать встречу в полночь на следующий день.

Ответ 2

Вышеуказанный комментарий RE: полночь на следующий день не работает для меня в Apple iCal. Чтобы обойти это, в каждом разделе BEGIN: VEVENT я выводил даты следующим образом:

DTSTART;VALUE=DATE:20100101
DTEND;VALUE=DATE:20100101

Я не знаю, нужны ли еще теги Microsoft, хотя?

Ответ 3

@IceCool прав - просто опустить DTEND недостаточно... это будет зависеть от типа данных DTSTART, работает ли это.

Спектр говорит, что если DTSTART имеет тип данных DATE, и нет DTEND, то событие заканчивается в конце дня его начала. Но если DTSTART имеет полный тип данных DATE-TIME, и нет DTEND, то он заканчивается в то же время, когда он начинается.

В разделе 3.6.1 RFC 5545 (http://tools.ietf.org/html/rfc5545#page-54):

В случаях, когда компонент календаря "VEVENT" указывает свойство "DTSTART" с типом значения DATE, но не имеет свойства "DTEND" или "DURATION", продолжительность события принимается за один день. Для случаев, когда компонент календаря "VEVENT" указывает свойство "DTSTART" с типом значения DATE-TIME, но не имеет свойства "DTEND", событие заканчивается на ту же дату и время календаря, что и свойство "DTSTART" .

Итак, результат заключается в том, чтобы получить событие за весь день, этого недостаточно:

DTSTART:20100101T000000

Это не работает, потому что тип данных DATE-TIME, и поэтому конец события совпадает с началом. Чтобы сделать событие в течение всего дня, вам нужно либо добавить явный DTEND (также тип DATE-TIME):

DTSTART:20100101T000000
DTEND:20100102T000000

или используйте тип данных DATE, а затем нет необходимости в DTEND:

DTSTART;VALUE=DATE:20100101

Ответ 4

Оставив это здесь для кого-то другого, Googling. У меня были проблемы с тем же, сочетание всех дневных событий и половины дней, особенно в Календаре Google.

Моя проблема была связана с загрузкой файла ICS. звучит глупо, но заголовок, который принудительно загрузил, не позволил календарю Google правильно разобрать все дневные события. Поток в браузер имел лучшие результаты. Пример вывода здесь. (используйте VALUE = DATE) для одиночных событий в течение всего дня.

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

Ответ 5

Не уверен в MSDN, но, согласно последней спецификации, однодневное мероприятие на целый день начинается с 1 дня и заканчивается на следующем (не полночь, которая звучит как конец дня, но предполагается, что она 00:00, т.е. начало дня, похоже, я полагаю)

В последнем спецификаторе RFC 5545, если у вас нет даты окончания или end = start, то это своего рода юбилей - не однодневное мероприятие.

Если ваши файлы ics должны использоваться в другом месте или распространяться дальше, тогда стоит попробовать это правильно.

Примечание об этом здесь: http://icalevents.com/1778-all-day-events-adding-a-day-or-not/

Ответ 6

Я знаю, что я очень опаздываю на вечеринку, но в соответствии с исходным RFC, событие в течение всего дня определяется DTSTART с нет DTEND. Это работает для меня в Outlook 2007 и Google.