在iCalendar文件中指定办公时间的工作日

时间:2016-07-20 02:22:09

标签: outlook ms-office icalendar

我试图为所有平台制作一个iCalendar文件,文件中的一个事件是一个重复模式,指定每个月的第9个工作日,如下所示:

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日历只支持BYSETPOS介于-1到4之间,遗憾的是这几乎可以通过我自己的实验得到证实。

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

1 个答案:

答案 0 :(得分:0)

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

由于我的iCalendar文件是由.NET Web Api托管的RESTFul调用创建的,并且我有不同类型的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)}";