C# 如何设置Outlook约会的时区。如果是通过EWS API创建的

C# 如何设置Outlook约会的时区。如果是通过EWS API创建的,c#,outlook,calendar,exchangewebservices,C#,Outlook,Calendar,Exchangewebservices,我们正在使用Exchange Web服务API创建约会。我们在创建期间将时区设置为本地时区。当收件人查看邀请时,正是其本地时区的正确时间,唯一的问题是Exchange在约会正文的开头添加了“何时”和“何地”,如下所示: 无论最终用户的时区是什么,When的时区始终为UTC时区。这给我们客户的最终用户带来了一些困惑。从属性中,只有Get方法,而不是Set方法。在一个测试中,我们尝试将首选区域性设置为反区域性,因为建议使用文档,并且UTC时间中仍显示“When”。 不知怎的,我在互联网上找不到任

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

无论最终用户的时区是什么,When的时区始终为UTC时区。这给我们客户的最终用户带来了一些困惑。从属性中,只有Get方法,而不是Set方法。在一个测试中,我们尝试将首选区域性设置为反区域性,因为建议使用文档,并且UTC时间中仍显示“When”。


不知怎的,我在互联网上找不到任何相关信息。有人能在这里解释一下如何在特定时区显示“何时”吗?

在消息正文中,您所看到的内容被称为下层文本,该问题通常发生在您发布的图像的最后一行的约会更新过程中。问题是因为时区没有作为更新请求的一部分发送,服务器会将下层文本设置为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);
    }
service.OnSerializeCustomSoapHeaders+=service\u OnSerializeCustomSoapHeaders;
更新(ConflictResolutionMode.AlwaysOverwrite、SendInvitations或CancellationMode.SendToAllAndSaveCopy);
service.OnSerializeCustomSoapHeaders-=服务\u OnSerializeCustomSoapHeaders;
静态void服务\u onSerializeCustomSoapHeader(XmlWriter)
{
writer.WriteRaw(Environment.NewLine+“”+Environment.NewLine);
}