Exchange のタイム ゾーンと EWS

Exchange において、タイム ゾーンが EWS マネージ API と EWS でどのように機能するかを確認します。

タイム ゾーンは、重要視されることがあまりありません。 しかし、EWS マネージ API または EWS を使用して日付と時刻を指定する場合には重要な概念です。 EWS マネージ API や EWS アプリケーションでタイム ゾーンの処理を誤ると、予期しない結果が生じることがあります。 知識があれば、タイム ゾーンは簡単に正しく処理できます。

EWS マネージ API でのタイム ゾーンの処理

EWS マネージ API を使用している場合、タイム ゾーンはほとんどの場合に自動的に処理されます。 ユーザー側で明示的にアクションを実行しなくても、API がクライアント コンピューターのローカルのタイム ゾーンを使用し、必要な変換がバックグラウンドで処理されます。 目的に沿っていればこれで十分ですが、その他のオプションもあります。

オプションの 1 つとして、ExchangeService.TimeZone プロパティの設定があります。 このプロパティは、EWS マネージ API で実行されるすべての要求のタイム ゾーンを制御します。 このプロパティは読み取り専用であり、クラスのコンストラクターを介してのみ設定できます。 ExchangeService(System.TimeZoneInfo) または ExchangeService(ExchangeVersion, System.TimeZoneInfo) コンストラクターのいずれかを使用する場合、System.TimeZoneInfo オブジェクトとして特定のタイム ゾーンを指定できます。 パラメーターとして TimeZoneInfo オブジェクトを取らない他のコンストラクターのいずれかを使用する場合、ExchangeService クラスが TimeZone プロパティをクライアント コンピューターの現在のタイム ゾーンに設定します。

特定のタイム ゾーンを設定した場合も、クライアント コンピューターのタイム ゾーンのままにした場合も、すべての日付と時刻は、TimeZone プロパティが示すタイム ゾーンで表示されます。 EWS マネージ API は、すべての日付/時刻のプロパティを System.DateTime 構造体として公開します。 このため、日付/時刻のプロパティを設定する場合は、指定した時刻が DateTime オブジェクトの DateTime.Kind プロパティの値に応じて解釈されることに注意してください。 Kind プロパティの値が Unspecified に設定されると、DateTime の値は TimeZone プロパティで指定されたタイム ゾーンにあると解釈されます。 日付/時刻のプロパティを読み取る場合は、すべての DateTime プロパティがそのタイム ゾーンで表されます。

新しい予定や会議を作成する場合、または既存の予定や会議を更新する場合は、新しい Appointment オブジェクトに対して TimeZone で指定されたタイム ゾーンを上書きできます。 ただし、何を実際に上書きできるかは、目的としている EWS スキーマ バージョン によって決まります。 ExchangeService.RequestedServerVersion プロパティのすべての値に対して、予定や会議に固有のタイム ゾーンを使用できるように、Appointment.StartTimeZone を設定できます。 Exchange2007_SP1 を超える ExchangeService.RequestedServerVersion プロパティの値を使用している場合、Appointment.EndTimeZone プロパティも設定して、Appointment.End プロパティのタイム ゾーンを指定することができます。 ただし、これらのプロパティは、作成要求の日付と時刻の解釈のみに反映される点に注意してください。 予定を取得した場合、開始時刻と終了時刻は TimeZone プロパティで指定したタイム ゾーンで表示されます。

既存の予定または会議を更新する場合、Appointment オブジェクトのタイム ゾーンは StartTimeZone プロパティまたは EndTimeZone プロパティ、あるいはその両方を設定して変更できます。 これに応じて、時間が適切にシフトします。 ExchangeService.RequestedServerVersionExchange2007_SP1 に設定している場合は、EndTimeZone プロパティを設定することはできません。代わりに StartTimeZone プロパティの値が使用されます。

表 1. EWS マネージ API でのタイム ゾーンのプロパティ

タイム ゾーンのプロパティ 最小サーバーの要求バージョン 説明
TimeZone
Exchange2007_SP1
ExchangeService クラスのコンストラクターを使用して設定していない場合、このプロパティはクライアント コンピューターのタイム ゾーンに設定されます。 アイテムを作成するとき、および既存のアイテムを取得するときのすべての DateTime プロパティは、このタイム ゾーンで表現されます。 このタイム ゾーンは、予定や会議の作成要求で Appointment.StartTimeZone または Appointment.EndTimeZone プロパティ、あるいはその両方の設定によって上書きされます。 Appointment.StartTimeZone プロパティで上書きされない場合は、このタイム ゾーンが予定や会議の作成タイム ゾーンとみなされます。
StartTimeZone
Exchange2007_SP1
新しい Appointment オブジェクトで設定した場合、このタイム ゾーンは Appointment.Start および Appointment.ReminderDueBy プロパティの解釈に使用されます。 また、このタイム ゾーンは、Appointment オブジェクトの作成タイム ゾーンとみなされます。
既存のアイテムを取得する場合、このプロパティは情報のみを提供します。 既存の予定の DateTime プロパティは常に、ExchangeService.TimeZone プロパティで指定したタイム ゾーンで表現されます。
EndTimeZone
Exchange2010
新しい Appointment オブジェクトで設定した場合、このタイム ゾーンは Appointment.End プロパティの解釈に使用されます。
既存のアイテムを取得する場合、このプロパティは情報のみを提供します。 既存の予定の DateTime プロパティは常に、ExchangeService.TimeZone プロパティで指定したタイム ゾーンで表現されます。

EWS でのタイム ゾーンの処理

EWS を使用している場合、タイム ゾーンは自動的に処理されず、処理はもう少し複雑になります。 タイム ゾーンが EWS 要求と応答にどのように影響するかは、いくつかの要因によって異なります。

  • RequestServerVersion 要素で指定されている Exchange のバージョン

  • TimeZoneContext 要素 (ある場合) で指定されているタイム ゾーン

  • MeetingTimeZoneStartTimeZoneEndTimeZone 要素 (予定または会議にある場合) で指定されているタイム ゾーン

  • XML dateTime 要素 (ある場合) に指定されているタイム ゾーン

dateTime 要素の値で指定されるタイム ゾーンには、次の 3 つの形式があります。 詳しくは、「XML Schema Part 2: Datatypes Second Edition」をご参照ください。ただし、

  • 協定世界時 (UTC): 'Z' で指定される値に読み替えてください。 たとえば、2014-06-06T19:00:00.000Z のように指定します。

  • 特定のタイム ゾーン: '+' または '-' で指定され、時間と分がそれに続きます。 たとえば、2014-06-06T19:00:00.000-08:00 のように指定します。

  • タイム ゾーンなし: タイム ゾーンが存在しないものとして指定します。 たとえば、2014-06-06T19:00:00.000 のように指定します。

タイム ゾーンが dateTime 値 (UTC または特定のタイム ゾーン) として示される場合、値は常にそのタイム ゾーンとして解釈されます。 タイム ゾーンがない場合、この値はその他のタイム ゾーン関連の要素の特定の組み合わせに応じて解釈されます。

表 2. EWS でのタイム ゾーン要素とその影響

RequestServerVersion TimeZoneContext がありますか。 MeetingTimeZone、StartTimeZone、または EndTimeZone がありますか (CalendarItem と MeetingRequest のみですか)。 UTC の dateTime 特定のタイム ゾーンの dateTime タイム ゾーンのない dateTime 予定や会議の作成タイム ゾーン
Exchange2007_SP1
はい
はい (MeetingTimeZone)
UTC として解釈される
値に示されているタイム ゾーンとして解釈される
MeetingTimeZone 要素を含む CalendarItem 内の要素または MeetingRequest 要素は、MeetingTimeZone 要素のタイム ゾーンとして解釈され、その他のものは UTC として解釈される
MeetingTimeZone 要素のタイム ゾーン
Exchange2007_SP1
はい
いいえ
UTC として解釈される
値に示されているタイム ゾーンとして解釈される
UTC として解釈される
UTC
Exchange2007_SP1
いいえ
はい (MeetingTimeZone)
UTC として解釈される
値に示されているタイム ゾーンとして解釈される
MeetingTimeZone 要素を含む CalendarItem 内の要素または MeetingRequest 要素は、MeetingTimeZone 要素のタイム ゾーンとして解釈され、その他のものは UTC として解釈される
MeetingTimeZone 要素のタイム ゾーン
Exchange2007_SP1
いいえ
いいえ
UTC として解釈される
値に示されているタイム ゾーンとして解釈される
UTC として解釈される
UTC
Exchange2010 以降
はい
はい (StartTimeZone または EndTimeZone、あるいはその両方)
UTC として解釈される
値に示されているタイム ゾーンとして解釈される
StartTimeZone 要素がある場合、Start および ReminderDueBy 要素の値は StartTimeZone 要素のタイム ゾーンとして解釈されます。 それ以外の場合、その要素の値は TimeZoneContext 要素のタイム ゾーンとして解釈されます。
EndTimeZone 要素がある場合、Start 要素の値は EndTimeZone 要素のタイム ゾーンとして解釈されます。 それ以外の場合、End 要素の値は TimeZoneContext 要素のタイム ゾーンとして解釈されます。
CalendarItem または MeetingRequest 外の要素は、TimeZoneContext 要素のタイム ゾーンとして解釈されます。
ある場合は StartTimeZone 要素のタイム ゾーン、ない場合は TimeZoneContext 要素のタイム ゾーン
Exchange2010 以降
はい
いいえ
UTC として解釈される
値に示されているタイム ゾーンとして解釈される
TimeZoneContext 要素のタイム ゾーンとして解釈される
TimeZoneContext 要素のタイム ゾーン
Exchange2010 以降
いいえ
はい (StartTimeZone または EndTimeZone、あるいはその両方)
UTC として解釈される
値に示されているタイム ゾーンとして解釈される
StartTimeZone 要素がある場合、Start および ReminderDueBy 要素の値は StartTimeZone 要素のタイム ゾーンとして解釈されます。 それ以外の場合、その要素の値は UTC として解釈されます。
EndTimeZone 要素がある場合、Start 要素の値は EndTimeZone 要素のタイム ゾーンとして解釈されます。 それ以外の場合、End 要素の値は UTC として解釈されます。
CalendarItem または MeetingRequest 外の要素は UTC として解釈されます。
ある場合は StartTimeZone 要素のタイムゾーン、ない場合は UTC
Exchange2010 以降
いいえ
いいえ
UTC として解釈される
値に示されているタイム ゾーンとして解釈される
UTC として解釈される
UTC

サーバーからの応答を解釈するときは、常に各要素の値をチェックし、値を正しく解釈する必要があります。 Exchange には常に値のタイム ゾーン (UTC または指定のタイム ゾーン) が含まれます。

予定や会議を作成する際のタイム ゾーンのその他の考慮事項

予定または会議を作成するとき、開始時刻に適用するタイム ゾーンは、予定の作成タイム ゾーンとみなされます。 作成タイム ゾーンは、予定または会議を作成するときに日付/時刻がどのように解釈されるかを制御するほか、アイテムに次のように影響します。

  • アイテムが終日イベントの場合、作成タイム ゾーンとは別のタイム ゾーンを使用しているクライアントから表示すると、表示が予期しない状態になることがあります。 これは終日イベントが作成されたとき、終日イベントの開始時刻と終了時刻が作成タイム ゾーンの午前 0 時に調整されるためです。 その時刻は、別のタイム ゾーンの表示では午前 0 時ではないため、アイテムが別の日にも表示されることがあります。 このため、可能であれば、ユーザーの標準予定表管理クライアント用のタイム ゾーンを使用して、終日イベントを作成することをお勧めします。

  • アイテムが会議であり、参加者のタイム ゾーンがクライアントのタイム ゾーンと異なる場合、作成タイム ゾーンは出席者が会議要求を受信すると Outlook の情報バーに表示されます。

このセクションの内容

関連項目