我正在使用 ical.net 设置日历邀请电子邮件。发送非重复事件似乎很有效:我这样设置开始和结束日期
iCalEvent.DtStart = new CalDateTime(DateTime.SpecifyKind(model.EventTime.Value, DateTimeKind.Utc));
iCalEvent.DtEnd = new CalDateTime(DateTime.SpecifyKind(model.EventTime.Value.AddMinutes(model.DurationMins.Value), DateTimeKind.Utc));
邮件到达时,时区已转换为收件人时区(时区为-7,事件时间为下午4点,持续时间为3小时)
但是,当我采用相同的确切代码并将这一行添加到它时
IRecurrencePattern recurrence = new RecurrencePattern(FrequencyType.Daily, 1)
{
Until = DateTime.SpecifyKind(model.endDate.Value.AddDays(1), DateTimeKind.Utc)
};
iCalEvent.RecurrenceRules = new List<IRecurrencePattern> { recurrence };
突然收到邮件时我的时区不再转换(时区为-7,事件时间为下午4点,持续时间为3小时。结束日期为28日)
我需要在用户自己的时区中向用户显示 DateTime,并且我需要显示从 eventTime 到 endDate 的重复事件
注意我没有在日历上指定时区属性也可能很有用,因为它导致发送的电子邮件在 Outlook 中显示“不支持的日历消息”。在我删除它之前,它看起来像这样
iCal.AddTimeZone(new VTimeZone("UTC"));
当我打开指定了这个时区的 ical 文件时,它们似乎在多日事件中正常工作,但是由于我需要它们出现在 Outlook 中并带有接受/拒绝/暂定按钮,因此无法将其添加回来
我也试过像这样指定日期时间
iCalEvent.DtStart = new CalDateTime(leEvent.EventTime.Value, "UTC");
但没有任何改变
编辑:我现在明白问题是由于需要指定此处的时区的重复事件,但我不太确定需要在哪里指定时区。我回去重新添加 vTimeZone 并通过该站点对其进行验证,并且 iCal 文件似乎缺少时区块内的标准/日光部分
我还尝试将时区指定为 GMT 并将时区指定为 "\"America/Phoenix\"" 以便 tzid 以 TZID:"America/Phoenix" 的形式出现(在 ical 文件中带有引号。
这是我目前导致问题的代码。
iCalEvent.DtStart = new CalDateTime(DateTime.SpecifyKind(model.EventTime.Value, DateTimeKind.Utc));
iCalEvent.DtEnd = new CalDateTime(iCalEvent.DtStart.Value.AddMinutes(model.DurationMins.Value));
if (model.EndDate.HasValue)
{
IRecurrencePattern recurrence = new RecurrencePattern(FrequencyType.Daily, 1)
{
Until = DateTime.SpecifyKind(model.MaxDate.Value, DateTimeKind.Utc).ToLocalTime()
};
iCalEvent.RecurrenceRules = new List<IRecurrencePattern> { recurrence };
iCalEvent.DtStart = new CalDateTime(iCalEvent.DtStart.Value.ToLocalTime(), "America/Phoenix");
iCalEvent.DtEnd = new CalDateTime(iCalEvent.DtEnd.Value.ToLocalTime(), "America/Phoenix");
iCal.AddTimeZone(new VTimeZone("America/Phoenix"));
}
我不太确定从这一点开始纠正标准/日光错误需要发生什么。
最终编辑:
看完这篇文章后,我发现这个问题在去年 11 月就已经解决了。我检查了我们项目中的版本,结果发现一些天才只是直接复制了 dll,而没有通过 nuget 设置它(以及几年前的版本)。我抓住了最新版本,这次指定时区在 Outlook 中没有引起任何问题。我仍在尝试 addTimeZone 和 addLocalTimeZone 但我绝对走在正确的轨道上。感谢 rianjs 提供了这个非常有用的库。如果没有它,我不知道如何使用这个疯狂的日历标准。