Ответ 1
нашел ответ. Чтобы сделать мероприятие на весь день, вам нужно сделать встречу в полночь на следующий день.
Я создаю файл 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
нашел ответ. Чтобы сделать мероприятие на весь день, вам нужно сделать встречу в полночь на следующий день.
Вышеуказанный комментарий RE: полночь на следующий день не работает для меня в Apple iCal. Чтобы обойти это, в каждом разделе BEGIN: VEVENT я выводил даты следующим образом:
DTSTART;VALUE=DATE:20100101
DTEND;VALUE=DATE:20100101
Я не знаю, нужны ли еще теги Microsoft, хотя?
@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
Оставив это здесь для кого-то другого, 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
Не уверен в MSDN, но, согласно последней спецификации, однодневное мероприятие на целый день начинается с 1 дня и заканчивается на следующем (не полночь, которая звучит как конец дня, но предполагается, что она 00:00, т.е. начало дня, похоже, я полагаю)
В последнем спецификаторе RFC 5545, если у вас нет даты окончания или end = start, то это своего рода юбилей - не однодневное мероприятие.
Если ваши файлы ics должны использоваться в другом месте или распространяться дальше, тогда стоит попробовать это правильно.
Примечание об этом здесь: http://icalevents.com/1778-all-day-events-adding-a-day-or-not/
Я знаю, что я очень опаздываю на вечеринку, но в соответствии с исходным RFC, событие в течение всего дня определяется DTSTART с нет DTEND. Это работает для меня в Outlook 2007 и Google.