我正在使用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/

10-14 06:51