2012-01-05 76 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); 

的奇怪的事情是,如果我與它的工作原理如下取代我的開始時間分配:

DateTime startTime = DateTime.Now; 

什麼是DateTime對象之間的區別我創建並由DateTime.Now生成的對象。我在調試過程中詳細檢查過它們,並且找不到區別。

任何想法?

+0

日期時間現在爲您提供當前日期時間,並且您提供的日期時間是2012年1月6日7:00:00 – 2012-01-05 22:46:52

+0

我意識到實際日期/時間不同,但即使我將對象的日期/時間設置爲等於現在它有同樣的問題。 – joshb 2012-01-05 22:53:23

回答

21

這實際上似乎是GetUserAvailability方法中的一個問題,與任何DateTime操作相反。

按照MSDN documentation

的GetUserAvailability(通用,TimeWindow,AvailabilityData,AvailabilityOptions)方法僅支持在12:00 A.M是至少提前24小時之久的,並且開始和結束的時間段。要將方法的結果限制在較短的時間段內,您必須在客戶端上過濾結果。

+0

謝謝。我多次查看文檔,完全錯過了。奇怪的是,那不是總是如此(有時它適用於非上午12點開始和<24小時持續時間)根據我的測試,但如果我保持在這些參數內似乎總是工作。 – joshb 2012-01-06 14:58:45

+1

只是有相同的「哦,狗屎」的經驗。感謝您的幫助 – 2013-01-09 13:00:01

+0

我有同樣的異常問題是,我的查詢,也包含一個開始和結束日期「DefineAvailabilityOptions(查詢)」,與provi不匹配ded在GetUserAvailability中的開始和結束日期。因此,在用24小時限制瘋狂之前,您可能需要至少檢查一下。 – 2014-11-04 14:00:25

2

也許它與你的時區和UTC之間的差異有關,產生負時間窗口。嘗試從AddHours(8)增加到AddHours(24)的更大值,然後看看會發生什麼。

+0

你的建議消除了異常(謝謝),但我不確定爲什麼。無論採用哪種方式,我都會在相同的DateTime上添加幾個小時,那麼無論是本地還是UTC,如何結束負時間窗口? – joshb 2012-01-05 23:02:59

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 2012-01-05 22:56:22

2

指定類,使之等同於現在:

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

有了一些機會,你確實需要UTC。可能取決於服務器配置。

+0

傳入DateTimeKind仍會產生錯誤。 – joshb 2012-01-05 23:00:18

0

看看類DateTime的構造函數和代碼。

所有這些改變私有變量:

private ulong dateData; 

因此,所有的構造是相同的,DateTime.Now是返回做同樣的事情DateTime類實例的公共靜態方法。

錯誤消息指出:

爲FreeBusyViewOptions.TimeWindow指定的持續時間是無效的。

那是因爲它無效!

你把未來的日期,它很可能檢查。嘗試使用當前日期。

+0

看着DateTime.Now方法,其所有返回的格式...返回新的DateTime(值,DateTimeKind.Local ... – 2012-01-05 22:56:29

+0

我試過當前的日期,它會產生相同的異常。 GetUserAvailability方法的目的是檢查未來的日曆可用性,所以如果它不接受未來的日期窗口就沒有多大意義了。 – joshb 2012-01-05 23:09:17

2

我發現指定的TimeWindow必須包含至少一個午夜。但我不知道爲什麼。

相關問題