我正在使用ASP.NET创建ics文件,以将假日导入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
最佳答案
@IceCool是正确的-仅省略DTEND
是不够的...它是否有效取决于DTSTART
的数据类型。
规范指出,如果DTSTART
具有DATE
数据类型,并且没有DTEND
,则事件将在事件开始的当天结束。但是,如果DTSTART
具有完整的DATE-TIME
数据类型,并且没有DTEND
,则它将在启动的同时完成。
在RFC 5545(http://tools.ietf.org/html/rfc5545#page-54)的3.6.1节中:
因此,结果是,要获得一整天的 Activity ,这还不够:
DTSTART:20100101T000000
由于数据类型为
DATE-TIME
,因此它不起作用,因此事件的结束与开始相同。要进行一整天的 Activity ,您需要添加一个明确的DTEND
(也是DATE-TIME
类型):DTSTART:20100101T000000
DTEND:20100102T000000
或使用
DATE
数据类型,则不需要DTEND
:DTSTART;VALUE=DATE:20100101
关于calendar - .ics文件中的全天约会,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1716237/