Compartir a través de


Crear una cita que comience en la zona horaria del Pacífico y finalice en la zona horaria oriental

En ocasiones, una cita puede abarcar un período de tiempo durante el cual es posible que el usuario haya viajado a una zona horaria diferente que cuando comenzó la cita. En este ejemplo se crea una cita que comienza en la zona Hora del Pacífico (UCT-8:00) y finaliza en la zona Hora oriental (UCT-5:30).

Ejemplo

En este ejemplo de código se usa el objeto TimeZones que representa todas las zonas horarias reconocidas en Microsoft Windows. También usa el objeto TimeZone para establecer u obtener la propiedad StartTimeZone y la propiedad EndTimeZone en el objeto AppointmentItem .

Outlook muestra todas las fechas en la hora local, que se expresa en la zona horaria actual del usuario, controlada por la configuración del usuario en el Panel de control de Windows. Outlook también establece o obtiene propiedades, como Start y End, en hora local. Sin embargo, Outlook almacena los valores de fecha y hora como la hora universal coordinada (UTC) en lugar de la hora local. Si examina el valor interno de Appointment.Start mediante el objeto PropertyAccessor , encontrará que el valor interno de fecha y hora es igual al valor de fecha y hora local convertido en el valor de fecha y hora UTC equivalente.

Outlook usa la información de zona horaria para asignar la cita a la hora UTC correcta al guardar la cita y a la hora local correcta al mostrar el elemento en el calendario. El cambio de StartTimeZone afecta al valor de Appointment.Start, que siempre se expresa en la zona horaria local, representada por la propiedad CurrentTimeZone del objeto devuelto por TimeZones. De forma similar, la modificación de EndTimeZone afecta al valor de Appointment.End, que siempre se expresa en la zona horaria local, representado por la propiedad CurrentTimeZone del objeto devuelto por Application.TimeZones.

Puede recuperar una TimeZone específica del objeto TimeZones usando la clave independiente de la configuración regional para la TimeZone en el Registro de Windows. Las claves de zona horaria independientes de la configuración regional aparecen en la clave siguiente: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TimeZones.

Si usa Visual Studio para probar este ejemplo de código, primero debe agregar una referencia al componente de la biblioteca de objetos de Microsoft Outlook 15.0 y especificar la variable de Outlook al importar el espacio de nombres Microsoft.Office.Interop.Outlook. La instrucción Imports o using no deben producirse directamente antes de las funciones en el ejemplo de código, pero deben agregarse antes de la declaración de clase pública. Las líneas siguientes de código muestran cómo realizar la importación y la asignación en Visual Basic y 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);
}

Vea también