我试图为所有平台制作一个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问题的解决方法吗?
答案 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)}";