Как указать EDT (летнее время) для веб-служб Exchange (XML не управляется)?

Статья здесь:

http://msdn.microsoft.com/en-us/library/exchange/bb738399(v=exchg.80).aspx

в разделе "Использование имен разделов реестра для TimeZoneNames" говорится, что когда я могу создать элемент календаря в Exchange, я могу передать ему имя часового пояса. Это своего рода работа, но как я могу назвать "восточное дневное время"?

Только "Восточное стандартное время США" считается действительным. Работает так, что я планирую что-то сказать, например, на 14:00, когда он отображается в моем календаре Google, я вижу, что он отображается в 15:00 по восточному поясному времени, поэтому он использовал часовой пояс EST, который я передал. Проблема в том, что он отправляет письма с напоминанием время отображается в "Восточном стандартном времени США".

When: Friday, August 30, 2013 2:00 PM-3:00 PM. US Eastern Standard Time
... rest of email ...

Я не хочу такой текст, как этот. Должно быть написано "Восточное летнее время США" или что-то в этом роде.

Запрос мыла содержит XML как:

<t:CalendarItem xmlns="http://schemas.microsoft.com/exchange/services/2006/types">  
    ...
    <Start>2013-08-30T14:00:00</Start>     
    <t:MeetingTimeZone TimeZoneName="US Eastern Standard Time"></t:MeetingTimeZone>
<t:CalendarItem>

Это Exchange Server 2007, SP1.

Вот изображение того, как выглядит электронная почта в Gmail. (Время немного отличается от моего примера, извините). Время встречи правильное, но оно в теле письма называет его "Восточное стандартное время", что неверно - это должно быть "Восточное летнее время" или что-то в этом роде. (Обратите внимание, что строка является частью тела письма, созданного Exchange Server, а не Gmail.)

1 ответ

Решение

Ключ часового пояса Windows, который вы ищете, точно: "Eastern Standard Time", Это охватывает восточный часовой пояс США, включая как восточное стандартное время, так и восточное летнее время. Имеет отображаемое имя "(UTC-05:00) Eastern Time (US & Canada)",

На самом деле это один из примеров, которые я вызываю в теге часового пояса, который вы должны прочитать, если вы еще этого не сделали.

Другой ключ, который вы нашли "US Eastern Standard Time" на самом деле для зоны с отображаемым именем "(UTC-05:00) Indiana (East)" - который разделен по историческим причинам и в настоящее время устарел. (См. Статью в Википедии " Время в Индиане" и статью Microsoft в этой области, если вам интересно, почему.)

Если вы посмотрите в реестре Windows на HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones, вы увидите действительные ключи. В каждом ключе вы увидите Display имя, которое соответствует каждому. Это объясняет, как они появляются при смене часового пояса в Windows.

Что касается веб-служб Exchange, то в упомянутой статье говорится о том, как можно использовать имя ключа. Но это также говорит о том, как вы можете передать гораздо больше информации в MeetingTimeZone элемент и использовать отображаемое имя вместо.

Если важна совместимость с Календарем Google (и другими), вы можете передать имя часового пояса IANA в TimeZoneName атрибут - в этом случае это будет America/New_York, Вы все равно должны предоставить <BaseOffset>, <Standard>, а также <Daylight> элементы, так что он будет работать прямо на Windows. Увидеть MeetingTimeZone раздел в этой статье.

Я должен заявить, что я сам не пробовал этот подход, но из документации видно, что если вы предоставите эти элементы, то TimeZoneName становится менее важным для Windows, но все равно пройдет мимо.

Вы, безусловно, должны быть в состоянии передать это, используя подход Microsoft:

<MeetingTimeZone TimeZoneName="(GMT-05:00) Eastern Time (US &amp; Canada)">
  <BaseOffset>P0DT5H0M0.0S</BaseOffset>
  <Standard>
    <Offset>P0DT0H0M0.0S</Offset>
    <RelativeYearlyRecurrence>
      <DaysOfWeek>Sunday</DaysOfWeek>
      <DayOfWeekIndex>First</DayOfWeekIndex>
      <Month>November</Month>
    </RelativeYearlyRecurrence>
    <Time>02:00:00.0000000</Time>
  </Standard>
  <Daylight>
    <Offset>-P0DT1H0M0.0S</Offset>
    <RelativeYearlyRecurrence>
      <DaysOfWeek>Sunday</DaysOfWeek>
      <DayOfWeekIndex>Second</DayOfWeekIndex>
      <Month>March</Month>
    </RelativeYearlyRecurrence>
    <Time>02:00:00.0000000</Time>
  </Daylight>
</MeetingTimeZone>

Я предлагаю немного изменить его, передав вместо этого имя зоны IANA, и посмотреть, правильно ли он работает с Gmail и Календарем Google:

<MeetingTimeZone TimeZoneName="America/New_York">
  <BaseOffset>P0DT5H0M0.0S</BaseOffset>
  <Standard>
    <Offset>P0DT0H0M0.0S</Offset>
    <RelativeYearlyRecurrence>
      <DaysOfWeek>Sunday</DaysOfWeek>
      <DayOfWeekIndex>First</DayOfWeekIndex>
      <Month>November</Month>
    </RelativeYearlyRecurrence>
    <Time>02:00:00.0000000</Time>
  </Standard>
  <Daylight>
    <Offset>-P0DT1H0M0.0S</Offset>
    <RelativeYearlyRecurrence>
      <DaysOfWeek>Sunday</DaysOfWeek>
      <DayOfWeekIndex>Second</DayOfWeekIndex>
      <Month>March</Month>
    </RelativeYearlyRecurrence>
    <Time>02:00:00.0000000</Time>
  </Daylight>
</MeetingTimeZone>
Другие вопросы по тегам