How to: Create an Appointment That Starts in the Pacific Time Zone and Ends in the Eastern Time Zone

Office 2013 and later

Occasionally, an appointment may span over a period of time during which the user may have traveled to a different time zone than when the appointment starts. This example creates an appointment that begins in the Pacific Time Zone (UTC-8) and ends in the Eastern Time Zone (UTC-5).

This code sample uses the TimeZones object that represents all the time zones recognized in Microsoft Windows. It also uses the TimeZone object to set or get the StartTimeZone property and the EndTimeZone property on the AppointmentItem object.

Outlook displays all dates in local time, which is expressed in the user's current time zone, controlled by the user's settings in the Windows Control Panel. Outlook also sets or gets properties, such as Start and End, in local time. However, Outlook stores date and time values as Coordinated Universal Time (UTC) rather than local time. If you examine the internal value of Appointment.Start by using the PropertyAccessor object, you would find the internal date and time value is equal to the local date and time value converted to the equivalent UTC date and time value.

Outlook uses the time zone information to map the appointment to the correct UTC time when it saves an appointment, and into the correct local time when it displays the item in the calendar. Changing StartTimeZone affects the value of Appointment.Start, which is always expressed in the local time zone, represented by the CurrentTimeZone property of the object returned by TimeZones. Similarly, changing EndTimeZone affects the value of Appointment.End, which is always expressed in the local time zone, represented by the CurrentTimeZone property of the object returned by Application.TimeZones.

You can retrieve a specific TimeZone from the TimeZones object by using the locale-independent key for the TimeZone in the Windows registry. Locale-independent TimeZone keys are listed under the following key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\TimeZones.

If you use Visual Studio to test this code example, you must first add a reference to the Microsoft Outlook 15.0 Object Library component and specify the Outlook variable when you import the Microsoft.Office.Interop.Outlook namespace. The Imports or using statement must not occur directly before the functions in the code example but must be added before the public Class declaration. The following lines of code show how to do the import and assignment in Visual Basic and C#.

using Outlook = Microsoft.Office.Interop.Outlook;
private void TimeZoneExample()
    Outlook.AppointmentItem appt = Application.CreateItem(
        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; 

Other resources