iOS:如何通过JSON API创建带排除日期的重复日历事件
处理日历重复事件的排除日期:创建与获取方案
一、优化创建重复事件的方案(替代先建再删)
你之前想先创建重复事件再删除指定实例的思路其实可以更高效——直接在创建事件时就把排除日期整合到重复规则里,避免额外的删除API调用。
针对每周周末重复但需排除部分周末的场景,在JSON请求体里需要配置两个核心字段:
- 定义基础重复规则(
recurrence):"recurrence": [ "RRULE:FREQ=WEEKLY;BYDAY=SA,SU" ] - 添加排除日期规则(
exdate),格式为EXDATE:YYYYMMDD,多日期用逗号分隔:"exdate": [ "EXDATE:20240518,20240519", "EXDATE:20240601,20240602" ]
这样创建的事件会自动跳过指定周末,无需后续删除操作。
二、通过API获取已存在事件的排除日期
要获取某个重复事件的排除日期,只需调用单事件查询API,返回的JSON数据里会包含exdate字段,直接解析即可。
对应你的Objective-C代码,可以这样处理:
// 假设已获取到事件的JSON字典dicEvent NSArray *exdateArray = dicEvent[@"exdate"]; if (exdateArray && exdateArray.count > 0) { for (NSString *exdateStr in exdateArray) { // 剥离EXDATE前缀,提取日期部分 NSString *datesPart = [exdateStr stringByReplacingOccurrencesOfString:@"EXDATE:" withString:@""]; NSArray *excludeDates = [datesPart componentsSeparatedByString:@","]; for (NSString *dateStr in excludeDates) { // 可根据需求将dateStr转换为NSDate或其他格式 NSLog(@"排除日期:%@", dateStr); } } }
这段代码会把返回的exdate字段拆分为单个日期字符串,方便后续业务处理。
补充:先建再删方案的排除日期获取逻辑
如果坚持先创建重复事件再删除指定实例,删除操作后,被移除的实例会自动加入事件的exdate列表,你依然可以用上面的方法获取这些排除日期。不过这种方式多了一次API调用,效率不如直接在创建时指定exdate。
内容的提问来源于stack exchange,提问作者blackcat1323
相关产品推荐
相关产品推荐

