Разница между объектом DateTime, который я создаю, и DateTime.Now - PullRequest
6 голосов
/ 06 января 2012

Я пытаюсь использовать 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 ]

23 голосов
/ 06 января 2012

На самом деле это проблема в методе GetUserAvailability, а не в манипуляциях с DateTime.

Согласно документации MSDN :

Метод GetUserAvailability (Generic, TimeWindow, AvailabilityData, AvailabilityOptions) поддерживает только периоды времени продолжительностью не менее 24 часов, начинающиеся и заканчивающиеся в 12:00. Чтобы ограничить результаты метода более коротким периодом времени, необходимо отфильтровать результаты на клиенте.

2 голосов
/ 02 января 2014

Я обнаружил, что указанное TimeWindow должно содержать хотя бы одну полночь.Но я не знаю почему.

2 голосов
/ 06 января 2012

Укажите Вид, чтобы сделать его идентичным Сейчас:

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

С некоторыми шансами, что вам действительно нужен Utc. Зависит от конфигурации сервера, вероятно.

2 голосов
/ 06 января 2012

Может быть, это как-то связано с разницей между вашим часовым поясом и UTC, создавая отрицательное временное окно. Попробуйте увеличить значение с AddHours (8) до больших значений до AddHours (24) и посмотрите, что произойдет.

1 голос
/ 06 января 2012

Kind отличается.Это может быть то, что он ищет.

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

имеет вид "Не указано".

В то время как

DateTime.Now

имеет тип "Local".

Попробуйте использовать ToLocalTime , чтобы установить тип в локальный:

DateTime startTime = new DateTime(2012, 1, 6, 7, 0, 0).ToLocalTime();
0 голосов
/ 06 января 2012

Посмотрите на конструкторы и код для класса DateTime.

Все они изменяют приватную переменную:

private ulong dateData;

Таким образом, все конструкторы одинаковы, а DateTime.Now являетсяоткрытый статический метод, который возвращает экземпляр класса DateTime, который делает то же самое.

В сообщении об ошибке указано:

Длительность, указанная для FreeBusyViewOptions.TimeWindow, недопустима.

Это потому, что он недействителен!

Вы указали будущую дату, и она, скорее всего, проверила это.Попробуйте с текущей датой.

...