2016-07-20 19 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)}"; 
相關問題