我已经进行了一些测试。这是我的代码:
var systemTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var icalTimeZone = iCalTimeZone.FromSystemTimeZone(systemTimeZone);
var startTimeSearch = new DateTime(2015, 9, 8, 0, 0, 0, DateTimeKind.Utc);
var endTimeSearch = new DateTime(2015, 12, 1, 00, 0, 0, DateTimeKind.Utc);
var iCalendar = new iCalendar();
var pacificTimeZone = _iCalendar.AddTimeZone(icalTimeZone);
var event = new Event
{
Summary = "This is an event at 2015-09-08 10:30 PST (2015-09-08 17:30 UTC)",
DTStart = new iCalDateTime(2015, 9, 8, 10, 30, 0, pacificTimeZone.TZID, iCalendar),
Duration = new TimeSpan(0, 1, 0, 0)
};
var rp = new RecurrencePattern("FREQ=WEEKLY;UNTIL=20151112T080000Z;WKST=SU;BYDAY=TU");
event.RecurrenceRules.Add(rp);
iCalendar.Events.Add(_event);
var occurrences = iCalendar.GetOccurrences(startTimeSearch, endTimeSearch);
结果如下:
10 次出现 - 这是出现的 Period.StartTime.Value 和 UTC 属性
值- 2015 年 9 月 8 日 10:30:00 - UTC 2015 年 9 月 8 日17:30:00
值- 2015 年 9 月 15 日 10:30:00 - UTC 2015 年 9 月 15 日17:30:00
值- 2015 年 9 月 22 日10:30:00 - UTC 2015 年 9 月 22 日17:30:00
值- 2015 年 9 月 29 日 10:30:00 - UTC 2015 年 9 月 29 日17:30:00
值- 10/ 2015 年 6 月 10:30:00 - UTC 2015 年 10 月 6 日17:30:00
值- 2015 年 10 月 13 日 10:30:00 - UTC 2015 年 10 月 13 日17:30:00
值- 10/20/ 2015 年 10:30:00 - UTC 2015 年 10 月 20 日17:30:00
值- 2015 年 10 月 27 日 10:30:00 - UTC 2015 年 10 月 27 日17:30:00
值-11/3/2015 10:30:00 - UTC 11/3/2015 17:30:00 (这应该是 18:30:00!)
值- 11/10/2015 10:30:00 - UTC 11/ 10/2015 17:30:00 (这应该是 18:30:00!)
如您所见,最后两个的 UTC 时间应为 18:30:00。所以我想知道这是否只是 DDay Ical 的工作方式,我不应该指望它让 UTC 日期时间正确,或者我做错了什么。