2012-01-05 4 views
6

Exchange 2007 APIを使用して、特定のユーザーの予定表の可用性を照会しようとしています。私のサンプルコードでは、次の例外を生成します作成したDateTimeオブジェクトとDateTime.Nowの違い

FreeBusyViewOptions.TimeWindowに指定された時間期間は 無効です。

ここではサンプルコードです:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 

service.AutodiscoverUrl("[email protected]"); 

DateTime startTime = new DateTime(2012, 1, 6, 7, 0, 0); 

TimeWindow tw = new TimeWindow(startTime, startTime.AddHours(8)); 

GetUserAvailabilityResults result = service.GetUserAvailability(new List<AttendeeInfo> { new AttendeeInfo("[email protected]") }, tw, AvailabilityData.FreeBusyAndSuggestions); 

奇妙なことは、私は次のように私のstartTimeの割り当てを交換する場合、それは動作しますが、次のとおりです。

DateTimeオブジェクト間の違いは、私何
DateTime startTime = DateTime.Now; 

は、作成されたオブジェクトとDateTime.Nowによって生成されたオブジェクト。私はデバッグ中にそれらを詳細に調べて違いを見つけることはできません。

アイデア?

+0

日時は現在、あなたの現在の日時を与え、あなたが提供日時は2012年1月6日午前7時00分00秒午前 –

+0

私は/時間、実際の日付が異なっている実感が、私はに等しい私のオブジェクトの日付/時刻を設定していてもです今は同じ問題があります。 – joshb

答えて

21

これは実際にはすべてのDateTime操作とは対照的に、GetUserAvailability方法では問題であるように思われます。 MSDN documentationによれば

GetUserAvailability(ジェネリック、TimeWindow、AvailabilityData、AvailabilityOptions)メソッドは長い24時間の最小値のみ期間をサポートし、その12:00 A.Mで開始および終了。メソッドの結果をより短期間に制限するには、クライアントで結果をフィルタリングする必要があります。

+0

はありがとうございます。私は文書を通じて数回見て、完全にそれを逃した。奇妙なことは、それがないということです私のテストによると(時にはそれが非午前12時開始され、<24時間の期間で動作します)常に真が、私はそれらのパラメータ内にとどまるならば、常に動作しているようです。 – joshb

+1

がちょうど同じ「たわごとああ」経験をしました。助け –

+0

てくれてありがとう私は同じ例外がありました。問題は、開始日と終了日 "DefineAvailabilityOptions(query)"も含まれている私のクエリが、 GetUserAvailabilityで開始日と終了日を指定します。だから、24時間制限で夢中になる前に、少なくともこれを最初にチェックしたいかもしれません。 –

2

あなたのタイムゾーンとUTCの違いと関係があり、負の時間ウィンドウを生成することがあります。 AddHours(8)から最大値までAddHours(24)まで増やしてみて、何が起こるかを見てください。

+0

あなたの提案は例外(ありがとう)を排除しましたが、私は本当に理由は分かりません。どちらの方法でも、同じDateTimeに時間を追加していますので、ローカルであれUTCであれ、負のタイムウィンドウで終わることはできますか? – joshb

1

Kindは異なります。これは、それが探しているものかもしれません。

new DateTime(2012, 1, 6, 7, 0, 0) 

には、「指定されていません」という種類があります。

DateTime.Now 

ている間は、 "ローカル" のようなものを持っています。

は、ローカルに種類を設定するToLocalTimeを使用してみてください:

DateTime startTime = new DateTime(2012, 1, 6, 7, 0, 0).ToLocalTime(); 
+0

私はデバッグ中でもToLocalTimeメソッドを使うか、DateTimeKindをコンストラクタに渡しても何も変わっていないことに気付きました。 – joshb

2

は今までそれを同じにするために種類を指定します。あなたが実際にUTCを必要とするいくつかのオッズでは

 DateTime startTime = new DateTime(2012, 1, 6, 7, 0, 0, DateTimeKind.Local); 

を。サーバの設定によります。

+0

DateTimeKindを渡すと、引き続きエラーが発生します。 – joshb

0

DateTimeクラスのコンストラクタとコードを見てください。

それらのすべては、プライベート変数を変更する:

private ulong dateData; 

だからすべてのコンストラクタは同じであり、DateTime.Nowは同じことをDateTimeクラスのインスタンスを返すのpublic staticメソッドです。

エラーメッセージは次のように述べています

をFreeBusyViewOptions.TimeWindowに指定された時間期間は無効です。

これはが無効なためです。

あなたは将来の日付を記入します。これはおそらくそれをチェックしました。現在の日付で試してください。

+0

DateTime.Nowメソッドを見ると、その戻り値の形式は... new DateTime(value、DateTimeKind.Local ... –

+0

私は現在の日付を試しましたが、同じ例外が生成されます。 GetUserAvailability方法のそれが将来の日付の窓を受け入れなかった場合、それはあまり意味がないように、将来のカレンダーの可用性をチェックすることです。 – joshb

2

指定されたTimeWindowには、少なくとも1つの真夜中が含まれている必要があります。しかし、私は理由を知らない。

関連する問題