2016-07-20 22 views
0

我试图为所有平台创建一个iCalendar文件,文件中的一个事件是指定每月第9个工作日的重复模式,如下面的内容:在iCalendar文件中指定一个办公时间的工作日

BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//Test//Calendar//EN 
X-PUBLISHED-TTL:PT1H 
X-WR-CALNAME:TestCalendar 
BEGIN:VEVENT 
UID:Test 
DTSTART:20160101 
DURATION:PT1D 
RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=9 
SUMMARY:The 9th work day. 
DESCRIPTION:This is the 9th day. 
END:VEVENT 
END:VCALENDAR 

此事件在iOS日历和Google日历上均可正常工作,但无法在Outlook日历上使用。

我发现这个link它说,Outlook日历只支持-1到4之间的BYSETPOS,可悲的是这几乎得到了我自己的实验的证实。

所以我想知道是否有任何人在将您的iCalendar文件导入Outlook时遇到同样的问题,或者是否有解决BYSETPOS问题的解决方法?

回答

0

我昨天做了一个解决方法。

由于我的iCalendar文件是由.NET Web Api托管的RESTFul调用创建的,而且我有不同种类的RRULE生成,为了保持这种情况处于相同的设计中,我选择根据此RRULE生成此RRULE到 DateTime.Now并为每个呼叫重新生成它:

private int GetTheWorkDay(int parameterX) 
     => this.GetDaysInMonth() 
      .Where(d => d.DayOfWeek != DayOfWeek.Saturday && 
        d.DayOfWeek != DayOfWeek.Sunday) 
      .OrderBy(d => d) 
      .ToArray()[parameterX - 1] 
      .Day 

    public string ParseSetting(int parameterX) 
     => $"FREQ=MONTHLY;BYMONTHDAY={this.GetTheWorkDay(parameterX)}"; 
相关问题