Поделиться через


Создание встречи, начинающейся по тихоокеанскому времени и заканчивающейся по восточному поясному времени

Иногда встреча может растянуться на такой срок, в течение которого пользователь может сменить часовой пояс, уехав из часового пояса, выбранного в начале встречи. В этом примере создается встреча, которая начинается по тихоокеанскому времени (UTC-8) и заканчивается по восточному поясному времени (UTC-5).

Пример

В этом примере кода используется объект TimeZones , представляющий все часовые пояса, распознанные в Microsoft Windows. Он также использует объект TimeZone для задания или получения свойств StartTimeZone и EndTimeZone для объекта AppointmentItem .

Все даты в Outlook отображаются с использованием местного времени, которое выражено в текущем часовом поясе пользователя, контролируемом параметрами пользователя в панели управления Windows. Outlook также задает или получает свойства, такие как Начало и Конец, в локальное время. Однако значения даты и времени сохраняются в Outlook в формате UTC, а не в формате местного времени. Если вы изучите внутреннее значение Appointment.Start с помощью объекта PropertyAccessor , то обнаружите, что внутреннее значение даты и времени равно локальному значению даты и времени, преобразованного в эквивалентное значение даты и времени в формате UTC.

Outlook использует сведения о часовом поясе, чтобы сопоставить встречу с правильным временем в формате UTC при сохранении встречи, и с правильным местным временем при отображении элемента в календаре. Изменение StartTimeZone влияет на значение Appointment.Start, которое всегда выражается в локальном часовом поясе, представленном свойством CurrentTimeZone объекта, возвращаемого TimeZones. Аналогичным образом изменение EndTimeZone влияет на значение Appointment.End, которое всегда выражается в локальном часовом поясе, представленном свойством CurrentTimeZone объекта, возвращаемого Application.TimeZones.

Конкретное значение TimeZone можно извлечь из объекта TimeZones с помощью независимого от региональных стандартов ключа TimeZone в реестре Windows. Ключи часовых поясов, не зависящие от языкового стандарта, перечислены в следующем ключе: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TimeZones.

Если для тестирования этого примера кода вы используете Visual Studio, сначала добавьте ссылку на компонент библиотеки объектов Microsoft Outlook 15.0 и укажите переменную Outlook при импорте пространства имен Microsoft.Office.Interop.Outlook. Инструкция Imports или using не должна идти непосредственно перед функциями в примере кода, но ее нужно добавить перед объявлением общедоступного класса. В следующих строках кода показано, как выполнить импорт и назначение в Visual Basic и C#.

Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Private Sub TimeZoneExample()
    Dim appt As Outlook.AppointmentItem = _
        CType(Application.CreateItem( _
        Outlook.OlItemType.olAppointmentItem), Outlook.AppointmentItem)
    Dim tzs As Outlook.TimeZones = Application.TimeZones
    ' Obtain timezone using indexer and locale-independent key
    Dim tzEastern As Outlook.TimeZone = tzs("Eastern Standard Time")
    Dim tzPacific As Outlook.TimeZone = tzs("Pacific Standard Time")
    appt.Subject = "SEA - JFK Flight"
    appt.Start = DateTime.Parse("8/9/2006 8:00 AM")
    appt.StartTimeZone = tzPacific
    appt.End = DateTime.Parse("8/9/2006 5:30 PM")
    appt.EndTimeZone = tzEastern
    appt.Display(False)
End Sub
private void TimeZoneExample()
{
    Outlook.AppointmentItem appt = Application.CreateItem(
        Outlook.OlItemType.olAppointmentItem)
        as Outlook.AppointmentItem;
    Outlook.TimeZones tzs = Application.TimeZones;
    // Obtain timezone using indexer and locale-independent key
    Outlook.TimeZone tzEastern = tzs["Eastern Standard Time"];
    Outlook.TimeZone tzPacific = tzs["Pacific Standard Time"];
    appt.Subject = "SEA - JFK Flight";
    appt.Start = DateTime.Parse("8/9/2006 8:00 AM");
    appt.StartTimeZone = tzPacific;
    appt.End = DateTime.Parse("8/9/2006 5:30 PM");
    appt.EndTimeZone = tzEastern; 
    appt.Display(false);
}

См. также