Экземпляр ExchangeService или GetUserAvailabilityResults с указанным TimeZone для Microsoft EWS - PullRequest
1 голос
/ 07 января 2020

У меня проблема с использованием часовых поясов с Exchange2010_SP2. Моя цель - получить все данные (точнее, clientEvents) в формате даты UT C. Как я прочитал в документации по умолчанию, он возвращает данные в текущем часовом поясе системы, если не указана конфигурация для часовых поясов. Я хотел бы избежать этого. Я хочу использовать только UT C для получения моих данных. Я читал, что есть возможность использовать эту конструкцию для этого:

ExchangeService serviceEST = new ExchangeService(TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"));

, но приведенный выше код просто компилируется, нет класса TimeZoneInfo - код взят из документации C#, но я не смог найди что-нибудь еще. В старой версии API был конструктор

ExchangeService(ExchangeVersion requestedServerVersion, TimeZone timeZone)

, но теперь его нет, почему? В настоящее время в заголовках методов конструкторов в классе ExchangeService я всегда вижу термин «... в текущий часовой пояс системы». Есть ли способ настроить новый экземпляр ExchangeService с заданным TimeZone? Я подумал, что, возможно, метод getUserAvailability имеет некоторую возможность заставить сервис извлекать данные в конкретном / заданном часовом поясе. Хотя здесь есть дополнительный параметр AvailabilityOptions, он не предоставляет опцию для TimeZone. На самом деле у данных, которые я получаю, есть объект TimeZone, но, похоже, он работает неправильно. Название часового пояса - «Пользовательский часовой пояс». Информация хранится в AttendeeAvaialability-> workingHours-> timeZone. Я также не могу получить текущий / локальный / часовой пояс по умолчанию, который использует служба EWS. Я могу получить список всех доступных часовых поясов, но я не вижу способа получить текущий / локальный, который используется. Так что я немного рассол здесь. То, что я смог сделать, это:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));    
final ExchangeService instance = new ExchangeService();

Это изменит приложение дыры для использования часового пояса UT C. Это не самый чистый способ сделать это, я действительно хотел бы избежать такого рода жесткого кодирования, но кажется, что это единственный способ, или я ошибаюсь?

Любая помощь будет высоко ценится,

ура, Павел

...