You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ical.Net重复日程事件各次实例的start开始日期如何获取?

问题原因

你当前代码中调用了.Select(o => o.Source),Source属性指向的是原始的日历事件模板对象,所有重复实例共享同一个模板对象,因此你只能拿到模板的固定起始时间,无法获取每个重复实例的实际时间。

正确取值方式

GetOccurrences()返回的每个Occurrence对象本身就存储了当前重复实例的专属时间信息,直接通过Occurrence.Period.Start即可获取该实例的实际开始时间,对应结束时间为Occurrence.Period.End。

修正后的代码示例
var now = DateTime.Parse("2021-09-16T10:00:00");
var later = now.AddHours(1);

//Repeat daily for 5 days
var rrule = new RecurrencePattern(FrequencyType.Daily, 1) { Count = 5 };

var e = new CalendarEvent
{
    Start = new CalDateTime(now),
    End = new CalDateTime(later),
    RecurrenceRules = new List<RecurrencePattern> { rrule },
};

var calendar = new Calendar();
calendar.Events.Add(e);

var startSearch = new CalDateTime(DateTime.Parse("2021-09-16T00:00:00"));
var endSearch = new CalDateTime(DateTime.Parse("2021-09-21T23:59:59"));
var occurrences = calendar.GetOccurrences(startSearch, endSearch)
    .Select(o => new 
    {
        // 每个重复实例的实际开始时间,按需可直接转DateTime类型
        InstanceStartTime = o.Period.Start.AsDateTime,
        // 若需要原事件的其他属性可保留引用
        OriginalEvent = o.Source as CalendarEvent
    })
    .ToList();
补充说明
  • 若需要保留时区信息,可直接使用o.Period.Start(CalDateTime类型),无需调用AsDateTime方法
  • 若需要转换为UTC时间,可调用o.Period.Start.AsUtc

内容的提问来源于stack exchange,提问作者TryIst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:18:03