如何为Exchange Web服务指定EDT(夏令时)(不管理XML)?

时间:2013-08-21 17:57:57

标签: timezone exchangewebservices exchange-server-2007

这篇文章:

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 ...

我不希望那样的文字。它应该说“美国东部夏令时”或类似的东西。

soap请求包含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构成的。)

enter image description here

1 个答案:

答案 0 :(得分:1)

您正在寻找的Windows时区键正是:"Eastern Standard Time"。这涵盖美国东部时区,包括 东部标准时间和东部夏令时。它的显示名称为"(UTC-05:00) Eastern Time (US & Canada)"

这实际上是我在timezone tag wiki中提到的一个例子 - 如果你还没有,你应该阅读。

您找到的另一个密钥"US Eastern Standard Time"实际上是显示名称为"(UTC-05:00) Indiana (East)"的区域 - 由于历史原因而被隔离,现在已过时。 (如果您对原因感兴趣,请参阅Time in Indiana上的维基百科条目和Microsoft's KB article on this。)

如果您在HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones查看Windows注册表,您将看到有效密钥。在每个密钥中,您将看到与每个密钥对应的Display名称。这解释了在Windows中更改时区时它们的显示方式。

关于Exchange Web服务,在the article you mentioned中,它确实讨论了如何使用密钥名称。但它也讨论了如何在MeetingTimeZone元素中传递更多信息并改为使用显示名称。

如果与Google日历(及其他人)的互操作性很重要,您可以考虑在TimeZoneName属性中传递IANA时区名称 - 在这种情况下,它将是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>