在.ics文件中单日全天约会

wef*_*fwe 30 icalendar calendar

我正在使用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
Run Code Online (Sandbox Code Playgroud)

Mar*_*eck 39

@IceCool是对的 - 简单地省略DTEND是不够的......它将取决于DTSTART是否有效的数据类型.

规范说如果DTSTART有一个DATE数据类型,并且没有,DTEND则事件在它开始的那天结束时结束.但是如果DTSTART有一个完整的DATE-TIME数据类型,并且没有DTEND那么它就会在它启动的同时完成.

它位于RFC 5545的第3.6.1节(http://tools.ietf.org/html/rfc5545#page-54)中:

对于"VEVENT"日历组件指定具有DATE值类型但没有"DTEND"或"DURATION"属性的"DTSTART"属性的情况,事件的持续时间为一天.对于"VEVENT"日历组件指定具有DATE-TIME值类型但没有"DTEND"属性的"DTSTART"属性的情况,事件在"DTSTART"属性指定的相同日历日期和时间结束.

所以,结果是,要获得一整天的活动,这还不够:

DTSTART:20100101T000000
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为数据类型是DATE-TIME,因此事件的结束与开始相同.要创建一整天活动,您需要添加一个显式DTEND(也是类型DATE-TIME):

DTSTART:20100101T000000
DTEND:20100102T000000
Run Code Online (Sandbox Code Playgroud)

或使用DATE数据类型,然后不需要DTEND:

DTSTART;VALUE=DATE:20100101
Run Code Online (Sandbox Code Playgroud)


Bee*_*son 23

以上评论RE:在Apple的iCal中对我不起作用的第二天午夜.为了解决这个问题,在每个BEGIN:VEVENT部分中,我输出日期如下:

DTSTART;VALUE=DATE:20100101
DTEND;VALUE=DATE:20100101
Run Code Online (Sandbox Code Playgroud)

我不知道你是否仍然需要微软的标签?!


wef*_*fwe 3

找到了答案。要举办全天活动,您需要在第二天的午夜结束预约。

  • 这在 Apple iCal 中也不起作用。您需要使用atomicguava建议的解决方案。`DTSTART:20100101` (8认同)