今日、非常によく似た問題に遭遇しましたが、イベントを更新するときに. 私の解決策は質問に関連していると思います。
中央ヨーロッパのタイムゾーンで作成されたイベントを更新していました。私のコードは、次の順序でプロパティを設定していました。
appt.Start = DateTime.UtcNow;
appt.End = DateTime.UtcNow.AddMinutes(30);
appt.StartTimeZone = TimeZoneInfo.FindSystemTimeZoneById("UTC");
appt.EndTimeZone = TimeZoneInfo.FindSystemTimeZoneById("UTC");
マネージド API を使用していると、プロパティの割り当ての順序が実際の操作に影響を与えないという印象を受けましたが、この場合はそうではないことがわかりました。
Managed API は次の XML を生成しました。
<soap:Body>
<m:UpdateItem ConflictResolution="AlwaysOverwrite" SendMeetingInvitationsOrCancellations="SendToNone">
<m:SavedItemFolderId>
<t:FolderId Id="AQMkADJkAAA==" />
</m:SavedItemFolderId>
<m:ItemChanges>
<t:ItemChange>
<t:ItemId Id="AAMkADJkZWZiODMxLWNRE" />
<t:Updates>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:EndTimeZone" />
<t:CalendarItem>
<t:EndTimeZone Name="UTC" Id="UTC">
...
</t:EndTimeZone>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:Start" />
<t:CalendarItem>
<t:Start>2015-10-19T15:30:00.000Z</t:Start>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:End" />
<t:CalendarItem>
<t:End>2015-10-19T16:00:00.000Z</t:End>
</t:CalendarItem>
</t:SetItemField>
...
<t:SetItemField>
<t:FieldURI FieldURI="calendar:StartTimeZone" />
<t:CalendarItem>
<t:StartTimeZone Name="UTC" Id="UTC">
...
</t:StartTimeZone>
</t:CalendarItem>
</t:SetItemField>
</t:Updates>
</t:ItemChange>
</m:ItemChanges>
</m:UpdateItem>
</soap:Body>
プロパティの割り当ての順序を切り替えてタイムゾーンを設定すると、最初に問題が解決しました。
また、イベントの元のタイムゾーンが設定されているタイムゾーンと同じ場合も問題は発生しません。タイムゾーンを切り替えるときだけ。
これは本当の解決策ではないことに注意してください。マネージド API のクローンを作成し、ライブラリの問題を修正することをお勧めします。