1

这里的文章:

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

在“为 TimeZoneNames 使用注册表项名称”部分中,告诉我当我可以在 Exchange 中创建日历项目时,我可以将时区名称传递给它。这是一种工作,但我如何命名“东部夏令时间”?

只有“美国东部标准时间”被接受为有效。在我安排的工作中说 14:00,当它显示在我的谷歌日历中时,我看到它显示在美国东部时间 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 组成的。)

在此处输入图像描述

4

1 回答 1

1

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

这实际上是我在时区标签 wiki中提到的示例之一- 如果您还没有阅读,则应该阅读。

您找到的另一个键"US Eastern Standard Time"实际上是用于显示名称的区域"(UTC-05:00) Indiana (East)"- 由于历史原因而被隔离,现在已过时。(如果您对原因感兴趣,请参阅关于印第安纳州时间的 Wikipedia 条目,以及Microsoft 的 KB 文章。)

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

关于 Exchange Web 服务,在您提到的文章中,它确实谈到了如何使用密钥名称。但它也讨论了如何在元素中传递更多信息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>
于 2013-08-21T19:36:46.513 回答