Compartilhar via


Criar um compromisso que começa no Fuso Horário do Pacífico e termina no Fuso Horário da Costa Leste dos EUA

Ocasionalmente, um compromisso pode se estender por um período de tempo durante o qual o usuário pode ter viajado para um fuso horário diferente do que quando o compromisso é iniciado. Este exemplo cria um compromisso que começa no Fuso Horário do Pacífico (UTC-8) e termina no Fuso Horário oriental (UTC-5).

Exemplo

Este exemplo de código usa o objeto TimeZones que representa todos os fusos horários reconhecidos no Microsoft Windows. Ele também usa o objeto TimeZone para definir ou obter a propriedade StartTimeZone e a propriedade EndTimeZone no objeto AppointmentItem .

O Outlook exibe todas as datas no horário local, que é expresso no fuso horário atual do usuário, controlado pelas configurações do usuário no windows Painel de Controle. O Outlook também define ou obtém propriedades, como Iniciar e Terminar, no horário local. No entanto, o Outlook armazena valores de data e hora como UTC (Tempo Universal Coordenado) em vez de hora local. Se você examinar o valor interno de Appointment.Start usando o objeto PropertyAccessor , descobrirá que o valor de data e hora interno é igual ao valor de data e hora local convertido no valor de data e hora UTC equivalente.

O Outlook usa as informações de fuso horário para mapear o compromisso para o horário UTC correto quando salva um compromisso e para a hora local correta quando ele exibe o item no calendário. A alteração do StartTimeZone afeta o valor de Appointment.Start, que sempre é expresso no fuso horário local, representado pela propriedade CurrentTimeZone do objeto retornado pela TimeZones. Da mesma forma, a alteração do EndTimeZone afeta o valor de Appointment.End, que sempre é expresso no fuso horário local, representado pela propriedade CurrentTimeZone do objeto retornado por Application.TimeZones.

Você pode recuperar um TimeZone específico do objeto TimeZones usando a chave independente de localidade para o TimeZone no registro do Windows. As chaves timezone independentes da localidade estão listadas na seguinte chave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TimeZones.

Se usar o Visual Studio para testar este exemplo de código, adicione primeiro uma referência ao componente da biblioteca de objetos do Microsoft Outlook 15.0 e especifique a variável do Outlook quando importar o namespace Microsoft.Office.Interop.Outlook. A instrução Imports ou using não deve vir diretamente antes de funções no exemplo de código, mas deve ser adicionada antes da declaração Class pública. The following lines of code show how to do the import and assignment in Visual Basic and 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);
}

Confira também