当前位置: 首页 > 知识库问答 >
问题:

重复发生的事件失去自动时区转换

苏培
2023-03-14

我正在设置一个日历邀请电子邮件使用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,eventTime为4pm,持续时间为3小时)

然而,当我取同样精确的代码并将这一行添加到它时

IRecurrencePattern recurrence = new RecurrencePattern(FrequencyType.Daily, 1)
{
    Until = DateTime.SpecifyKind(model.endDate.Value.AddDays(1), DateTimeKind.Utc)
};

iCalEvent.RecurrenceRules = new List<IRecurrencePattern> { recurrence };

iCal.AddTimeZone(new VTimeZone("UTC"));
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提供的这个非常有用的库。我不知道我怎么可能工作与这个疯狂的日历标准没有它。

共有1个答案

怀洛华
2023-03-14

重复发生的事件总是相对于发件人的时区(或者更确切地说是相对于事件位置),而不是相对于收件人的时区,因为夏令时变化可能发生在组织者和不同收件人之间的不同时间。

因此,在大多数情况下,您希望在事件中使用有意义的时区(即,不是UTC)。然后Outlook只是简单地显示事件确实是根据给定的时区发生的。这表明对收件人来说,事件可能不总是在一天的同一时间。

 类似资料:
  • 我已经设法让我的应用程序在复选框状态更改时更新数据库,但当我滚动应用程序时,复选框的状态会更改。 我的问题是:如何保存复选框的状态,以便在滚动视图时它们不会更改? 这是我的光标适配器。

  • 我有一个fxml文件已经注册了控制器。Controller实现EventHandler和方法句柄(ActionEvente)。如果发生注册事件,处理程序方法中的代码将被处理,但不总是这样。但是打印了以下异常跟踪。我错过了什么吗?

  • 我有一个很简单的表格。当用户在输入字段中键入时,我想更新他们在页面上其他地方键入的内容。一切正常。我已将更新绑定到、和事件。 唯一的问题是,如果您从浏览器的自动完成框中选择一个输入,它不会更新。当您从“自动完成”中选择时,是否会触发任何事件(显然既不是也不是)。注意,如果您从“自动完成”框中选择“模糊输入”字段,将触发更新。我希望它能在自动完成时被触发。 请参见:http://jsfidle.ne

  • 我要在按钮的click事件上向html表中添加一行。在那一行中,我有一个包含li元素的单元格。我已经为li元素分配了click事件。当我点击李的事件被解雇了很多次,我不知道为什么...好心的帮助。

  • 那么我如何能够重置配置或者刷新log4j2配置运行时呢?

  • 问题内容: 当我运行以下脚本时,该事件总是在页面加载时触发。我不确定在这里做错了什么,我创建了元素,在DOM中找到它,然后附加了一个侦听器,但是它总是在页面加载时触发事件,而不是在单击元素时触发事件。 问题答案: el.addEventListener(“click”, alert(“clicktrack”), false); 执行此行后,将调用并返回。要传递警报代码,您需要将其包装在一个函数中。