如何为Outlook约会设置时区(通过EWS API创建时)

时间:2019-04-22 17:57:19

标签: c# outlook calendar exchangewebservices

我们正在使用Exchange Web服务API创建约会。在创建过程中,我们将时区设置为本地时区。收件人查看邀请时,是在当地时区的正确时间,唯一的事情是Exchange会在约会正文的开头添加“ When”和“ Where”,如下所示:

Appointment

When的时区始终处于UTC时区,无论最终用户的时区是什么。这给我们客户的最终用户造成了一些困惑。在EWS API Document for Appointment.When属性中,只有Get方法,而没有Set方法。在一项测试中,我们尝试根据建议的文档将“首选区域性”设置为“删除区域性”,并且仍在UTC时间显示“何时”。 Setting Preferred Culture

以某种方式,我无法在互联网上找到任何相关信息。有人可以在这里阐明如何在特定时区显示“何时”吗?

1 个答案:

答案 0 :(得分:1)

您所查看的内容在消息正文中被称为下级文本,通常在更新约会时会出现此问题,您似乎正在将其作为发布图像的最后一行。问题是因为未将时区作为更新请求的一部分发送,服务器会将下层文本设置为utc。解决此问题的一种方法是,您可以使用

手动添加TimeZoneContext标头

OnSerializeCustomSoapHeaders事件例如

        service.OnSerializeCustomSoapHeaders += service_OnSerializeCustomSoapHeaders;
        appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy);
        service.OnSerializeCustomSoapHeaders -= service_OnSerializeCustomSoapHeaders;

    static void service_OnSerializeCustomSoapHeaders(XmlWriter writer)
    {
        writer.WriteRaw(Environment.NewLine + "    <t:TimeZoneContext><t:TimeZoneDefinition Id=\"" + TimeZone.CurrentTimeZone.StandardName + "\"/></t:TimeZoneContext>" + Environment.NewLine);
    }