Изменение часового пояса на UTC при обновлении встречи - PullRequest
4 голосов
/ 28 марта 2012

Я использую EWS 1.2 для отправки встреч. При создании новых встреч TimeZone правильно отображается на уведомлении, но при обновлении той же встречи происходит сброс часового пояса до UTC.

Может ли кто-нибудь помочь мне решить эту проблему?

Вот пример кода, чтобы повторить проблему:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"));
service.Credentials = new WebCredentials("ews_calendar", PASSWORD, "acme");
service.Url = new Uri("https://acme.com/EWS/Exchange.asmx");

Appointment newAppointment = new Appointment(service);
newAppointment.Subject = "Test Subject";
newAppointment.Body = "Test Body";
newAppointment.Start = new DateTime(2012, 03, 27, 17, 00, 0);
newAppointment.End = newAppointment.Start.AddMinutes(30);
newAppointment.RequiredAttendees.Add("tin.tin@acme.com");

//Attendees get notification mail for this appointment using (UTC-05:00) Eastern Time (US & Canada) timezone
//Here is the notification content received by attendees:
//When: Tuesday, March 27, 2012 5:00 PM-5:30 PM. (UTC-05:00) Eastern Time (US & Canada)
newAppointment.Save(SendInvitationsMode.SendToAllAndSaveCopy);

// Pull existing appointment
string itemId = newAppointment.Id.ToString();

Appointment existingAppointment = Appointment.Bind(service, new ItemId(itemId));

//Attendees get notification mail for this appointment using UTC timezone
//Here is the notification content received by attendees:
//When: Tuesday, March 27, 2012 11:00 PM-11:30 PM. UTC
existingAppointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy);

Ответы [ 2 ]

1 голос
/ 06 апреля 2012

Попробуйте использовать другую перегрузку Bind(), которая позволяет явно указать, какие свойства загружать.В основном, укажите все TimeZone конкретные определения свойств в третьем параметре Bind(), относительно бумаги MSDN Чтобы изменить часовой пояс для встречи без изменения времени начала :

Привязкак существующей встрече, используя ее уникальный идентификатор.В следующем коде показано, как выполнить привязку к существующей встрече, предоставить ей информацию о конфигурации соединения с помощью объекта ExchangeService с именем service и запросить определенный набор свойств, включая свойства DateTime и свойства часового пояса.ItemId был сокращен, чтобы сохранить читабельность.В этом примере предположим, что объект службы ограничен часовым поясом Тихоокеанского стандартного времени (PST).

var appt = Appointment.Bind(
            service, 
            new ItemId(itemId), 
            new PropertySet(
                  BasePropertySet.IdOnly, 
                  AppointmentSchema.Start, 
                  AppointmentSchema.ReminderDueBy, 
                  AppointmentSchema.End, 
                  AppointmentSchema.StartTimeZone, 
                  AppointmentSchema.EndTimeZone, 
                  AppointmentSchema.TimeZone)); 

appt.StartTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Coordinated Universal Time");
appt.EndTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Coordinated Universal Time");

appt.Update(
        ConflictResolutionMode.AlwaysOverwrite, 
        SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy);

appt.Load(new PropertySet(
                   BasePropertySet.IdOnly, 
                   AppointmentSchema.Start,              
                   AppointmentSchema.ReminderDueBy, 
                   AppointmentSchema.End, 
                   AppointmentSchema.StartTimeZone, 
                   AppointmentSchema.EndTimeZone, 
                   AppointmentSchema.TimeZone));

Также ниже вы можете найти полезные инструкции по MSDN:

1 голос
/ 02 апреля 2012

Вы захотите установить AppointmentSchema.StartTimeZone и связать его как часть объекта свойств при связывании existingAppointment, как показано здесь :

// Get an existing calendar item, requesting the Id, Start, and 
//  StartTimeZone properties.
PropertySet props = new PropertySet(
      AppointmentSchema.Id, 
      AppointmentSchema.Start, 
      AppointmentSchema.StartTimeZone);
Appointment appt = Appointment.Bind(service, new ItemId("AQMkA="), props);

По-видимому, часовой пояс по умолчанию установлен в формате UTC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...