我创建的DateTime对象和DateTime.Now之间的区别

时间:2012-01-05 22:42:27

标签: c# exchangewebservices exchange-server-2007

我正在尝试使用Exchange 2007 API查询特定用户的日历可用性。我的示例代码产生以下异常:

  

为FreeBusyViewOptions.TimeWindow指定的持续时间是   无效。

以下是示例代码:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

service.AutodiscoverUrl("email@domain.com");

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@domain.com") }, tw, AvailabilityData.FreeBusyAndSuggestions);

奇怪的是,如果我用以下内容替换我的startTime赋值,它可以工作:

DateTime startTime = DateTime.Now;

我创建的DateTime对象与DateTime.Now生成的对象之间有什么区别。我在调试时对它们进行了详细检查,但无法找到差异。

有什么想法吗?

6 个答案:

答案 0 :(得分:23)

这实际上似乎是GetUserAvailability方法中的一个问题,而不是任何DateTime操作。

根据MSDN documentation

  

GetUserAvailability(Generic,TimeWindow,AvailabilityData,AvailabilityOptions)方法仅支持最少24小时的开始和结束时间的时间段。要将方法的结果限制为更短的时间段,您必须在客户端上过滤结果。

答案 1 :(得分:2)

可能它与您的时区和UTC之间的差异有关,产生一个负时间窗口。尝试从AddHours(8)增加到更大的值到AddHours(24),看看会发生什么。

答案 2 :(得分:2)

指定种类使其与现在相同:

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

有些可能你确实需要Utc。可能取决于服务器配置。

答案 3 :(得分:2)

我发现指定的TimeWindow必须包含至少一个午夜。但我不知道为什么。

答案 4 :(得分:1)

Kind不同。这可能是它正在寻找的东西。

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

有一种“未指定”。

虽然

DateTime.Now

有一种“本地”。

尝试使用ToLocalTime将种类设置为本地:

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

答案 5 :(得分:0)

查看DateTime类的构造函数和代码。

所有这些都改变了私有变量:

private ulong dateData;

因此所有构造函数都是相同的,而DateTime.Now是一个公共静态方法,它返回一个DateTime类的实例,它执行相同的操作。

错误消息说明:

为FreeBusyViewOptions.TimeWindow指定的持续时间无效。

那是因为无效!

您输入了将来的日期,并且很可能会检查该日期。尝试使用当前日期。